ETH Price: $3,146.93 (-4.59%)
Gas: 4 Gwei

Token

Halloween ChibiLady Tales (CHIBILADY)
 

Overview

Max Total Supply

281 CHIBILADY

Holders

103

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 CHIBILADY
0x414C06497f281871BfD14435023AA057e332075F
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ChibiLady

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-04
*/

// SPDX-License-Identifier: MIT                                          


/*

 ██░ ██  ▄▄▄       ██▓     ██▓     ▒█████   █     █░▓█████ ▓█████  ███▄    █    
▓██░ ██▒▒████▄    ▓██▒    ▓██▒    ▒██▒  ██▒▓█░ █ ░█░▓█   ▀ ▓█   ▀  ██ ▀█   █    
▒██▀▀██░▒██  ▀█▄  ▒██░    ▒██░    ▒██░  ██▒▒█░ █ ░█ ▒███   ▒███   ▓██  ▀█ ██▒   
░▓█ ░██ ░██▄▄▄▄██ ▒██░    ▒██░    ▒██   ██░░█░ █ ░█ ▒▓█  ▄ ▒▓█  ▄ ▓██▒  ▐▌██▒   
░▓█▒░██▓ ▓█   ▓██▒░██████▒░██████▒░ ████▓▒░░░██▒██▓ ░▒████▒░▒████▒▒██░   ▓██░   
 ▒ ░░▒░▒ ▒▒   ▓▒█░░ ▒░▓  ░░ ▒░▓  ░░ ▒░▒░▒░ ░ ▓░▒ ▒  ░░ ▒░ ░░░ ▒░ ░░ ▒░   ▒ ▒    
 ▒ ░▒░ ░  ▒   ▒▒ ░░ ░ ▒  ░░ ░ ▒  ░  ░ ▒ ▒░   ▒ ░ ░   ░ ░  ░ ░ ░  ░░ ░░   ░ ▒░   
 ░  ░░ ░  ░   ▒     ░ ░     ░ ░   ░ ░ ░ ▒    ░   ░     ░      ░      ░   ░ ░    
 ░  ░  ░      ░  ░    ░  ░    ░  ░    ░ ░      ░       ░  ░   ░  ░         ░    
                                                                                
 ▄████▄   ██░ ██  ██▓ ▄▄▄▄    ██▓ ██▓    ▄▄▄      ▓█████▄▓██   ██▓              
▒██▀ ▀█  ▓██░ ██▒▓██▒▓█████▄ ▓██▒▓██▒   ▒████▄    ▒██▀ ██▌▒██  ██▒              
▒▓█    ▄ ▒██▀▀██░▒██▒▒██▒ ▄██▒██▒▒██░   ▒██  ▀█▄  ░██   █▌ ▒██ ██░              
▒▓▓▄ ▄██▒░▓█ ░██ ░██░▒██░█▀  ░██░▒██░   ░██▄▄▄▄██ ░▓█▄   ▌ ░ ▐██▓░              
▒ ▓███▀ ░░▓█▒░██▓░██░░▓█  ▀█▓░██░░██████▒▓█   ▓██▒░▒████▓  ░ ██▒▓░              
░ ░▒ ▒  ░ ▒ ░░▒░▒░▓  ░▒▓███▀▒░▓  ░ ▒░▓  ░▒▒   ▓▒█░ ▒▒▓  ▒   ██▒▒▒               
  ░  ▒    ▒ ░▒░ ░ ▒ ░▒░▒   ░  ▒ ░░ ░ ▒  ░ ▒   ▒▒ ░ ░ ▒  ▒ ▓██ ░▒░               
░         ░  ░░ ░ ▒ ░ ░    ░  ▒ ░  ░ ░    ░   ▒    ░ ░  ░ ▒ ▒ ░░                
░ ░       ░  ░  ░ ░   ░       ░      ░  ░     ░  ░   ░    ░ ░                   
░                          ░                       ░      ░ ░                   
▄▄▄█████▓ ▄▄▄       ██▓    ▓█████   ██████                                      
▓  ██▒ ▓▒▒████▄    ▓██▒    ▓█   ▀ ▒██    ▒                                      
▒ ▓██░ ▒░▒██  ▀█▄  ▒██░    ▒███   ░ ▓██▄                                        
░ ▓██▓ ░ ░██▄▄▄▄██ ▒██░    ▒▓█  ▄   ▒   ██▒                                     
  ▒██▒ ░  ▓█   ▓██▒░██████▒░▒████▒▒██████▒▒                                     
  ▒ ░░    ▒▒   ▓▒█░░ ▒░▓  ░░░ ▒░ ░▒ ▒▓▒ ▒ ░                                     
    ░      ▒   ▒▒ ░░ ░ ▒  ░ ░ ░  ░░ ░▒  ░ ░                                     
  ░        ░   ▒     ░ ░      ░   ░  ░  ░                                       
               ░  ░    ░  ░   ░  ░      ░                                       
                                                                                
*/



pragma solidity ^0.8.0;
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

pragma solidity ^0.8.0;
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }


    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

pragma solidity ^0.8.0;

abstract contract ReentrancyGuard {

    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        _status = _NOT_ENTERED;
    }
}

pragma solidity ^0.8.0;

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    function toString(uint256 value) internal pure returns (string memory) {

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

pragma solidity ^0.8.0;


library EnumerableSet {


    struct Set {
        // Storage of set values
        bytes32[] _values;

        mapping(bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);

            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {

        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            if (lastIndex != toDeleteIndex) {
                bytes32 lastValue = set._values[lastIndex];

                set._values[toDeleteIndex] = lastValue;
                
                set._indexes[lastValue] = valueIndex; 
            }

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        return set._values[index];
    }

    function _values(Set storage set) private view returns (bytes32[] memory) {
        return set._values;
    }

    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {
        return _values(set._inner);
    }

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    function values(AddressSet storage set) internal view returns (address[] memory) {
        bytes32[] memory store = _values(set._inner);
        address[] memory result;

        assembly {
            result := store
        }

        return result;
    }

    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }

    function values(UintSet storage set) internal view returns (uint256[] memory) {
        bytes32[] memory store = _values(set._inner);
        uint256[] memory result;

        /// @solidity memory-safe-assembly
        assembly {
            result := store
        }

        return result;
    }
}

pragma solidity ^0.8.4;

interface IERC721A {

    error ApprovalCallerNotOwnerNorApproved();

    error ApprovalQueryForNonexistentToken();

    error BalanceQueryForZeroAddress();

    error MintToZeroAddress();

    error MintZeroQuantity();

    error OwnerQueryForNonexistentToken();

    error TransferCallerNotOwnerNorApproved();

    error TransferFromIncorrectOwner();

    error TransferToNonERC721ReceiverImplementer();

    error TransferToZeroAddress();

    error URIQueryForNonexistentToken();

    error MintERC2309QuantityExceedsLimit();

    error OwnershipNotInitializedForExtraData();

    struct TokenOwnership {

        address addr;

        uint64 startTimestamp;

        bool burned;

        uint24 extraData;
    }

    function totalSupply() external view returns (uint256);

    function supportsInterface(bytes4 interfaceId) external view returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    function balanceOf(address owner) external view returns (uint256 balance);

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external payable;

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external payable;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external payable;

    function approve(address to, uint256 tokenId) external payable;

    function setApprovalForAll(address operator, bool _approved) external;

    function getApproved(uint256 tokenId) external view returns (address operator);

    function isApprovedForAll(address owner, address operator) external view returns (bool);

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function tokenURI(uint256 tokenId) external view returns (string memory);

    event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to);
}

pragma solidity ^0.8.4;

interface ERC721A__IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

contract ERC721A is IERC721A {

    struct TokenApprovalRef {
        address value;
    }

    uint256 private constant _BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1;

    uint256 private constant _BITPOS_NUMBER_MINTED = 64;

    uint256 private constant _BITPOS_NUMBER_BURNED = 128;

    uint256 private constant _BITPOS_AUX = 192;

    uint256 private constant _BITMASK_AUX_COMPLEMENT = (1 << 192) - 1;

    uint256 private constant _BITPOS_START_TIMESTAMP = 160;

    uint256 private constant _BITMASK_BURNED = 1 << 224;

    uint256 private constant _BITPOS_NEXT_INITIALIZED = 225;

    uint256 private constant _BITMASK_NEXT_INITIALIZED = 1 << 225;

    uint256 private constant _BITPOS_EXTRA_DATA = 232;

    uint256 private constant _BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1;

    uint256 private constant _BITMASK_ADDRESS = (1 << 160) - 1;

    uint256 private constant _MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000;

    bytes32 private constant _TRANSFER_EVENT_SIGNATURE =
        0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef;

    uint256 private _currentIndex;

    uint256 private _burnCounter;

    string private _name;

    string private _symbol;

    mapping(uint256 => uint256) private _packedOwnerships;

    mapping(address => uint256) private _packedAddressData;

    mapping(uint256 => TokenApprovalRef) private _tokenApprovals;

    mapping(address => mapping(address => bool)) private _operatorApprovals;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    function _nextTokenId() internal view virtual returns (uint256) {
        return _currentIndex;
    }

    function totalSupply() public view virtual override returns (uint256) {

        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    function _totalMinted() internal view virtual returns (uint256) {

        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    function _totalBurned() internal view virtual returns (uint256) {
        return _burnCounter;
    }

    function balanceOf(address owner) public view virtual override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return _packedAddressData[owner] & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> _BITPOS_NUMBER_MINTED) & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _numberBurned(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> _BITPOS_NUMBER_BURNED) & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _getAux(address owner) internal view returns (uint64) {
        return uint64(_packedAddressData[owner] >> _BITPOS_AUX);
    }

    function _setAux(address owner, uint64 aux) internal virtual {
        uint256 packed = _packedAddressData[owner];
        uint256 auxCasted;
        // Cast `aux` with assembly to avoid redundant masking.
        assembly {
            auxCasted := aux
        }
        packed = (packed & _BITMASK_AUX_COMPLEMENT) | (auxCasted << _BITPOS_AUX);
        _packedAddressData[owner] = packed;
    }


    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {

        return
            interfaceId == 0x01ffc9a7 || 
            interfaceId == 0x80ac58cd || 
            interfaceId == 0x5b5e139f; 
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        string memory baseURI = _baseURI();
        return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : '';
    }

    function _baseURI() internal view virtual returns (string memory) {
        return '';
    }

    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        return address(uint160(_packedOwnershipOf(tokenId)));
    }

    function _ownershipOf(uint256 tokenId) internal view virtual returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnershipOf(tokenId));
    }

    function _ownershipAt(uint256 index) internal view virtual returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnerships[index]);
    }

    function _initializeOwnershipAt(uint256 index) internal virtual {
        if (_packedOwnerships[index] == 0) {
            _packedOwnerships[index] = _packedOwnershipOf(index);
        }
    }

    function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr)
                if (curr < _currentIndex) {
                    uint256 packed = _packedOwnerships[curr];

                    if (packed & _BITMASK_BURNED == 0) {

                        while (packed == 0) {
                            packed = _packedOwnerships[--curr];
                        }
                        return packed;
                    }
                }
        }
        revert OwnerQueryForNonexistentToken();
    }

    function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) {
        ownership.addr = address(uint160(packed));
        ownership.startTimestamp = uint64(packed >> _BITPOS_START_TIMESTAMP);
        ownership.burned = packed & _BITMASK_BURNED != 0;
        ownership.extraData = uint24(packed >> _BITPOS_EXTRA_DATA);
    }

    function _packOwnershipData(address owner, uint256 flags) private view returns (uint256 result) {
        assembly {
            // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean.
            owner := and(owner, _BITMASK_ADDRESS)
            // `owner | (block.timestamp << _BITPOS_START_TIMESTAMP) | flags`.
            result := or(owner, or(shl(_BITPOS_START_TIMESTAMP, timestamp()), flags))
        }
    }

    function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) {
        // For branchless setting of the `nextInitialized` flag.
        assembly {
            // `(quantity == 1) << _BITPOS_NEXT_INITIALIZED`.
            result := shl(_BITPOS_NEXT_INITIALIZED, eq(quantity, 1))
        }
    }

    function approve(address to, uint256 tokenId) public payable virtual override {
        address owner = ownerOf(tokenId);

        if (_msgSenderERC721A() != owner)
            if (!isApprovedForAll(owner, _msgSenderERC721A())) {
                revert ApprovalCallerNotOwnerNorApproved();
            }

        _tokenApprovals[tokenId].value = to;
        emit Approval(owner, to, tokenId);
    }

    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId].value;
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        _operatorApprovals[_msgSenderERC721A()][operator] = approved;
        emit ApprovalForAll(_msgSenderERC721A(), operator, approved);
    }

    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return
            _startTokenId() <= tokenId &&
            tokenId < _currentIndex && // If within bounds,
            _packedOwnerships[tokenId] & _BITMASK_BURNED == 0; // and not burned.
    }

    function _isSenderApprovedOrOwner(
        address approvedAddress,
        address owner,
        address msgSender
    ) private pure returns (bool result) {
        assembly {

            owner := and(owner, _BITMASK_ADDRESS)

            msgSender := and(msgSender, _BITMASK_ADDRESS)

            result := or(eq(msgSender, owner), eq(msgSender, approvedAddress))
        }
    }

    function _getApprovedSlotAndAddress(uint256 tokenId)
        private
        view
        returns (uint256 approvedAddressSlot, address approvedAddress)
    {
        TokenApprovalRef storage tokenApproval = _tokenApprovals[tokenId];

        assembly {
            approvedAddressSlot := tokenApproval.slot
            approvedAddress := sload(approvedAddressSlot)
        }
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public payable virtual override {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner();

        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId);

        if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A()))
            if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();

        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

        assembly {
            if approvedAddress {

                sstore(approvedAddressSlot, 0)
            }
        }

        unchecked {

            --_packedAddressData[from]; 
            ++_packedAddressData[to]; 

            _packedOwnerships[tokenId] = _packOwnershipData(
                to,
                _BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked)
            );

            if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;

                if (_packedOwnerships[nextTokenId] == 0) {

                    if (nextTokenId != _currentIndex) {

                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public payable virtual override {
        safeTransferFrom(from, to, tokenId, '');
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public payable virtual override {
        transferFrom(from, to, tokenId);
        if (to.code.length != 0)
            if (!_checkContractOnERC721Received(from, to, tokenId, _data)) {
                revert TransferToNonERC721ReceiverImplementer();
            }
    }

    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    function _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns (
            bytes4 retval
        ) {
            return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    function _mint(address to, uint256 quantity) internal virtual {
        uint256 startTokenId = _currentIndex;
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        unchecked {

            _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1);

            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );

            uint256 toMasked;
            uint256 end = startTokenId + quantity;

            assembly {

                toMasked := and(to, _BITMASK_ADDRESS)

                log4(
                    0, 
                    0, 
                    _TRANSFER_EVENT_SIGNATURE, 
                    0, 
                    toMasked, 
                    startTokenId 
                )

                for {
                    let tokenId := add(startTokenId, 1)
                } iszero(eq(tokenId, end)) {
                    tokenId := add(tokenId, 1)
                } {

                    log4(0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, tokenId)
                }
            }
            if (toMasked == 0) revert MintToZeroAddress();

            _currentIndex = end;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    function _mintERC2309(address to, uint256 quantity) internal virtual {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();
        if (quantity > _MAX_MINT_ERC2309_QUANTITY_LIMIT) revert MintERC2309QuantityExceedsLimit();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        unchecked {

            _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1);

            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );

            emit ConsecutiveTransfer(startTokenId, startTokenId + quantity - 1, address(0), to);

            _currentIndex = startTokenId + quantity;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal virtual {
        _mint(to, quantity);

        unchecked {
            if (to.code.length != 0) {
                uint256 end = _currentIndex;
                uint256 index = end - quantity;
                do {
                    if (!_checkContractOnERC721Received(address(0), to, index++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (index < end);
                // Reentrancy protection.
                if (_currentIndex != end) revert();
            }
        }
    }

    function _safeMint(address to, uint256 quantity) internal virtual {
        _safeMint(to, quantity, '');
    }

    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        address from = address(uint160(prevOwnershipPacked));

        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId);

        if (approvalCheck) {
            
            if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A()))
                if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

        assembly {
            if approvedAddress {
                
                sstore(approvedAddressSlot, 0)
            }
        }

        unchecked {

            _packedAddressData[from] += (1 << _BITPOS_NUMBER_BURNED) - 1;

            _packedOwnerships[tokenId] = _packOwnershipData(
                from,
                (_BITMASK_BURNED | _BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked)
            );

            if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;

                if (_packedOwnerships[nextTokenId] == 0) {

                    if (nextTokenId != _currentIndex) {

                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        unchecked {
            _burnCounter++;
        }
    }

    function _setExtraDataAt(uint256 index, uint24 extraData) internal virtual {
        uint256 packed = _packedOwnerships[index];
        if (packed == 0) revert OwnershipNotInitializedForExtraData();
        uint256 extraDataCasted;
        assembly {
            extraDataCasted := extraData
        }
        packed = (packed & _BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << _BITPOS_EXTRA_DATA);
        _packedOwnerships[index] = packed;
    }

    function _extraData(
        address from,
        address to,
        uint24 previousExtraData
    ) internal view virtual returns (uint24) {}

    function _nextExtraData(
        address from,
        address to,
        uint256 prevOwnershipPacked
    ) private view returns (uint256) {
        uint24 extraData = uint24(prevOwnershipPacked >> _BITPOS_EXTRA_DATA);
        return uint256(_extraData(from, to, extraData)) << _BITPOS_EXTRA_DATA;
    }

    function _msgSenderERC721A() internal view virtual returns (address) {
        return msg.sender;
    }

    function _toString(uint256 value) internal pure virtual returns (string memory str) {
        assembly {

            let m := add(mload(0x40), 0xa0)

            mstore(0x40, m)

            str := sub(m, 0x20)

            mstore(str, 0)

            let end := str

            for { let temp := value } 1 {} {
                str := sub(str, 1)

                mstore8(str, add(48, mod(temp, 10)))

                temp := div(temp, 10)

                if iszero(temp) { break }
            }

            let length := sub(end, str)

            str := sub(str, 0x20)

            mstore(str, length)
        }
    }
}

pragma solidity ^0.8.13;

contract OperatorFilterer {
    error OperatorNotAllowed(address operator);

    IOperatorFilterRegistry constant operatorFilterRegistry =
        IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E);

    constructor(address subscriptionOrRegistrantToCopy, bool subscribe) {

        if (address(operatorFilterRegistry).code.length > 0) {
            if (subscribe) {
                operatorFilterRegistry.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy);
            } else {
                if (subscriptionOrRegistrantToCopy != address(0)) {
                    operatorFilterRegistry.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy);
                } else {
                    operatorFilterRegistry.register(address(this));
                }
            }
        }
    }

    modifier onlyAllowedOperator() virtual {

        if (address(operatorFilterRegistry).code.length > 0) {
            if (!operatorFilterRegistry.isOperatorAllowed(address(this), msg.sender)) {
                revert OperatorNotAllowed(msg.sender);
            }
        }
        _;
    }
}

pragma solidity ^0.8.13;

contract DefaultOperatorFilterer is OperatorFilterer {
    address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6);

    constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {}
}

pragma solidity ^0.8.13;

interface IOperatorFilterRegistry {
    function isOperatorAllowed(address registrant, address operator) external returns (bool);
    function register(address registrant) external;
    function registerAndSubscribe(address registrant, address subscription) external;
    function registerAndCopyEntries(address registrant, address registrantToCopy) external;
    function updateOperator(address registrant, address operator, bool filtered) external;
    function updateOperators(address registrant, address[] calldata operators, bool filtered) external;
    function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external;
    function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external;
    function subscribe(address registrant, address registrantToSubscribe) external;
    function unsubscribe(address registrant, bool copyExistingEntries) external;
    function subscriptionOf(address addr) external returns (address registrant);
    function subscribers(address registrant) external returns (address[] memory);
    function subscriberAt(address registrant, uint256 index) external returns (address);
    function copyEntriesOf(address registrant, address registrantToCopy) external;
    function isOperatorFiltered(address registrant, address operator) external returns (bool);
    function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool);
    function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool);
    function filteredOperators(address addr) external returns (address[] memory);
    function filteredCodeHashes(address addr) external returns (bytes32[] memory);
    function filteredOperatorAt(address registrant, uint256 index) external returns (address);
    function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32);
    function isRegistered(address addr) external returns (bool);
    function codeHashOf(address addr) external returns (bytes32);
}

pragma solidity ^0.8.4;

interface IERC721ABurnable is IERC721A {

    function burn(uint256 tokenId) external;
}

pragma solidity ^0.8.4;
abstract contract ERC721ABurnable is ERC721A, IERC721ABurnable {
    function burn(uint256 tokenId) public virtual override {
        _burn(tokenId, true);
    }
}

pragma solidity ^0.8.16;
contract ChibiLady is Ownable, ERC721A, ReentrancyGuard, ERC721ABurnable, DefaultOperatorFilterer{
string public CONTRACT_URI = "";
mapping(address => uint) public userHasMinted;
bool public REVEALED;
string public UNREVEALED_URI = "";
string public BASE_URI = "";
bool public isPublicMintEnabled = false;
uint public COLLECTION_SIZE = 3333;
uint public MINT_PRICE = 0.001 ether;
uint public MAX_BATCH_SIZE = 25;
uint public SUPPLY_PER_WALLET = 25;
uint public FREE_SUPPLY_PER_WALLET = 2;
constructor() ERC721A("Halloween ChibiLady Tales", "CHIBILADY") {}


    function MintWL(uint256 quantity, address receiver) public onlyOwner {
        require(
            totalSupply() + quantity <= COLLECTION_SIZE,
            "No more Chibi in stock!"
        );
        
        _safeMint(receiver, quantity);
    }

    modifier callerIsUser() {
        require(tx.origin == msg.sender, "The caller is another contract");
        _;
    }

    function getPrice(uint quantity) public view returns(uint){
        uint price;
        uint free = FREE_SUPPLY_PER_WALLET - userHasMinted[msg.sender];
        if (quantity >= free) {
            price = (MINT_PRICE) * (quantity - free);
        } else {
            price = 0;
        }
        return price;
    }

    function Mint2Free(uint quantity)
        external
        payable
        callerIsUser 
        nonReentrant
    {
        uint price;
        uint free = FREE_SUPPLY_PER_WALLET - userHasMinted[msg.sender];
        if (quantity >= free) {
            price = (MINT_PRICE) * (quantity - free);
            userHasMinted[msg.sender] = userHasMinted[msg.sender] + free;
        } else {
            price = 0;
            userHasMinted[msg.sender] = userHasMinted[msg.sender] + quantity;
        }

        require(isPublicMintEnabled, "Chibi not ready yet!");
        require(totalSupply() + quantity <= COLLECTION_SIZE, "No more Chibi!");

        require(balanceOf(msg.sender) + quantity <= SUPPLY_PER_WALLET, "Tried to total mint Chibi per wallet over limit");

        require(quantity <= MAX_BATCH_SIZE, "Tried to mint Chibi over limit, retry with reduced quantity");
        require(msg.value >= price, "Must send enough eth");

        _safeMint(msg.sender, quantity);

        if (msg.value > price) {
            payable(msg.sender).transfer(msg.value - price);
        }
    }

    function mint(uint quantity)
        external
        payable
        callerIsUser 
        nonReentrant
    {
        uint price;
        uint free = FREE_SUPPLY_PER_WALLET - userHasMinted[msg.sender];
        if (quantity >= free) {
            price = (MINT_PRICE) * (quantity - free);
            userHasMinted[msg.sender] = userHasMinted[msg.sender] + free;
        } else {
            price = 0;
            userHasMinted[msg.sender] = userHasMinted[msg.sender] + quantity;
        }

        require(isPublicMintEnabled, "Chibi not ready yet!");
        require(totalSupply() + quantity <= COLLECTION_SIZE, "No more Chibi!");

        require(balanceOf(msg.sender) + quantity <= SUPPLY_PER_WALLET, "Tried to total mint Chibi per wallet over limit");

        require(quantity <= MAX_BATCH_SIZE, "Tried to mint Chibi over limit, retry with reduced quantity");
        require(msg.value >= price, "Must send enough eth");

        _safeMint(msg.sender, quantity);

        if (msg.value > price) {
            payable(msg.sender).transfer(msg.value - price);
        }
    }

    function withdrawFunds() external onlyOwner nonReentrant {
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "Transfer failed.");
    }

    function setPublicMintEnabled() public onlyOwner {
        isPublicMintEnabled = !isPublicMintEnabled;
    }

    function setBaseURI(bool _revealed, string memory _baseURI) public onlyOwner {
        BASE_URI = _baseURI;
        REVEALED = _revealed;
    }

    function contractURI() public view returns (string memory) {
        return CONTRACT_URI;
    }

    function setContractURI(string memory _contractURI) public onlyOwner {
        CONTRACT_URI = _contractURI;
    }

    function setCOLLECTIONsIZE(uint256 _new) external onlyOwner {
        COLLECTION_SIZE = _new;
    }

    function setPrice(uint256 _newPrice) external onlyOwner {
        MINT_PRICE = _newPrice;
    }

    function set_FREE_SUPPLY_PER_WALLET(uint256 _new) external onlyOwner {
        FREE_SUPPLY_PER_WALLET = _new;
    }

    function set_SUPPLY_PER_WALLET(uint256 _new) external onlyOwner {
        SUPPLY_PER_WALLET = _new;
    }

    function set_MAX_BATCH_SIZE(uint256 _new) external onlyOwner {
        MAX_BATCH_SIZE = _new;
    }

    function transferFrom(address from, address to, uint256 tokenId) public payable override (ERC721A, IERC721A) onlyAllowedOperator {
        super.transferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId) public payable override (ERC721A, IERC721A) onlyAllowedOperator {
        super.safeTransferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data)
        public payable
        override (ERC721A, IERC721A)
        onlyAllowedOperator
    {
        super.safeTransferFrom(from, to, tokenId, data);
    }

    function tokenURI(uint256 _tokenId)
        public
        view
        override (ERC721A, IERC721A)
        returns (string memory)
    {
        if (REVEALED) {
            return
                string(abi.encodePacked(BASE_URI, Strings.toString(_tokenId)));
        } else {
            return UNREVEALED_URI;
        }
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BASE_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COLLECTION_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONTRACT_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FREE_SUPPLY_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BATCH_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"Mint2Free","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"MintWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"REVEALED","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNREVEALED_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_revealed","type":"bool"},{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"setCOLLECTIONsIZE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_contractURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicMintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"set_FREE_SUPPLY_PER_WALLET","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"set_MAX_BATCH_SIZE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"set_SUPPLY_PER_WALLET","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userHasMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260405180602001604052806000815250600a9081620000249190620006df565b5060405180602001604052806000815250600d9081620000459190620006df565b5060405180602001604052806000815250600e9081620000669190620006df565b506000600f60006101000a81548160ff021916908315150217905550610d0560105566038d7ea4c68000601155601960125560196013556002601455348015620000af57600080fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280601981526020017f48616c6c6f7765656e2043686962694c6164792054616c6573000000000000008152506040518060400160405280600981526020017f43484942494c414459000000000000000000000000000000000000000000000081525062000153620001476200039460201b60201c565b6200039c60201b60201c565b8160039081620001649190620006df565b508060049081620001769190620006df565b50620001876200046060201b60201c565b6001819055505050600160098190555060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156200038c57801562000252576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b8152600401620002189291906200080b565b600060405180830381600087803b1580156200023357600080fd5b505af115801562000248573d6000803e3d6000fd5b505050506200038b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146200030c576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b8152600401620002d29291906200080b565b600060405180830381600087803b158015620002ed57600080fd5b505af115801562000302573d6000803e3d6000fd5b505050506200038a565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b815260040162000355919062000838565b600060405180830381600087803b1580156200037057600080fd5b505af115801562000385573d6000803e3d6000fd5b505050505b5b5b505062000855565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004e757607f821691505b602082108103620004fd57620004fc6200049f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000528565b62000573868362000528565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005c0620005ba620005b4846200058b565b62000595565b6200058b565b9050919050565b6000819050919050565b620005dc836200059f565b620005f4620005eb82620005c7565b84845462000535565b825550505050565b600090565b6200060b620005fc565b62000618818484620005d1565b505050565b5b8181101562000640576200063460008262000601565b6001810190506200061e565b5050565b601f8211156200068f57620006598162000503565b620006648462000518565b8101602085101562000674578190505b6200068c620006838562000518565b8301826200061d565b50505b505050565b600082821c905092915050565b6000620006b46000198460080262000694565b1980831691505092915050565b6000620006cf8383620006a1565b9150826002028217905092915050565b620006ea8262000465565b67ffffffffffffffff81111562000706576200070562000470565b5b620007128254620004ce565b6200071f82828562000644565b600060209050601f83116001811462000757576000841562000742578287015190505b6200074e8582620006c1565b865550620007be565b601f198416620007678662000503565b60005b8281101562000791578489015182556001820191506020850194506020810190506200076a565b86831015620007b15784890151620007ad601f891682620006a1565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007f382620007c6565b9050919050565b6200080581620007e6565b82525050565b6000604082019050620008226000830185620007fa565b620008316020830184620007fa565b9392505050565b60006020820190506200084f6000830184620007fa565b92915050565b6144b180620008656000396000f3fe60806040526004361061025c5760003560e01c806391b7f5ed11610144578063c002d23d116100b6578063e113ad951161007a578063e113ad951461085e578063e757223014610887578063e8a3d485146108c4578063e985e9c5146108ef578063e9d541b01461092c578063f2fde38b146109555761025c565b8063c002d23d14610775578063c87b56dd146107a0578063cfdbf254146107dd578063d8258d9514610808578063dbddb26a146108335761025c565b8063a22cb46511610108578063a22cb4651461069c578063a4cdd719146106c5578063a76a9587146106dc578063a9527e8214610707578063a9b2d10d14610730578063b88d4fde146107595761025c565b806391b7f5ed146105da578063938e3d7b1461060357806395d89b411461062c5780639e1f39d614610657578063a0712d68146106805761025c565b8063336f5ec3116101dd5780635fe75587116101a15780635fe75587146104d75780636352211e1461050257806370a082311461053f578063715018a61461057c57806381a33d6c146105935780638da5cb5b146105af5761025c565b8063336f5ec31461041357806342842e0e1461043c57806342966c6814610458578063507862d11461048157806356b4f673146104ac5761025c565b80631422374f116102245780631422374f1461034d57806318160ddd146103785780631d985778146103a357806323b872dd146103e057806324600fc3146103fc5761025c565b80630116bc2d1461026157806301ffc9a71461028c57806306fdde03146102c9578063081812fc146102f4578063095ea7b314610331575b600080fd5b34801561026d57600080fd5b5061027661097e565b604051610283919061310a565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190613191565b610991565b6040516102c0919061310a565b60405180910390f35b3480156102d557600080fd5b506102de610a23565b6040516102eb919061324e565b60405180910390f35b34801561030057600080fd5b5061031b600480360381019061031691906132a6565b610ab5565b6040516103289190613314565b60405180910390f35b61034b6004803603810190610346919061335b565b610b34565b005b34801561035957600080fd5b50610362610c78565b60405161036f91906133aa565b60405180910390f35b34801561038457600080fd5b5061038d610c7e565b60405161039a91906133aa565b60405180910390f35b3480156103af57600080fd5b506103ca60048036038101906103c591906133c5565b610c95565b6040516103d791906133aa565b60405180910390f35b6103fa60048036038101906103f591906133f2565b610cad565b005b34801561040857600080fd5b50610411610db9565b005b34801561041f57600080fd5b5061043a600480360381019061043591906132a6565b610ec5565b005b610456600480360381019061045191906133f2565b610ed7565b005b34801561046457600080fd5b5061047f600480360381019061047a91906132a6565b610fe3565b005b34801561048d57600080fd5b50610496610ff1565b6040516104a3919061324e565b60405180910390f35b3480156104b857600080fd5b506104c161107f565b6040516104ce919061324e565b60405180910390f35b3480156104e357600080fd5b506104ec61110d565b6040516104f991906133aa565b60405180910390f35b34801561050e57600080fd5b50610529600480360381019061052491906132a6565b611113565b6040516105369190613314565b60405180910390f35b34801561054b57600080fd5b50610566600480360381019061056191906133c5565b611125565b60405161057391906133aa565b60405180910390f35b34801561058857600080fd5b506105916111dd565b005b6105ad60048036038101906105a891906132a6565b6111f1565b005b3480156105bb57600080fd5b506105c461163e565b6040516105d19190613314565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc91906132a6565b611667565b005b34801561060f57600080fd5b5061062a6004803603810190610625919061357a565b611679565b005b34801561063857600080fd5b50610641611694565b60405161064e919061324e565b60405180910390f35b34801561066357600080fd5b5061067e600480360381019061067991906135ef565b611726565b005b61069a600480360381019061069591906132a6565b61175c565b005b3480156106a857600080fd5b506106c360048036038101906106be919061364b565b611ba9565b005b3480156106d157600080fd5b506106da611cb4565b005b3480156106e857600080fd5b506106f1611ce8565b6040516106fe919061310a565b60405180910390f35b34801561071357600080fd5b5061072e600480360381019061072991906132a6565b611cfb565b005b34801561073c57600080fd5b506107576004803603810190610752919061368b565b611d0d565b005b610773600480360381019061076e919061376c565b611d7a565b005b34801561078157600080fd5b5061078a611e88565b60405161079791906133aa565b60405180910390f35b3480156107ac57600080fd5b506107c760048036038101906107c291906132a6565b611e8e565b6040516107d4919061324e565b60405180910390f35b3480156107e957600080fd5b506107f2611f6a565b6040516107ff91906133aa565b60405180910390f35b34801561081457600080fd5b5061081d611f70565b60405161082a91906133aa565b60405180910390f35b34801561083f57600080fd5b50610848611f76565b604051610855919061324e565b60405180910390f35b34801561086a57600080fd5b50610885600480360381019061088091906132a6565b612004565b005b34801561089357600080fd5b506108ae60048036038101906108a991906132a6565b612016565b6040516108bb91906133aa565b60405180910390f35b3480156108d057600080fd5b506108d96120a0565b6040516108e6919061324e565b60405180910390f35b3480156108fb57600080fd5b50610916600480360381019061091191906137ef565b612132565b604051610923919061310a565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e91906132a6565b6121c6565b005b34801561096157600080fd5b5061097c600480360381019061097791906133c5565b6121d8565b005b600f60009054906101000a900460ff1681565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ec57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a1c5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060038054610a329061385e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5e9061385e565b8015610aab5780601f10610a8057610100808354040283529160200191610aab565b820191906000526020600020905b815481529060010190602001808311610a8e57829003601f168201915b5050505050905090565b6000610ac08261225b565b610af6576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b3f82611113565b90508073ffffffffffffffffffffffffffffffffffffffff16610b606122ba565b73ffffffffffffffffffffffffffffffffffffffff1614610bc357610b8c81610b876122ba565b612132565b610bc2576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826007600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60145481565b6000610c886122c2565b6002546001540303905090565b600b6020528060005260406000206000915090505481565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610da9576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610d2492919061388f565b6020604051808303816000875af1158015610d43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6791906138cd565b610da857336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610d9f9190613314565b60405180910390fd5b5b610db48383836122c7565b505050565b610dc16125e9565b600260095403610e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd90613946565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610e3490613997565b60006040518083038185875af1925050503d8060008114610e71576040519150601f19603f3d011682016040523d82523d6000602084013e610e76565b606091505b5050905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb1906139f8565b60405180910390fd5b506001600981905550565b610ecd6125e9565b8060128190555050565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610fd3576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610f4e92919061388f565b6020604051808303816000875af1158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9191906138cd565b610fd257336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610fc99190613314565b60405180910390fd5b5b610fde838383612667565b505050565b610fee816001612687565b50565b600d8054610ffe9061385e565b80601f016020809104026020016040519081016040528092919081815260200182805461102a9061385e565b80156110775780601f1061104c57610100808354040283529160200191611077565b820191906000526020600020905b81548152906001019060200180831161105a57829003601f168201915b505050505081565b600a805461108c9061385e565b80601f01602080910402602001604051908101604052809291908181526020018280546110b89061385e565b80156111055780601f106110da57610100808354040283529160200191611105565b820191906000526020600020905b8154815290600101906020018083116110e857829003601f168201915b505050505081565b60135481565b600061111e826128d9565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361118c576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6111e56125e9565b6111ef60006129a5565b565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461125f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125690613a64565b60405180910390fd5b6002600954036112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b90613946565b60405180910390fd5b6002600981905550600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546014546112fc9190613ab3565b90508083106113b35780836113119190613ab3565b60115461131e9190613ae7565b915080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461136b9190613b29565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611446565b6000915082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114029190613b29565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff16611495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148c90613ba9565b60405180910390fd5b601054836114a1610c7e565b6114ab9190613b29565b11156114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e390613c15565b60405180910390fd5b601354836114f933611125565b6115039190613b29565b1115611544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153b90613ca7565b60405180910390fd5b601254831115611589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158090613d39565b60405180910390fd5b813410156115cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c390613da5565b60405180910390fd5b6115d63384612a69565b81341115611631573373ffffffffffffffffffffffffffffffffffffffff166108fc83346116049190613ab3565b9081150290604051600060405180830381858888f1935050505015801561162f573d6000803e3d6000fd5b505b5050600160098190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61166f6125e9565b8060118190555050565b6116816125e9565b80600a90816116909190613f71565b5050565b6060600480546116a39061385e565b80601f01602080910402602001604051908101604052809291908181526020018280546116cf9061385e565b801561171c5780601f106116f15761010080835404028352916020019161171c565b820191906000526020600020905b8154815290600101906020018083116116ff57829003601f168201915b5050505050905090565b61172e6125e9565b80600e908161173d9190613f71565b5081600c60006101000a81548160ff0219169083151502179055505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c190613a64565b60405180910390fd5b60026009540361180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180690613946565b60405180910390fd5b6002600981905550600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546014546118679190613ab3565b905080831061191e57808361187c9190613ab3565b6011546118899190613ae7565b915080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118d69190613b29565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119b1565b6000915082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461196d9190613b29565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff16611a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f790613ba9565b60405180910390fd5b60105483611a0c610c7e565b611a169190613b29565b1115611a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4e90613c15565b60405180910390fd5b60135483611a6433611125565b611a6e9190613b29565b1115611aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa690613ca7565b60405180910390fd5b601254831115611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aeb90613d39565b60405180910390fd5b81341015611b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2e90613da5565b60405180910390fd5b611b413384612a69565b81341115611b9c573373ffffffffffffffffffffffffffffffffffffffff166108fc8334611b6f9190613ab3565b9081150290604051600060405180830381858888f19350505050158015611b9a573d6000803e3d6000fd5b505b5050600160098190555050565b8060086000611bb66122ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c636122ba565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ca8919061310a565b60405180910390a35050565b611cbc6125e9565b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600c60009054906101000a900460ff1681565b611d036125e9565b8060148190555050565b611d156125e9565b60105482611d21610c7e565b611d2b9190613b29565b1115611d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d639061408f565b60405180910390fd5b611d768183612a69565b5050565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611e76576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401611df192919061388f565b6020604051808303816000875af1158015611e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3491906138cd565b611e7557336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401611e6c9190613314565b60405180910390fd5b5b611e8284848484612a87565b50505050565b60115481565b6060600c60009054906101000a900460ff1615611ed757600e611eb083612afa565b604051602001611ec192919061416e565b6040516020818303038152906040529050611f65565b600d8054611ee49061385e565b80601f0160208091040260200160405190810160405280929190818152602001828054611f109061385e565b8015611f5d5780601f10611f3257610100808354040283529160200191611f5d565b820191906000526020600020905b815481529060010190602001808311611f4057829003601f168201915b505050505090505b919050565b60125481565b60105481565b600e8054611f839061385e565b80601f0160208091040260200160405190810160405280929190818152602001828054611faf9061385e565b8015611ffc5780601f10611fd157610100808354040283529160200191611ffc565b820191906000526020600020905b815481529060010190602001808311611fdf57829003601f168201915b505050505081565b61200c6125e9565b8060138190555050565b6000806000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546014546120689190613ab3565b905080841061209157808461207d9190613ab3565b60115461208a9190613ae7565b9150612096565b600091505b8192505050919050565b6060600a80546120af9061385e565b80601f01602080910402602001604051908101604052809291908181526020018280546120db9061385e565b80156121285780601f106120fd57610100808354040283529160200191612128565b820191906000526020600020905b81548152906001019060200180831161210b57829003601f168201915b5050505050905090565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121ce6125e9565b8060108190555050565b6121e06125e9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361224f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224690614204565b60405180910390fd5b612258816129a5565b50565b6000816122666122c2565b11158015612275575060015482105b80156122b3575060007c0100000000000000000000000000000000000000000000000000000000600560008581526020019081526020016000205416145b9050919050565b600033905090565b600090565b60006122d2826128d9565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612339576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061234584612c5a565b9150915061235b81876123566122ba565b612c81565b6123a7576123708661236b6122ba565b612132565b6123a6576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361240d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61241a8686866001612cc5565b801561242557600082555b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055506124f3856124cf888887612ccb565b7c020000000000000000000000000000000000000000000000000000000017612cf3565b600560008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036125795760006001850190506000600560008381526020019081526020016000205403612577576001548114612576578360056000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125e18686866001612d1e565b505050505050565b6125f1612d24565b73ffffffffffffffffffffffffffffffffffffffff1661260f61163e565b73ffffffffffffffffffffffffffffffffffffffff1614612665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265c90614270565b60405180910390fd5b565b61268283838360405180602001604052806000815250611d7a565b505050565b6000612692836128d9565b905060008190506000806126a586612c5a565b91509150841561270e576126c181846126bc6122ba565b612c81565b61270d576126d6836126d16122ba565b612132565b61270c576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b61271c836000886001612cc5565b801561272757600082555b600160806001901b03600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506127cf8361278c85600088612ccb565b7c02000000000000000000000000000000000000000000000000000000007c01000000000000000000000000000000000000000000000000000000001717612cf3565b600560008881526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008516036128555760006001870190506000600560008381526020019081526020016000205403612853576001548114612852578460056000838152602001908152602001600020819055505b5b505b85600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128bf836000886001612d1e565b600260008154809291906001019190505550505050505050565b600080829050806128e86122c2565b1161296e5760015481101561296d5760006005600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082160361296b575b60008103612961576005600083600190039350838152602001908152602001600020549050612937565b80925050506129a0565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a83828260405180602001604052806000815250612d2c565b5050565b612a92848484610cad565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612af457612abd84848484612dca565b612af3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b606060008203612b41576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c55565b600082905060005b60008214612b73578080612b5c90614290565b915050600a82612b6c9190614307565b9150612b49565b60008167ffffffffffffffff811115612b8f57612b8e61344f565b5b6040519080825280601f01601f191660200182016040528015612bc15781602001600182028036833780820191505090505b5090505b60008514612c4e57600182612bda9190613ab3565b9150600a85612be99190614338565b6030612bf59190613b29565b60f81b818381518110612c0b57612c0a614369565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c479190614307565b9450612bc5565b8093505050505b919050565b60008060006007600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8612ce2868684612f1a565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b600033905090565b612d368383612f23565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612dc55760006001549050600083820390505b612d776000868380600101945086612dca565b612dad576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818110612d64578160015414612dc257600080fd5b50505b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612df06122ba565b8786866040518563ffffffff1660e01b8152600401612e1294939291906143ed565b6020604051808303816000875af1925050508015612e4e57506040513d601f19601f82011682018060405250810190612e4b919061444e565b60015b612ec7573d8060008114612e7e576040519150601f19603f3d011682016040523d82523d6000602084013e612e83565b606091505b506000815103612ebf576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60009392505050565b6000600154905060008203612f64576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f716000848385612cc5565b600160406001901b178202600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612fe883612fd96000866000612ccb565b612fe2856130df565b17612cf3565b6005600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b81811461308957808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460018101905061304e565b50600082036130c4576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060018190555050506130da6000848385612d1e565b505050565b60006001821460e11b9050919050565b60008115159050919050565b613104816130ef565b82525050565b600060208201905061311f60008301846130fb565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61316e81613139565b811461317957600080fd5b50565b60008135905061318b81613165565b92915050565b6000602082840312156131a7576131a661312f565b5b60006131b58482850161317c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131f85780820151818401526020810190506131dd565b60008484015250505050565b6000601f19601f8301169050919050565b6000613220826131be565b61322a81856131c9565b935061323a8185602086016131da565b61324381613204565b840191505092915050565b600060208201905081810360008301526132688184613215565b905092915050565b6000819050919050565b61328381613270565b811461328e57600080fd5b50565b6000813590506132a08161327a565b92915050565b6000602082840312156132bc576132bb61312f565b5b60006132ca84828501613291565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132fe826132d3565b9050919050565b61330e816132f3565b82525050565b60006020820190506133296000830184613305565b92915050565b613338816132f3565b811461334357600080fd5b50565b6000813590506133558161332f565b92915050565b600080604083850312156133725761337161312f565b5b600061338085828601613346565b925050602061339185828601613291565b9150509250929050565b6133a481613270565b82525050565b60006020820190506133bf600083018461339b565b92915050565b6000602082840312156133db576133da61312f565b5b60006133e984828501613346565b91505092915050565b60008060006060848603121561340b5761340a61312f565b5b600061341986828701613346565b935050602061342a86828701613346565b925050604061343b86828701613291565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61348782613204565b810181811067ffffffffffffffff821117156134a6576134a561344f565b5b80604052505050565b60006134b9613125565b90506134c5828261347e565b919050565b600067ffffffffffffffff8211156134e5576134e461344f565b5b6134ee82613204565b9050602081019050919050565b82818337600083830152505050565b600061351d613518846134ca565b6134af565b9050828152602081018484840111156135395761353861344a565b5b6135448482856134fb565b509392505050565b600082601f83011261356157613560613445565b5b813561357184826020860161350a565b91505092915050565b6000602082840312156135905761358f61312f565b5b600082013567ffffffffffffffff8111156135ae576135ad613134565b5b6135ba8482850161354c565b91505092915050565b6135cc816130ef565b81146135d757600080fd5b50565b6000813590506135e9816135c3565b92915050565b600080604083850312156136065761360561312f565b5b6000613614858286016135da565b925050602083013567ffffffffffffffff81111561363557613634613134565b5b6136418582860161354c565b9150509250929050565b600080604083850312156136625761366161312f565b5b600061367085828601613346565b9250506020613681858286016135da565b9150509250929050565b600080604083850312156136a2576136a161312f565b5b60006136b085828601613291565b92505060206136c185828601613346565b9150509250929050565b600067ffffffffffffffff8211156136e6576136e561344f565b5b6136ef82613204565b9050602081019050919050565b600061370f61370a846136cb565b6134af565b90508281526020810184848401111561372b5761372a61344a565b5b6137368482856134fb565b509392505050565b600082601f83011261375357613752613445565b5b81356137638482602086016136fc565b91505092915050565b600080600080608085870312156137865761378561312f565b5b600061379487828801613346565b94505060206137a587828801613346565b93505060406137b687828801613291565b925050606085013567ffffffffffffffff8111156137d7576137d6613134565b5b6137e38782880161373e565b91505092959194509250565b600080604083850312156138065761380561312f565b5b600061381485828601613346565b925050602061382585828601613346565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061387657607f821691505b6020821081036138895761388861382f565b5b50919050565b60006040820190506138a46000830185613305565b6138b16020830184613305565b9392505050565b6000815190506138c7816135c3565b92915050565b6000602082840312156138e3576138e261312f565b5b60006138f1848285016138b8565b91505092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613930601f836131c9565b915061393b826138fa565b602082019050919050565b6000602082019050818103600083015261395f81613923565b9050919050565b600081905092915050565b50565b6000613981600083613966565b915061398c82613971565b600082019050919050565b60006139a282613974565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b60006139e26010836131c9565b91506139ed826139ac565b602082019050919050565b60006020820190508181036000830152613a11816139d5565b9050919050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000613a4e601e836131c9565b9150613a5982613a18565b602082019050919050565b60006020820190508181036000830152613a7d81613a41565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613abe82613270565b9150613ac983613270565b9250828203905081811115613ae157613ae0613a84565b5b92915050565b6000613af282613270565b9150613afd83613270565b9250828202613b0b81613270565b91508282048414831517613b2257613b21613a84565b5b5092915050565b6000613b3482613270565b9150613b3f83613270565b9250828201905080821115613b5757613b56613a84565b5b92915050565b7f4368696269206e6f742072656164792079657421000000000000000000000000600082015250565b6000613b936014836131c9565b9150613b9e82613b5d565b602082019050919050565b60006020820190508181036000830152613bc281613b86565b9050919050565b7f4e6f206d6f726520436869626921000000000000000000000000000000000000600082015250565b6000613bff600e836131c9565b9150613c0a82613bc9565b602082019050919050565b60006020820190508181036000830152613c2e81613bf2565b9050919050565b7f547269656420746f20746f74616c206d696e742043686962692070657220776160008201527f6c6c6574206f766572206c696d69740000000000000000000000000000000000602082015250565b6000613c91602f836131c9565b9150613c9c82613c35565b604082019050919050565b60006020820190508181036000830152613cc081613c84565b9050919050565b7f547269656420746f206d696e74204368696269206f766572206c696d69742c2060008201527f726574727920776974682072656475636564207175616e746974790000000000602082015250565b6000613d23603b836131c9565b9150613d2e82613cc7565b604082019050919050565b60006020820190508181036000830152613d5281613d16565b9050919050565b7f4d7573742073656e6420656e6f75676820657468000000000000000000000000600082015250565b6000613d8f6014836131c9565b9150613d9a82613d59565b602082019050919050565b60006020820190508181036000830152613dbe81613d82565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613e277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613dea565b613e318683613dea565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613e6e613e69613e6484613270565b613e49565b613270565b9050919050565b6000819050919050565b613e8883613e53565b613e9c613e9482613e75565b848454613df7565b825550505050565b600090565b613eb1613ea4565b613ebc818484613e7f565b505050565b5b81811015613ee057613ed5600082613ea9565b600181019050613ec2565b5050565b601f821115613f2557613ef681613dc5565b613eff84613dda565b81016020851015613f0e578190505b613f22613f1a85613dda565b830182613ec1565b50505b505050565b600082821c905092915050565b6000613f4860001984600802613f2a565b1980831691505092915050565b6000613f618383613f37565b9150826002028217905092915050565b613f7a826131be565b67ffffffffffffffff811115613f9357613f9261344f565b5b613f9d825461385e565b613fa8828285613ee4565b600060209050601f831160018114613fdb5760008415613fc9578287015190505b613fd38582613f55565b86555061403b565b601f198416613fe986613dc5565b60005b8281101561401157848901518255600182019150602085019450602081019050613fec565b8683101561402e578489015161402a601f891682613f37565b8355505b6001600288020188555050505b505050505050565b7f4e6f206d6f726520436869626920696e2073746f636b21000000000000000000600082015250565b60006140796017836131c9565b915061408482614043565b602082019050919050565b600060208201905081810360008301526140a88161406c565b9050919050565b600081905092915050565b600081546140c78161385e565b6140d181866140af565b945060018216600081146140ec576001811461410157614134565b60ff1983168652811515820286019350614134565b61410a85613dc5565b60005b8381101561412c5781548189015260018201915060208101905061410d565b838801955050505b50505092915050565b6000614148826131be565b61415281856140af565b93506141628185602086016131da565b80840191505092915050565b600061417a82856140ba565b9150614186828461413d565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141ee6026836131c9565b91506141f982614192565b604082019050919050565b6000602082019050818103600083015261421d816141e1565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061425a6020836131c9565b915061426582614224565b602082019050919050565b600060208201905081810360008301526142898161424d565b9050919050565b600061429b82613270565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036142cd576142cc613a84565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061431282613270565b915061431d83613270565b92508261432d5761432c6142d8565b5b828204905092915050565b600061434382613270565b915061434e83613270565b92508261435e5761435d6142d8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b60006143bf82614398565b6143c981856143a3565b93506143d98185602086016131da565b6143e281613204565b840191505092915050565b60006080820190506144026000830187613305565b61440f6020830186613305565b61441c604083018561339b565b818103606083015261442e81846143b4565b905095945050505050565b60008151905061444881613165565b92915050565b6000602082840312156144645761446361312f565b5b600061447284828501614439565b9150509291505056fea2646970667358221220ae19b776ecb602196d453cfc9e64fb89443188a05266ae12c59b4513e58c090264736f6c63430008120033

Deployed Bytecode

0x60806040526004361061025c5760003560e01c806391b7f5ed11610144578063c002d23d116100b6578063e113ad951161007a578063e113ad951461085e578063e757223014610887578063e8a3d485146108c4578063e985e9c5146108ef578063e9d541b01461092c578063f2fde38b146109555761025c565b8063c002d23d14610775578063c87b56dd146107a0578063cfdbf254146107dd578063d8258d9514610808578063dbddb26a146108335761025c565b8063a22cb46511610108578063a22cb4651461069c578063a4cdd719146106c5578063a76a9587146106dc578063a9527e8214610707578063a9b2d10d14610730578063b88d4fde146107595761025c565b806391b7f5ed146105da578063938e3d7b1461060357806395d89b411461062c5780639e1f39d614610657578063a0712d68146106805761025c565b8063336f5ec3116101dd5780635fe75587116101a15780635fe75587146104d75780636352211e1461050257806370a082311461053f578063715018a61461057c57806381a33d6c146105935780638da5cb5b146105af5761025c565b8063336f5ec31461041357806342842e0e1461043c57806342966c6814610458578063507862d11461048157806356b4f673146104ac5761025c565b80631422374f116102245780631422374f1461034d57806318160ddd146103785780631d985778146103a357806323b872dd146103e057806324600fc3146103fc5761025c565b80630116bc2d1461026157806301ffc9a71461028c57806306fdde03146102c9578063081812fc146102f4578063095ea7b314610331575b600080fd5b34801561026d57600080fd5b5061027661097e565b604051610283919061310a565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190613191565b610991565b6040516102c0919061310a565b60405180910390f35b3480156102d557600080fd5b506102de610a23565b6040516102eb919061324e565b60405180910390f35b34801561030057600080fd5b5061031b600480360381019061031691906132a6565b610ab5565b6040516103289190613314565b60405180910390f35b61034b6004803603810190610346919061335b565b610b34565b005b34801561035957600080fd5b50610362610c78565b60405161036f91906133aa565b60405180910390f35b34801561038457600080fd5b5061038d610c7e565b60405161039a91906133aa565b60405180910390f35b3480156103af57600080fd5b506103ca60048036038101906103c591906133c5565b610c95565b6040516103d791906133aa565b60405180910390f35b6103fa60048036038101906103f591906133f2565b610cad565b005b34801561040857600080fd5b50610411610db9565b005b34801561041f57600080fd5b5061043a600480360381019061043591906132a6565b610ec5565b005b610456600480360381019061045191906133f2565b610ed7565b005b34801561046457600080fd5b5061047f600480360381019061047a91906132a6565b610fe3565b005b34801561048d57600080fd5b50610496610ff1565b6040516104a3919061324e565b60405180910390f35b3480156104b857600080fd5b506104c161107f565b6040516104ce919061324e565b60405180910390f35b3480156104e357600080fd5b506104ec61110d565b6040516104f991906133aa565b60405180910390f35b34801561050e57600080fd5b50610529600480360381019061052491906132a6565b611113565b6040516105369190613314565b60405180910390f35b34801561054b57600080fd5b50610566600480360381019061056191906133c5565b611125565b60405161057391906133aa565b60405180910390f35b34801561058857600080fd5b506105916111dd565b005b6105ad60048036038101906105a891906132a6565b6111f1565b005b3480156105bb57600080fd5b506105c461163e565b6040516105d19190613314565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc91906132a6565b611667565b005b34801561060f57600080fd5b5061062a6004803603810190610625919061357a565b611679565b005b34801561063857600080fd5b50610641611694565b60405161064e919061324e565b60405180910390f35b34801561066357600080fd5b5061067e600480360381019061067991906135ef565b611726565b005b61069a600480360381019061069591906132a6565b61175c565b005b3480156106a857600080fd5b506106c360048036038101906106be919061364b565b611ba9565b005b3480156106d157600080fd5b506106da611cb4565b005b3480156106e857600080fd5b506106f1611ce8565b6040516106fe919061310a565b60405180910390f35b34801561071357600080fd5b5061072e600480360381019061072991906132a6565b611cfb565b005b34801561073c57600080fd5b506107576004803603810190610752919061368b565b611d0d565b005b610773600480360381019061076e919061376c565b611d7a565b005b34801561078157600080fd5b5061078a611e88565b60405161079791906133aa565b60405180910390f35b3480156107ac57600080fd5b506107c760048036038101906107c291906132a6565b611e8e565b6040516107d4919061324e565b60405180910390f35b3480156107e957600080fd5b506107f2611f6a565b6040516107ff91906133aa565b60405180910390f35b34801561081457600080fd5b5061081d611f70565b60405161082a91906133aa565b60405180910390f35b34801561083f57600080fd5b50610848611f76565b604051610855919061324e565b60405180910390f35b34801561086a57600080fd5b50610885600480360381019061088091906132a6565b612004565b005b34801561089357600080fd5b506108ae60048036038101906108a991906132a6565b612016565b6040516108bb91906133aa565b60405180910390f35b3480156108d057600080fd5b506108d96120a0565b6040516108e6919061324e565b60405180910390f35b3480156108fb57600080fd5b50610916600480360381019061091191906137ef565b612132565b604051610923919061310a565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e91906132a6565b6121c6565b005b34801561096157600080fd5b5061097c600480360381019061097791906133c5565b6121d8565b005b600f60009054906101000a900460ff1681565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ec57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a1c5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060038054610a329061385e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5e9061385e565b8015610aab5780601f10610a8057610100808354040283529160200191610aab565b820191906000526020600020905b815481529060010190602001808311610a8e57829003601f168201915b5050505050905090565b6000610ac08261225b565b610af6576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b3f82611113565b90508073ffffffffffffffffffffffffffffffffffffffff16610b606122ba565b73ffffffffffffffffffffffffffffffffffffffff1614610bc357610b8c81610b876122ba565b612132565b610bc2576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826007600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60145481565b6000610c886122c2565b6002546001540303905090565b600b6020528060005260406000206000915090505481565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610da9576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610d2492919061388f565b6020604051808303816000875af1158015610d43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6791906138cd565b610da857336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610d9f9190613314565b60405180910390fd5b5b610db48383836122c7565b505050565b610dc16125e9565b600260095403610e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd90613946565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610e3490613997565b60006040518083038185875af1925050503d8060008114610e71576040519150601f19603f3d011682016040523d82523d6000602084013e610e76565b606091505b5050905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb1906139f8565b60405180910390fd5b506001600981905550565b610ecd6125e9565b8060128190555050565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610fd3576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610f4e92919061388f565b6020604051808303816000875af1158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9191906138cd565b610fd257336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610fc99190613314565b60405180910390fd5b5b610fde838383612667565b505050565b610fee816001612687565b50565b600d8054610ffe9061385e565b80601f016020809104026020016040519081016040528092919081815260200182805461102a9061385e565b80156110775780601f1061104c57610100808354040283529160200191611077565b820191906000526020600020905b81548152906001019060200180831161105a57829003601f168201915b505050505081565b600a805461108c9061385e565b80601f01602080910402602001604051908101604052809291908181526020018280546110b89061385e565b80156111055780601f106110da57610100808354040283529160200191611105565b820191906000526020600020905b8154815290600101906020018083116110e857829003601f168201915b505050505081565b60135481565b600061111e826128d9565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361118c576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6111e56125e9565b6111ef60006129a5565b565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461125f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125690613a64565b60405180910390fd5b6002600954036112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b90613946565b60405180910390fd5b6002600981905550600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546014546112fc9190613ab3565b90508083106113b35780836113119190613ab3565b60115461131e9190613ae7565b915080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461136b9190613b29565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611446565b6000915082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114029190613b29565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff16611495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148c90613ba9565b60405180910390fd5b601054836114a1610c7e565b6114ab9190613b29565b11156114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e390613c15565b60405180910390fd5b601354836114f933611125565b6115039190613b29565b1115611544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153b90613ca7565b60405180910390fd5b601254831115611589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158090613d39565b60405180910390fd5b813410156115cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c390613da5565b60405180910390fd5b6115d63384612a69565b81341115611631573373ffffffffffffffffffffffffffffffffffffffff166108fc83346116049190613ab3565b9081150290604051600060405180830381858888f1935050505015801561162f573d6000803e3d6000fd5b505b5050600160098190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61166f6125e9565b8060118190555050565b6116816125e9565b80600a90816116909190613f71565b5050565b6060600480546116a39061385e565b80601f01602080910402602001604051908101604052809291908181526020018280546116cf9061385e565b801561171c5780601f106116f15761010080835404028352916020019161171c565b820191906000526020600020905b8154815290600101906020018083116116ff57829003601f168201915b5050505050905090565b61172e6125e9565b80600e908161173d9190613f71565b5081600c60006101000a81548160ff0219169083151502179055505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c190613a64565b60405180910390fd5b60026009540361180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180690613946565b60405180910390fd5b6002600981905550600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546014546118679190613ab3565b905080831061191e57808361187c9190613ab3565b6011546118899190613ae7565b915080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118d69190613b29565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119b1565b6000915082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461196d9190613b29565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff16611a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f790613ba9565b60405180910390fd5b60105483611a0c610c7e565b611a169190613b29565b1115611a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4e90613c15565b60405180910390fd5b60135483611a6433611125565b611a6e9190613b29565b1115611aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa690613ca7565b60405180910390fd5b601254831115611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aeb90613d39565b60405180910390fd5b81341015611b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2e90613da5565b60405180910390fd5b611b413384612a69565b81341115611b9c573373ffffffffffffffffffffffffffffffffffffffff166108fc8334611b6f9190613ab3565b9081150290604051600060405180830381858888f19350505050158015611b9a573d6000803e3d6000fd5b505b5050600160098190555050565b8060086000611bb66122ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c636122ba565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ca8919061310a565b60405180910390a35050565b611cbc6125e9565b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600c60009054906101000a900460ff1681565b611d036125e9565b8060148190555050565b611d156125e9565b60105482611d21610c7e565b611d2b9190613b29565b1115611d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d639061408f565b60405180910390fd5b611d768183612a69565b5050565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611e76576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401611df192919061388f565b6020604051808303816000875af1158015611e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3491906138cd565b611e7557336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401611e6c9190613314565b60405180910390fd5b5b611e8284848484612a87565b50505050565b60115481565b6060600c60009054906101000a900460ff1615611ed757600e611eb083612afa565b604051602001611ec192919061416e565b6040516020818303038152906040529050611f65565b600d8054611ee49061385e565b80601f0160208091040260200160405190810160405280929190818152602001828054611f109061385e565b8015611f5d5780601f10611f3257610100808354040283529160200191611f5d565b820191906000526020600020905b815481529060010190602001808311611f4057829003601f168201915b505050505090505b919050565b60125481565b60105481565b600e8054611f839061385e565b80601f0160208091040260200160405190810160405280929190818152602001828054611faf9061385e565b8015611ffc5780601f10611fd157610100808354040283529160200191611ffc565b820191906000526020600020905b815481529060010190602001808311611fdf57829003601f168201915b505050505081565b61200c6125e9565b8060138190555050565b6000806000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546014546120689190613ab3565b905080841061209157808461207d9190613ab3565b60115461208a9190613ae7565b9150612096565b600091505b8192505050919050565b6060600a80546120af9061385e565b80601f01602080910402602001604051908101604052809291908181526020018280546120db9061385e565b80156121285780601f106120fd57610100808354040283529160200191612128565b820191906000526020600020905b81548152906001019060200180831161210b57829003601f168201915b5050505050905090565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121ce6125e9565b8060108190555050565b6121e06125e9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361224f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224690614204565b60405180910390fd5b612258816129a5565b50565b6000816122666122c2565b11158015612275575060015482105b80156122b3575060007c0100000000000000000000000000000000000000000000000000000000600560008581526020019081526020016000205416145b9050919050565b600033905090565b600090565b60006122d2826128d9565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612339576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061234584612c5a565b9150915061235b81876123566122ba565b612c81565b6123a7576123708661236b6122ba565b612132565b6123a6576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361240d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61241a8686866001612cc5565b801561242557600082555b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055506124f3856124cf888887612ccb565b7c020000000000000000000000000000000000000000000000000000000017612cf3565b600560008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036125795760006001850190506000600560008381526020019081526020016000205403612577576001548114612576578360056000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125e18686866001612d1e565b505050505050565b6125f1612d24565b73ffffffffffffffffffffffffffffffffffffffff1661260f61163e565b73ffffffffffffffffffffffffffffffffffffffff1614612665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265c90614270565b60405180910390fd5b565b61268283838360405180602001604052806000815250611d7a565b505050565b6000612692836128d9565b905060008190506000806126a586612c5a565b91509150841561270e576126c181846126bc6122ba565b612c81565b61270d576126d6836126d16122ba565b612132565b61270c576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b61271c836000886001612cc5565b801561272757600082555b600160806001901b03600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506127cf8361278c85600088612ccb565b7c02000000000000000000000000000000000000000000000000000000007c01000000000000000000000000000000000000000000000000000000001717612cf3565b600560008881526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008516036128555760006001870190506000600560008381526020019081526020016000205403612853576001548114612852578460056000838152602001908152602001600020819055505b5b505b85600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128bf836000886001612d1e565b600260008154809291906001019190505550505050505050565b600080829050806128e86122c2565b1161296e5760015481101561296d5760006005600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082160361296b575b60008103612961576005600083600190039350838152602001908152602001600020549050612937565b80925050506129a0565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a83828260405180602001604052806000815250612d2c565b5050565b612a92848484610cad565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612af457612abd84848484612dca565b612af3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b606060008203612b41576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c55565b600082905060005b60008214612b73578080612b5c90614290565b915050600a82612b6c9190614307565b9150612b49565b60008167ffffffffffffffff811115612b8f57612b8e61344f565b5b6040519080825280601f01601f191660200182016040528015612bc15781602001600182028036833780820191505090505b5090505b60008514612c4e57600182612bda9190613ab3565b9150600a85612be99190614338565b6030612bf59190613b29565b60f81b818381518110612c0b57612c0a614369565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c479190614307565b9450612bc5565b8093505050505b919050565b60008060006007600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8612ce2868684612f1a565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b600033905090565b612d368383612f23565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612dc55760006001549050600083820390505b612d776000868380600101945086612dca565b612dad576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818110612d64578160015414612dc257600080fd5b50505b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612df06122ba565b8786866040518563ffffffff1660e01b8152600401612e1294939291906143ed565b6020604051808303816000875af1925050508015612e4e57506040513d601f19601f82011682018060405250810190612e4b919061444e565b60015b612ec7573d8060008114612e7e576040519150601f19603f3d011682016040523d82523d6000602084013e612e83565b606091505b506000815103612ebf576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60009392505050565b6000600154905060008203612f64576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f716000848385612cc5565b600160406001901b178202600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612fe883612fd96000866000612ccb565b612fe2856130df565b17612cf3565b6005600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b81811461308957808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460018101905061304e565b50600082036130c4576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060018190555050506130da6000848385612d1e565b505050565b60006001821460e11b9050919050565b60008115159050919050565b613104816130ef565b82525050565b600060208201905061311f60008301846130fb565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61316e81613139565b811461317957600080fd5b50565b60008135905061318b81613165565b92915050565b6000602082840312156131a7576131a661312f565b5b60006131b58482850161317c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131f85780820151818401526020810190506131dd565b60008484015250505050565b6000601f19601f8301169050919050565b6000613220826131be565b61322a81856131c9565b935061323a8185602086016131da565b61324381613204565b840191505092915050565b600060208201905081810360008301526132688184613215565b905092915050565b6000819050919050565b61328381613270565b811461328e57600080fd5b50565b6000813590506132a08161327a565b92915050565b6000602082840312156132bc576132bb61312f565b5b60006132ca84828501613291565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132fe826132d3565b9050919050565b61330e816132f3565b82525050565b60006020820190506133296000830184613305565b92915050565b613338816132f3565b811461334357600080fd5b50565b6000813590506133558161332f565b92915050565b600080604083850312156133725761337161312f565b5b600061338085828601613346565b925050602061339185828601613291565b9150509250929050565b6133a481613270565b82525050565b60006020820190506133bf600083018461339b565b92915050565b6000602082840312156133db576133da61312f565b5b60006133e984828501613346565b91505092915050565b60008060006060848603121561340b5761340a61312f565b5b600061341986828701613346565b935050602061342a86828701613346565b925050604061343b86828701613291565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61348782613204565b810181811067ffffffffffffffff821117156134a6576134a561344f565b5b80604052505050565b60006134b9613125565b90506134c5828261347e565b919050565b600067ffffffffffffffff8211156134e5576134e461344f565b5b6134ee82613204565b9050602081019050919050565b82818337600083830152505050565b600061351d613518846134ca565b6134af565b9050828152602081018484840111156135395761353861344a565b5b6135448482856134fb565b509392505050565b600082601f83011261356157613560613445565b5b813561357184826020860161350a565b91505092915050565b6000602082840312156135905761358f61312f565b5b600082013567ffffffffffffffff8111156135ae576135ad613134565b5b6135ba8482850161354c565b91505092915050565b6135cc816130ef565b81146135d757600080fd5b50565b6000813590506135e9816135c3565b92915050565b600080604083850312156136065761360561312f565b5b6000613614858286016135da565b925050602083013567ffffffffffffffff81111561363557613634613134565b5b6136418582860161354c565b9150509250929050565b600080604083850312156136625761366161312f565b5b600061367085828601613346565b9250506020613681858286016135da565b9150509250929050565b600080604083850312156136a2576136a161312f565b5b60006136b085828601613291565b92505060206136c185828601613346565b9150509250929050565b600067ffffffffffffffff8211156136e6576136e561344f565b5b6136ef82613204565b9050602081019050919050565b600061370f61370a846136cb565b6134af565b90508281526020810184848401111561372b5761372a61344a565b5b6137368482856134fb565b509392505050565b600082601f83011261375357613752613445565b5b81356137638482602086016136fc565b91505092915050565b600080600080608085870312156137865761378561312f565b5b600061379487828801613346565b94505060206137a587828801613346565b93505060406137b687828801613291565b925050606085013567ffffffffffffffff8111156137d7576137d6613134565b5b6137e38782880161373e565b91505092959194509250565b600080604083850312156138065761380561312f565b5b600061381485828601613346565b925050602061382585828601613346565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061387657607f821691505b6020821081036138895761388861382f565b5b50919050565b60006040820190506138a46000830185613305565b6138b16020830184613305565b9392505050565b6000815190506138c7816135c3565b92915050565b6000602082840312156138e3576138e261312f565b5b60006138f1848285016138b8565b91505092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613930601f836131c9565b915061393b826138fa565b602082019050919050565b6000602082019050818103600083015261395f81613923565b9050919050565b600081905092915050565b50565b6000613981600083613966565b915061398c82613971565b600082019050919050565b60006139a282613974565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b60006139e26010836131c9565b91506139ed826139ac565b602082019050919050565b60006020820190508181036000830152613a11816139d5565b9050919050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000613a4e601e836131c9565b9150613a5982613a18565b602082019050919050565b60006020820190508181036000830152613a7d81613a41565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613abe82613270565b9150613ac983613270565b9250828203905081811115613ae157613ae0613a84565b5b92915050565b6000613af282613270565b9150613afd83613270565b9250828202613b0b81613270565b91508282048414831517613b2257613b21613a84565b5b5092915050565b6000613b3482613270565b9150613b3f83613270565b9250828201905080821115613b5757613b56613a84565b5b92915050565b7f4368696269206e6f742072656164792079657421000000000000000000000000600082015250565b6000613b936014836131c9565b9150613b9e82613b5d565b602082019050919050565b60006020820190508181036000830152613bc281613b86565b9050919050565b7f4e6f206d6f726520436869626921000000000000000000000000000000000000600082015250565b6000613bff600e836131c9565b9150613c0a82613bc9565b602082019050919050565b60006020820190508181036000830152613c2e81613bf2565b9050919050565b7f547269656420746f20746f74616c206d696e742043686962692070657220776160008201527f6c6c6574206f766572206c696d69740000000000000000000000000000000000602082015250565b6000613c91602f836131c9565b9150613c9c82613c35565b604082019050919050565b60006020820190508181036000830152613cc081613c84565b9050919050565b7f547269656420746f206d696e74204368696269206f766572206c696d69742c2060008201527f726574727920776974682072656475636564207175616e746974790000000000602082015250565b6000613d23603b836131c9565b9150613d2e82613cc7565b604082019050919050565b60006020820190508181036000830152613d5281613d16565b9050919050565b7f4d7573742073656e6420656e6f75676820657468000000000000000000000000600082015250565b6000613d8f6014836131c9565b9150613d9a82613d59565b602082019050919050565b60006020820190508181036000830152613dbe81613d82565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613e277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613dea565b613e318683613dea565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613e6e613e69613e6484613270565b613e49565b613270565b9050919050565b6000819050919050565b613e8883613e53565b613e9c613e9482613e75565b848454613df7565b825550505050565b600090565b613eb1613ea4565b613ebc818484613e7f565b505050565b5b81811015613ee057613ed5600082613ea9565b600181019050613ec2565b5050565b601f821115613f2557613ef681613dc5565b613eff84613dda565b81016020851015613f0e578190505b613f22613f1a85613dda565b830182613ec1565b50505b505050565b600082821c905092915050565b6000613f4860001984600802613f2a565b1980831691505092915050565b6000613f618383613f37565b9150826002028217905092915050565b613f7a826131be565b67ffffffffffffffff811115613f9357613f9261344f565b5b613f9d825461385e565b613fa8828285613ee4565b600060209050601f831160018114613fdb5760008415613fc9578287015190505b613fd38582613f55565b86555061403b565b601f198416613fe986613dc5565b60005b8281101561401157848901518255600182019150602085019450602081019050613fec565b8683101561402e578489015161402a601f891682613f37565b8355505b6001600288020188555050505b505050505050565b7f4e6f206d6f726520436869626920696e2073746f636b21000000000000000000600082015250565b60006140796017836131c9565b915061408482614043565b602082019050919050565b600060208201905081810360008301526140a88161406c565b9050919050565b600081905092915050565b600081546140c78161385e565b6140d181866140af565b945060018216600081146140ec576001811461410157614134565b60ff1983168652811515820286019350614134565b61410a85613dc5565b60005b8381101561412c5781548189015260018201915060208101905061410d565b838801955050505b50505092915050565b6000614148826131be565b61415281856140af565b93506141628185602086016131da565b80840191505092915050565b600061417a82856140ba565b9150614186828461413d565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141ee6026836131c9565b91506141f982614192565b604082019050919050565b6000602082019050818103600083015261421d816141e1565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061425a6020836131c9565b915061426582614224565b602082019050919050565b600060208201905081810360008301526142898161424d565b9050919050565b600061429b82613270565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036142cd576142cc613a84565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061431282613270565b915061431d83613270565b92508261432d5761432c6142d8565b5b828204905092915050565b600061434382613270565b915061434e83613270565b92508261435e5761435d6142d8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b60006143bf82614398565b6143c981856143a3565b93506143d98185602086016131da565b6143e281613204565b840191505092915050565b60006080820190506144026000830187613305565b61440f6020830186613305565b61441c604083018561339b565b818103606083015261442e81846143b4565b905095945050505050565b60008151905061444881613165565b92915050565b6000602082840312156144645761446361312f565b5b600061447284828501614439565b9150509291505056fea2646970667358221220ae19b776ecb602196d453cfc9e64fb89443188a05266ae12c59b4513e58c090264736f6c63430008120033

Deployed Bytecode Sourcemap

38671:5799:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38942:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19168:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19420:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22996:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22580:408;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39131:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17531:180;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38805:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43472:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42210:191;;;;;;;;;;;;;:::i;:::-;;43363:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43665:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38544:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38876:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38771:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39094:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20068:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17996:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5280:103;;;;;;;;;;;;;:::i;:::-;;39971:1114;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5045:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43018:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42786:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19528:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42527:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41093:1109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23222:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42409:110;;;;;;;;;;;;;:::i;:::-;;38853:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43123:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39248:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43866:250;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39021:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44124:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39060:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38984:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38912:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43248:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39639:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42681:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23464:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42909:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5393:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38942:39;;;;;;;;;;;;;:::o;19168:244::-;19253:4;19307:10;19292:25;;:11;:25;;;;:68;;;;19350:10;19335:25;;:11;:25;;;;19292:68;:111;;;;19393:10;19378:25;;:11;:25;;;;19292:111;19272:131;;19168:244;;;:::o;19420:100::-;19474:13;19507:5;19500:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19420:100;:::o;22996:218::-;23072:7;23097:16;23105:7;23097;:16::i;:::-;23092:64;;23122:34;;;;;;;;;;;;;;23092:64;23176:15;:24;23192:7;23176:24;;;;;;;;;;;:30;;;;;;;;;;;;23169:37;;22996:218;;;:::o;22580:408::-;22669:13;22685:16;22693:7;22685;:16::i;:::-;22669:32;;22741:5;22718:28;;:19;:17;:19::i;:::-;:28;;;22714:175;;22766:44;22783:5;22790:19;:17;:19::i;:::-;22766:16;:44::i;:::-;22761:128;;22838:35;;;;;;;;;;;;;;22761:128;22714:175;22934:2;22901:15;:24;22917:7;22901:24;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;22972:7;22968:2;22952:28;;22961:5;22952:28;;;;;;;;;;;;22658:330;22580:408;;:::o;39131:38::-;;;;:::o;17531:180::-;17592:7;17677:15;:13;:15::i;:::-;17662:12;;17646:13;;:28;:46;17639:53;;17531:180;:::o;38805:45::-;;;;;;;;;;;;;;;;;:::o;43472:185::-;35780:1;34991:42;35734:43;;;:47;35730:225;;;34991:42;35803:40;;;35852:4;35859:10;35803:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35798:146;;35917:10;35898:30;;;;;;;;;;;:::i;:::-;;;;;;;;35798:146;35730:225;43612:37:::1;43631:4;43637:2;43641:7;43612:18;:37::i;:::-;43472:185:::0;;;:::o;42210:191::-;5004:13;:11;:13::i;:::-;5954:1:::1;6174:7;;:19:::0;6166:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5954:1;6307:7;:18;;;;42279:12:::2;42297:10;:15;;42320:21;42297:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42278:68;;;42365:7;42357:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;42267:134;5910:1:::1;6352:7;:22;;;;42210:191::o:0;43363:101::-;5004:13;:11;:13::i;:::-;43452:4:::1;43435:14;:21;;;;43363:101:::0;:::o;43665:193::-;35780:1;34991:42;35734:43;;;:47;35730:225;;;34991:42;35803:40;;;35852:4;35859:10;35803:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35798:146;;35917:10;35898:30;;;;;;;;;;;:::i;:::-;;;;;;;;35798:146;35730:225;43809:41:::1;43832:4;43838:2;43842:7;43809:22;:41::i;:::-;43665:193:::0;;;:::o;38544:94::-;38610:20;38616:7;38625:4;38610:5;:20::i;:::-;38544:94;:::o;38876:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38771:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39094:34::-;;;;:::o;20068:152::-;20140:7;20183:27;20202:7;20183:18;:27::i;:::-;20160:52;;20068:152;;;:::o;17996:233::-;18068:7;18109:1;18092:19;;:5;:19;;;18088:60;;18120:28;;;;;;;;;;;;;;18088:60;15804:13;18166:18;:25;18185:5;18166:25;;;;;;;;;;;;;;;;:55;18159:62;;17996:233;;;:::o;5280:103::-;5004:13;:11;:13::i;:::-;5345:30:::1;5372:1;5345:18;:30::i;:::-;5280:103::o:0;39971:1114::-;39566:10;39553:23;;:9;:23;;;39545:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5954:1:::1;6174:7;;:19:::0;6166:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5954:1;6307:7;:18;;;;40101:10:::2;40122:9:::0;40159:13:::2;:25;40173:10;40159:25;;;;;;;;;;;;;;;;40134:22;;:50;;;;:::i;:::-;40122:62;;40211:4;40199:8;:16;40195:285;;40267:4;40256:8;:15;;;;:::i;:::-;40241:10;;40240:32;;;;:::i;:::-;40232:40;;40343:4;40315:13;:25;40329:10;40315:25;;;;;;;;;;;;;;;;:32;;;;:::i;:::-;40287:13;:25;40301:10;40287:25;;;;;;;;;;;;;;;:60;;;;40195:285;;;40388:1;40380:9;;40460:8;40432:13;:25;40446:10;40432:25;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;40404:13;:25;40418:10;40404:25;;;;;;;;;;;;;;;:64;;;;40195:285;40500:19;;;;;;;;;;;40492:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;40591:15;;40579:8;40563:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:43;;40555:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;40682:17;;40670:8;40646:21;40656:10;40646:9;:21::i;:::-;:32;;;;:::i;:::-;:53;;40638:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;40784:14;;40772:8;:26;;40764:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;40894:5;40881:9;:18;;40873:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;40937:31;40947:10;40959:8;40937:9;:31::i;:::-;40997:5;40985:9;:17;40981:97;;;41027:10;41019:28;;:47;41060:5;41048:9;:17;;;;:::i;:::-;41019:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;40981:97;40090:995;;5910:1:::1;6352:7;:22;;;;39971:1114:::0;:::o;5045:87::-;5091:7;5118:6;;;;;;;;;;;5111:13;;5045:87;:::o;43018:97::-;5004:13;:11;:13::i;:::-;43098:9:::1;43085:10;:22;;;;43018:97:::0;:::o;42786:115::-;5004:13;:11;:13::i;:::-;42881:12:::1;42866;:27;;;;;;:::i;:::-;;42786:115:::0;:::o;19528:104::-;19584:13;19617:7;19610:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19528:104;:::o;42527:146::-;5004:13;:11;:13::i;:::-;42626:8:::1;42615;:19;;;;;;:::i;:::-;;42656:9;42645:8;;:20;;;;;;;;;;;;;;;;;;42527:146:::0;;:::o;41093:1109::-;39566:10;39553:23;;:9;:23;;;39545:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5954:1:::1;6174:7;;:19:::0;6166:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5954:1;6307:7;:18;;;;41218:10:::2;41239:9:::0;41276:13:::2;:25;41290:10;41276:25;;;;;;;;;;;;;;;;41251:22;;:50;;;;:::i;:::-;41239:62;;41328:4;41316:8;:16;41312:285;;41384:4;41373:8;:15;;;;:::i;:::-;41358:10;;41357:32;;;;:::i;:::-;41349:40;;41460:4;41432:13;:25;41446:10;41432:25;;;;;;;;;;;;;;;;:32;;;;:::i;:::-;41404:13;:25;41418:10;41404:25;;;;;;;;;;;;;;;:60;;;;41312:285;;;41505:1;41497:9;;41577:8;41549:13;:25;41563:10;41549:25;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;41521:13;:25;41535:10;41521:25;;;;;;;;;;;;;;;:64;;;;41312:285;41617:19;;;;;;;;;;;41609:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;41708:15;;41696:8;41680:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:43;;41672:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;41799:17;;41787:8;41763:21;41773:10;41763:9;:21::i;:::-;:32;;;;:::i;:::-;:53;;41755:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;41901:14;;41889:8;:26;;41881:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;42011:5;41998:9;:18;;41990:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;42054:31;42064:10;42076:8;42054:9;:31::i;:::-;42114:5;42102:9;:17;42098:97;;;42144:10;42136:28;;:47;42177:5;42165:9;:17;;;;:::i;:::-;42136:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;42098:97;41207:995;;5910:1:::1;6352:7;:22;;;;41093:1109:::0;:::o;23222:234::-;23369:8;23317:18;:39;23336:19;:17;:19::i;:::-;23317:39;;;;;;;;;;;;;;;:49;23357:8;23317:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;23429:8;23393:55;;23408:19;:17;:19::i;:::-;23393:55;;;23439:8;23393:55;;;;;;:::i;:::-;;;;;;;;23222:234;;:::o;42409:110::-;5004:13;:11;:13::i;:::-;42492:19:::1;;;;;;;;;;;42491:20;42469:19;;:42;;;;;;;;;;;;;;;;;;42409:110::o:0;38853:20::-;;;;;;;;;;;;;:::o;43123:117::-;5004:13;:11;:13::i;:::-;43228:4:::1;43203:22;:29;;;;43123:117:::0;:::o;39248:254::-;5004:13;:11;:13::i;:::-;39378:15:::1;;39366:8;39350:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:43;;39328:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;39465:29;39475:8;39485;39465:9;:29::i;:::-;39248:254:::0;;:::o;43866:250::-;35780:1;34991:42;35734:43;;;:47;35730:225;;;34991:42;35803:40;;;35852:4;35859:10;35803:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35798:146;;35917:10;35898:30;;;;;;;;;;;:::i;:::-;;;;;;;;35798:146;35730:225;44061:47:::1;44084:4;44090:2;44094:7;44103:4;44061:22;:47::i;:::-;43866:250:::0;;;;:::o;39021:36::-;;;;:::o;44124:341::-;44246:13;44281:8;;;;;;;;;;;44277:181;;;44354:8;44364:26;44381:8;44364:16;:26::i;:::-;44337:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44306:86;;;;44277:181;44432:14;44425:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44124:341;;;;:::o;39060:31::-;;;;:::o;38984:34::-;;;;:::o;38912:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43248:107::-;5004:13;:11;:13::i;:::-;43343:4:::1;43323:17;:24;;;;43248:107:::0;:::o;39639:324::-;39692:4;39708:10;39729:9;39766:13;:25;39780:10;39766:25;;;;;;;;;;;;;;;;39741:22;;:50;;;;:::i;:::-;39729:62;;39818:4;39806:8;:16;39802:131;;39874:4;39863:8;:15;;;;:::i;:::-;39848:10;;39847:32;;;;:::i;:::-;39839:40;;39802:131;;;39920:1;39912:9;;39802:131;39950:5;39943:12;;;;39639:324;;;:::o;42681:97::-;42725:13;42758:12;42751:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42681:97;:::o;23464:164::-;23561:4;23585:18;:25;23604:5;23585:25;;;;;;;;;;;;;;;:35;23611:8;23585:35;;;;;;;;;;;;;;;;;;;;;;;;;23578:42;;23464:164;;;;:::o;42909:101::-;5004:13;:11;:13::i;:::-;42998:4:::1;42980:15;:22;;;;42909:101:::0;:::o;5393:201::-;5004:13;:11;:13::i;:::-;5502:1:::1;5482:22;;:8;:22;;::::0;5474:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5558:28;5577:8;5558:18;:28::i;:::-;5393:201:::0;:::o;23636:282::-;23701:4;23757:7;23738:15;:13;:15::i;:::-;:26;;:66;;;;;23791:13;;23781:7;:23;23738:66;:153;;;;;23890:1;16178:8;23842:17;:26;23860:7;23842:26;;;;;;;;;;;;:44;:49;23738:153;23718:173;;23636:282;;;:::o;34016:105::-;34076:7;34103:10;34096:17;;34016:105;:::o;17320:92::-;17376:7;17320:92;:::o;24731:1651::-;24873:27;24903;24922:7;24903:18;:27::i;:::-;24873:57;;24988:4;24947:45;;24963:19;24947:45;;;24943:86;;25001:28;;;;;;;;;;;;;;24943:86;25043:27;25072:23;25099:35;25126:7;25099:26;:35::i;:::-;25042:92;;;;25152:68;25177:15;25194:4;25200:19;:17;:19::i;:::-;25152:24;:68::i;:::-;25147:180;;25240:43;25257:4;25263:19;:17;:19::i;:::-;25240:16;:43::i;:::-;25235:92;;25292:35;;;;;;;;;;;;;;25235:92;25147:180;25358:1;25344:16;;:2;:16;;;25340:52;;25369:23;;;;;;;;;;;;;;25340:52;25405:43;25427:4;25433:2;25437:7;25446:1;25405:21;:43::i;:::-;25488:15;25485:85;;;25553:1;25532:19;25525:30;25485:85;25622:18;:24;25641:4;25622:24;;;;;;;;;;;;;;;;25620:26;;;;;;;;;;;;25664:18;:22;25683:2;25664:22;;;;;;;;;;;;;;;;25662:24;;;;;;;;;;;25733:146;25770:2;25819:45;25834:4;25840:2;25844:19;25819:14;:45::i;:::-;16312:8;25791:73;25733:18;:146::i;:::-;25704:17;:26;25722:7;25704:26;;;;;;;;;;;:175;;;;25951:1;16312:8;25900:19;:47;:52;25896:370;;25973:19;26005:1;25995:7;:11;25973:33;;26065:1;26031:17;:30;26049:11;26031:30;;;;;;;;;;;;:35;26027:224;;26112:13;;26097:11;:28;26093:139;;26189:19;26156:17;:30;26174:11;26156:30;;;;;;;;;;;:52;;;;26093:139;26027:224;25954:312;25896:370;26313:7;26309:2;26294:27;;26303:4;26294:27;;;;;;;;;;;;26332:42;26353:4;26359:2;26363:7;26372:1;26332:20;:42::i;:::-;24862:1520;;;24731:1651;;;:::o;5140:132::-;5215:12;:10;:12::i;:::-;5204:23;;:7;:5;:7::i;:::-;:23;;;5196:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5140:132::o;26390:193::-;26536:39;26553:4;26559:2;26563:7;26536:39;;;;;;;;;;;;:16;:39::i;:::-;26390:193;;;:::o;31386:1679::-;31466:27;31496;31515:7;31496:18;:27::i;:::-;31466:57;;31536:12;31567:19;31536:52;;31602:27;31631:23;31658:35;31685:7;31658:26;:35::i;:::-;31601:92;;;;31710:13;31706:244;;;31759:68;31784:15;31801:4;31807:19;:17;:19::i;:::-;31759:24;:68::i;:::-;31754:184;;31851:43;31868:4;31874:19;:17;:19::i;:::-;31851:16;:43::i;:::-;31846:92;;31903:35;;;;;;;;;;;;;;31846:92;31754:184;31706:244;31962:51;31984:4;31998:1;32002:7;32011:1;31962:21;:51::i;:::-;32053:15;32050:101;;;32134:1;32113:19;32106:30;32050:101;32260:1;15935:3;32230:1;:26;;32229:32;32201:18;:24;32220:4;32201:24;;;;;;;;;;;;;;;;:60;;;;;;;;;;;32307:176;32344:4;32415:53;32430:4;32444:1;32448:19;32415:14;:53::i;:::-;16312:8;16178;32368:43;32367:101;32307:18;:176::i;:::-;32278:17;:26;32296:7;32278:26;;;;;;;;;;;:205;;;;32555:1;16312:8;32504:19;:47;:52;32500:370;;32577:19;32609:1;32599:7;:11;32577:33;;32669:1;32635:17;:30;32653:11;32635:30;;;;;;;;;;;;:35;32631:224;;32716:13;;32701:11;:28;32697:139;;32793:19;32760:17;:30;32778:11;32760:30;;;;;;;;;;;:52;;;;32697:139;32631:224;32558:312;32500:370;32925:7;32921:1;32898:35;;32907:4;32898:35;;;;;;;;;;;;32944:50;32965:4;32979:1;32983:7;32992:1;32944:20;:50::i;:::-;33032:12;;:14;;;;;;;;;;;;;31455:1610;;;;31386:1679;;:::o;20775:633::-;20842:7;20862:12;20877:7;20862:22;;20945:4;20926:15;:13;:15::i;:::-;:23;20922:419;;20979:13;;20972:4;:20;20968:373;;;21017:14;21034:17;:23;21052:4;21034:23;;;;;;;;;;;;21017:40;;21114:1;16178:8;21086:6;:24;:29;21082:240;;21146:113;21163:1;21153:6;:11;21146:113;;21206:17;:25;21224:6;;;;;;;21206:25;;;;;;;;;;;;21197:34;;21146:113;;;21292:6;21285:13;;;;;;21082:240;20994:347;20968:373;20922:419;21369:31;;;;;;;;;;;;;;20775:633;;;;:::o;5602:191::-;5676:16;5695:6;;;;;;;;;;;5676:25;;5721:8;5712:6;;:17;;;;;;;;;;;;;;;;;;5776:8;5745:40;;5766:8;5745:40;;;;;;;;;;;;5665:128;5602:191;:::o;31169:112::-;31246:27;31256:2;31260:8;31246:27;;;;;;;;;;;;:9;:27::i;:::-;31169:112;;:::o;26591:407::-;26766:31;26779:4;26785:2;26789:7;26766:12;:31::i;:::-;26830:1;26812:2;:14;;;:19;26808:183;;26851:56;26882:4;26888:2;26892:7;26901:5;26851:30;:56::i;:::-;26846:145;;26935:40;;;;;;;;;;;;;;26846:145;26808:183;26591:407;;;;:::o;6556:534::-;6612:13;6653:1;6644:5;:10;6640:53;;6671:10;;;;;;;;;;;;;;;;;;;;;6640:53;6703:12;6718:5;6703:20;;6734:14;6759:78;6774:1;6766:4;:9;6759:78;;6792:8;;;;;:::i;:::-;;;;6823:2;6815:10;;;;;:::i;:::-;;;6759:78;;;6847:19;6879:6;6869:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6847:39;;6897:154;6913:1;6904:5;:10;6897:154;;6941:1;6931:11;;;;;:::i;:::-;;;7008:2;7000:5;:10;;;;:::i;:::-;6987:2;:24;;;;:::i;:::-;6974:39;;6957:6;6964;6957:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;7037:2;7028:11;;;;;:::i;:::-;;;6897:154;;;7075:6;7061:21;;;;;6556:534;;;;:::o;24331:392::-;24433:27;24462:23;24503:38;24544:15;:24;24560:7;24544:24;;;;;;;;;;;24503:65;;24628:18;24605:41;;24685:19;24679:26;24660:45;;24590:126;24331:392;;;:::o;23926:397::-;24075:11;24145:16;24138:5;24134:28;24125:37;;24206:16;24195:9;24191:32;24178:45;;24288:15;24277:9;24274:30;24266:5;24255:9;24252:20;24249:56;24239:66;;23926:397;;;;;:::o;27006:159::-;;;;;:::o;33697:311::-;33832:7;33852:16;16375:3;33878:19;:41;;33852:68;;16375:3;33946:31;33957:4;33963:2;33967:9;33946:10;:31::i;:::-;33938:40;;:62;;33931:69;;;33697:311;;;;;:::o;21790:450::-;21870:14;22038:16;22031:5;22027:28;22018:37;;22215:5;22201:11;22176:23;22172:41;22169:52;22162:5;22159:63;22149:73;;21790:450;;;;:::o;27173:158::-;;;;;:::o;4493:98::-;4546:7;4573:10;4566:17;;4493:98;:::o;30472:689::-;30603:19;30609:2;30613:8;30603:5;:19::i;:::-;30682:1;30664:2;:14;;;:19;30660:483;;30704:11;30718:13;;30704:27;;30750:13;30772:8;30766:3;:14;30750:30;;30799:233;30830:62;30869:1;30873:2;30877:7;;;;;;30886:5;30830:30;:62::i;:::-;30825:167;;30928:40;;;;;;;;;;;;;;30825:167;31027:3;31019:5;:11;30799:233;;31114:3;31097:13;;:20;31093:34;;31119:8;;;31093:34;30685:458;;30660:483;30472:689;;;:::o;27339:716::-;27502:4;27548:2;27523:45;;;27569:19;:17;:19::i;:::-;27590:4;27596:7;27605:5;27523:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;27519:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27823:1;27806:6;:13;:18;27802:235;;27852:40;;;;;;;;;;;;;;27802:235;27995:6;27989:13;27980:6;27976:2;27972:15;27965:38;27519:529;27692:54;;;27682:64;;;:6;:64;;;;27675:71;;;27339:716;;;;;;:::o;33542:147::-;33679:6;33542:147;;;;;:::o;28063:1442::-;28136:20;28159:13;;28136:36;;28199:1;28187:8;:13;28183:44;;28209:18;;;;;;;;;;;;;;28183:44;28240:61;28270:1;28274:2;28278:12;28292:8;28240:21;:61::i;:::-;28410:1;15875:2;28380:1;:26;;28379:32;28367:8;:45;28341:18;:22;28360:2;28341:22;;;;;;;;;;;;;;;;:71;;;;;;;;;;;28463:139;28500:2;28554:33;28577:1;28581:2;28585:1;28554:14;:33::i;:::-;28521:30;28542:8;28521:20;:30::i;:::-;:66;28463:18;:139::i;:::-;28429:17;:31;28447:12;28429:31;;;;;;;;;;;:173;;;;28619:16;28650:11;28679:8;28664:12;:23;28650:37;;28754:16;28750:2;28746:25;28734:37;;28974:12;28942:8;28917:1;28868:25;28843:1;28818;28791:215;29086:1;29072:12;29068:20;29026:279;29127:3;29118:7;29115:16;29026:279;;29278:7;29268:8;29265:1;29238:25;29235:1;29232;29227:59;29180:1;29171:7;29167:15;29156:26;;29026:279;;;29030:77;29350:1;29338:8;:13;29334:45;;29360:19;;;;;;;;;;;;;;29334:45;29412:3;29396:13;:19;;;;28314:1113;;29437:60;29466:1;29470:2;29474:12;29488:8;29437:20;:60::i;:::-;28125:1380;28063:1442;;:::o;22248:324::-;22318:14;22551:1;22541:8;22538:15;22512:24;22508:46;22498:56;;22248:324;;;:::o;7:90:1:-;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;434:75::-;467:6;500:2;494:9;484:19;;434:75;:::o;515:117::-;624:1;621;614:12;638:117;747:1;744;737:12;761:149;797:7;837:66;830:5;826:78;815:89;;761:149;;;:::o;916:120::-;988:23;1005:5;988:23;:::i;:::-;981:5;978:34;968:62;;1026:1;1023;1016:12;968:62;916:120;:::o;1042:137::-;1087:5;1125:6;1112:20;1103:29;;1141:32;1167:5;1141:32;:::i;:::-;1042:137;;;;:::o;1185:327::-;1243:6;1292:2;1280:9;1271:7;1267:23;1263:32;1260:119;;;1298:79;;:::i;:::-;1260:119;1418:1;1443:52;1487:7;1478:6;1467:9;1463:22;1443:52;:::i;:::-;1433:62;;1389:116;1185:327;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:329::-;5301:6;5350:2;5338:9;5329:7;5325:23;5321:32;5318:119;;;5356:79;;:::i;:::-;5318:119;5476:1;5501:53;5546:7;5537:6;5526:9;5522:22;5501:53;:::i;:::-;5491:63;;5447:117;5242:329;;;;:::o;5577:619::-;5654:6;5662;5670;5719:2;5707:9;5698:7;5694:23;5690:32;5687:119;;;5725:79;;:::i;:::-;5687:119;5845:1;5870:53;5915:7;5906:6;5895:9;5891:22;5870:53;:::i;:::-;5860:63;;5816:117;5972:2;5998:53;6043:7;6034:6;6023:9;6019:22;5998:53;:::i;:::-;5988:63;;5943:118;6100:2;6126:53;6171:7;6162:6;6151:9;6147:22;6126:53;:::i;:::-;6116:63;;6071:118;5577:619;;;;;:::o;6202:117::-;6311:1;6308;6301:12;6325:117;6434:1;6431;6424:12;6448:180;6496:77;6493:1;6486:88;6593:4;6590:1;6583:15;6617:4;6614:1;6607:15;6634:281;6717:27;6739:4;6717:27;:::i;:::-;6709:6;6705:40;6847:6;6835:10;6832:22;6811:18;6799:10;6796:34;6793:62;6790:88;;;6858:18;;:::i;:::-;6790:88;6898:10;6894:2;6887:22;6677:238;6634:281;;:::o;6921:129::-;6955:6;6982:20;;:::i;:::-;6972:30;;7011:33;7039:4;7031:6;7011:33;:::i;:::-;6921:129;;;:::o;7056:308::-;7118:4;7208:18;7200:6;7197:30;7194:56;;;7230:18;;:::i;:::-;7194:56;7268:29;7290:6;7268:29;:::i;:::-;7260:37;;7352:4;7346;7342:15;7334:23;;7056:308;;;:::o;7370:146::-;7467:6;7462:3;7457;7444:30;7508:1;7499:6;7494:3;7490:16;7483:27;7370:146;;;:::o;7522:425::-;7600:5;7625:66;7641:49;7683:6;7641:49;:::i;:::-;7625:66;:::i;:::-;7616:75;;7714:6;7707:5;7700:21;7752:4;7745:5;7741:16;7790:3;7781:6;7776:3;7772:16;7769:25;7766:112;;;7797:79;;:::i;:::-;7766:112;7887:54;7934:6;7929:3;7924;7887:54;:::i;:::-;7606:341;7522:425;;;;;:::o;7967:340::-;8023:5;8072:3;8065:4;8057:6;8053:17;8049:27;8039:122;;8080:79;;:::i;:::-;8039:122;8197:6;8184:20;8222:79;8297:3;8289:6;8282:4;8274:6;8270:17;8222:79;:::i;:::-;8213:88;;8029:278;7967:340;;;;:::o;8313:509::-;8382:6;8431:2;8419:9;8410:7;8406:23;8402:32;8399:119;;;8437:79;;:::i;:::-;8399:119;8585:1;8574:9;8570:17;8557:31;8615:18;8607:6;8604:30;8601:117;;;8637:79;;:::i;:::-;8601:117;8742:63;8797:7;8788:6;8777:9;8773:22;8742:63;:::i;:::-;8732:73;;8528:287;8313:509;;;;:::o;8828:116::-;8898:21;8913:5;8898:21;:::i;:::-;8891:5;8888:32;8878:60;;8934:1;8931;8924:12;8878:60;8828:116;:::o;8950:133::-;8993:5;9031:6;9018:20;9009:29;;9047:30;9071:5;9047:30;:::i;:::-;8950:133;;;;:::o;9089:648::-;9164:6;9172;9221:2;9209:9;9200:7;9196:23;9192:32;9189:119;;;9227:79;;:::i;:::-;9189:119;9347:1;9372:50;9414:7;9405:6;9394:9;9390:22;9372:50;:::i;:::-;9362:60;;9318:114;9499:2;9488:9;9484:18;9471:32;9530:18;9522:6;9519:30;9516:117;;;9552:79;;:::i;:::-;9516:117;9657:63;9712:7;9703:6;9692:9;9688:22;9657:63;:::i;:::-;9647:73;;9442:288;9089:648;;;;;:::o;9743:468::-;9808:6;9816;9865:2;9853:9;9844:7;9840:23;9836:32;9833:119;;;9871:79;;:::i;:::-;9833:119;9991:1;10016:53;10061:7;10052:6;10041:9;10037:22;10016:53;:::i;:::-;10006:63;;9962:117;10118:2;10144:50;10186:7;10177:6;10166:9;10162:22;10144:50;:::i;:::-;10134:60;;10089:115;9743:468;;;;;:::o;10217:474::-;10285:6;10293;10342:2;10330:9;10321:7;10317:23;10313:32;10310:119;;;10348:79;;:::i;:::-;10310:119;10468:1;10493:53;10538:7;10529:6;10518:9;10514:22;10493:53;:::i;:::-;10483:63;;10439:117;10595:2;10621:53;10666:7;10657:6;10646:9;10642:22;10621:53;:::i;:::-;10611:63;;10566:118;10217:474;;;;;:::o;10697:307::-;10758:4;10848:18;10840:6;10837:30;10834:56;;;10870:18;;:::i;:::-;10834:56;10908:29;10930:6;10908:29;:::i;:::-;10900:37;;10992:4;10986;10982:15;10974:23;;10697:307;;;:::o;11010:423::-;11087:5;11112:65;11128:48;11169:6;11128:48;:::i;:::-;11112:65;:::i;:::-;11103:74;;11200:6;11193:5;11186:21;11238:4;11231:5;11227:16;11276:3;11267:6;11262:3;11258:16;11255:25;11252:112;;;11283:79;;:::i;:::-;11252:112;11373:54;11420:6;11415:3;11410;11373:54;:::i;:::-;11093:340;11010:423;;;;;:::o;11452:338::-;11507:5;11556:3;11549:4;11541:6;11537:17;11533:27;11523:122;;11564:79;;:::i;:::-;11523:122;11681:6;11668:20;11706:78;11780:3;11772:6;11765:4;11757:6;11753:17;11706:78;:::i;:::-;11697:87;;11513:277;11452:338;;;;:::o;11796:943::-;11891:6;11899;11907;11915;11964:3;11952:9;11943:7;11939:23;11935:33;11932:120;;;11971:79;;:::i;:::-;11932:120;12091:1;12116:53;12161:7;12152:6;12141:9;12137:22;12116:53;:::i;:::-;12106:63;;12062:117;12218:2;12244:53;12289:7;12280:6;12269:9;12265:22;12244:53;:::i;:::-;12234:63;;12189:118;12346:2;12372:53;12417:7;12408:6;12397:9;12393:22;12372:53;:::i;:::-;12362:63;;12317:118;12502:2;12491:9;12487:18;12474:32;12533:18;12525:6;12522:30;12519:117;;;12555:79;;:::i;:::-;12519:117;12660:62;12714:7;12705:6;12694:9;12690:22;12660:62;:::i;:::-;12650:72;;12445:287;11796:943;;;;;;;:::o;12745:474::-;12813:6;12821;12870:2;12858:9;12849:7;12845:23;12841:32;12838:119;;;12876:79;;:::i;:::-;12838:119;12996:1;13021:53;13066:7;13057:6;13046:9;13042:22;13021:53;:::i;:::-;13011:63;;12967:117;13123:2;13149:53;13194:7;13185:6;13174:9;13170:22;13149:53;:::i;:::-;13139:63;;13094:118;12745:474;;;;;:::o;13225:180::-;13273:77;13270:1;13263:88;13370:4;13367:1;13360:15;13394:4;13391:1;13384:15;13411:320;13455:6;13492:1;13486:4;13482:12;13472:22;;13539:1;13533:4;13529:12;13560:18;13550:81;;13616:4;13608:6;13604:17;13594:27;;13550:81;13678:2;13670:6;13667:14;13647:18;13644:38;13641:84;;13697:18;;:::i;:::-;13641:84;13462:269;13411:320;;;:::o;13737:332::-;13858:4;13896:2;13885:9;13881:18;13873:26;;13909:71;13977:1;13966:9;13962:17;13953:6;13909:71;:::i;:::-;13990:72;14058:2;14047:9;14043:18;14034:6;13990:72;:::i;:::-;13737:332;;;;;:::o;14075:137::-;14129:5;14160:6;14154:13;14145:22;;14176:30;14200:5;14176:30;:::i;:::-;14075:137;;;;:::o;14218:345::-;14285:6;14334:2;14322:9;14313:7;14309:23;14305:32;14302:119;;;14340:79;;:::i;:::-;14302:119;14460:1;14485:61;14538:7;14529:6;14518:9;14514:22;14485:61;:::i;:::-;14475:71;;14431:125;14218:345;;;;:::o;14569:181::-;14709:33;14705:1;14697:6;14693:14;14686:57;14569:181;:::o;14756:366::-;14898:3;14919:67;14983:2;14978:3;14919:67;:::i;:::-;14912:74;;14995:93;15084:3;14995:93;:::i;:::-;15113:2;15108:3;15104:12;15097:19;;14756:366;;;:::o;15128:419::-;15294:4;15332:2;15321:9;15317:18;15309:26;;15381:9;15375:4;15371:20;15367:1;15356:9;15352:17;15345:47;15409:131;15535:4;15409:131;:::i;:::-;15401:139;;15128:419;;;:::o;15553:147::-;15654:11;15691:3;15676:18;;15553:147;;;;:::o;15706:114::-;;:::o;15826:398::-;15985:3;16006:83;16087:1;16082:3;16006:83;:::i;:::-;15999:90;;16098:93;16187:3;16098:93;:::i;:::-;16216:1;16211:3;16207:11;16200:18;;15826:398;;;:::o;16230:379::-;16414:3;16436:147;16579:3;16436:147;:::i;:::-;16429:154;;16600:3;16593:10;;16230:379;;;:::o;16615:166::-;16755:18;16751:1;16743:6;16739:14;16732:42;16615:166;:::o;16787:366::-;16929:3;16950:67;17014:2;17009:3;16950:67;:::i;:::-;16943:74;;17026:93;17115:3;17026:93;:::i;:::-;17144:2;17139:3;17135:12;17128:19;;16787:366;;;:::o;17159:419::-;17325:4;17363:2;17352:9;17348:18;17340:26;;17412:9;17406:4;17402:20;17398:1;17387:9;17383:17;17376:47;17440:131;17566:4;17440:131;:::i;:::-;17432:139;;17159:419;;;:::o;17584:180::-;17724:32;17720:1;17712:6;17708:14;17701:56;17584:180;:::o;17770:366::-;17912:3;17933:67;17997:2;17992:3;17933:67;:::i;:::-;17926:74;;18009:93;18098:3;18009:93;:::i;:::-;18127:2;18122:3;18118:12;18111:19;;17770:366;;;:::o;18142:419::-;18308:4;18346:2;18335:9;18331:18;18323:26;;18395:9;18389:4;18385:20;18381:1;18370:9;18366:17;18359:47;18423:131;18549:4;18423:131;:::i;:::-;18415:139;;18142:419;;;:::o;18567:180::-;18615:77;18612:1;18605:88;18712:4;18709:1;18702:15;18736:4;18733:1;18726:15;18753:194;18793:4;18813:20;18831:1;18813:20;:::i;:::-;18808:25;;18847:20;18865:1;18847:20;:::i;:::-;18842:25;;18891:1;18888;18884:9;18876:17;;18915:1;18909:4;18906:11;18903:37;;;18920:18;;:::i;:::-;18903:37;18753:194;;;;:::o;18953:410::-;18993:7;19016:20;19034:1;19016:20;:::i;:::-;19011:25;;19050:20;19068:1;19050:20;:::i;:::-;19045:25;;19105:1;19102;19098:9;19127:30;19145:11;19127:30;:::i;:::-;19116:41;;19306:1;19297:7;19293:15;19290:1;19287:22;19267:1;19260:9;19240:83;19217:139;;19336:18;;:::i;:::-;19217:139;19001:362;18953:410;;;;:::o;19369:191::-;19409:3;19428:20;19446:1;19428:20;:::i;:::-;19423:25;;19462:20;19480:1;19462:20;:::i;:::-;19457:25;;19505:1;19502;19498:9;19491:16;;19526:3;19523:1;19520:10;19517:36;;;19533:18;;:::i;:::-;19517:36;19369:191;;;;:::o;19566:170::-;19706:22;19702:1;19694:6;19690:14;19683:46;19566:170;:::o;19742:366::-;19884:3;19905:67;19969:2;19964:3;19905:67;:::i;:::-;19898:74;;19981:93;20070:3;19981:93;:::i;:::-;20099:2;20094:3;20090:12;20083:19;;19742:366;;;:::o;20114:419::-;20280:4;20318:2;20307:9;20303:18;20295:26;;20367:9;20361:4;20357:20;20353:1;20342:9;20338:17;20331:47;20395:131;20521:4;20395:131;:::i;:::-;20387:139;;20114:419;;;:::o;20539:164::-;20679:16;20675:1;20667:6;20663:14;20656:40;20539:164;:::o;20709:366::-;20851:3;20872:67;20936:2;20931:3;20872:67;:::i;:::-;20865:74;;20948:93;21037:3;20948:93;:::i;:::-;21066:2;21061:3;21057:12;21050:19;;20709:366;;;:::o;21081:419::-;21247:4;21285:2;21274:9;21270:18;21262:26;;21334:9;21328:4;21324:20;21320:1;21309:9;21305:17;21298:47;21362:131;21488:4;21362:131;:::i;:::-;21354:139;;21081:419;;;:::o;21506:234::-;21646:34;21642:1;21634:6;21630:14;21623:58;21715:17;21710:2;21702:6;21698:15;21691:42;21506:234;:::o;21746:366::-;21888:3;21909:67;21973:2;21968:3;21909:67;:::i;:::-;21902:74;;21985:93;22074:3;21985:93;:::i;:::-;22103:2;22098:3;22094:12;22087:19;;21746:366;;;:::o;22118:419::-;22284:4;22322:2;22311:9;22307:18;22299:26;;22371:9;22365:4;22361:20;22357:1;22346:9;22342:17;22335:47;22399:131;22525:4;22399:131;:::i;:::-;22391:139;;22118:419;;;:::o;22543:246::-;22683:34;22679:1;22671:6;22667:14;22660:58;22752:29;22747:2;22739:6;22735:15;22728:54;22543:246;:::o;22795:366::-;22937:3;22958:67;23022:2;23017:3;22958:67;:::i;:::-;22951:74;;23034:93;23123:3;23034:93;:::i;:::-;23152:2;23147:3;23143:12;23136:19;;22795:366;;;:::o;23167:419::-;23333:4;23371:2;23360:9;23356:18;23348:26;;23420:9;23414:4;23410:20;23406:1;23395:9;23391:17;23384:47;23448:131;23574:4;23448:131;:::i;:::-;23440:139;;23167:419;;;:::o;23592:170::-;23732:22;23728:1;23720:6;23716:14;23709:46;23592:170;:::o;23768:366::-;23910:3;23931:67;23995:2;23990:3;23931:67;:::i;:::-;23924:74;;24007:93;24096:3;24007:93;:::i;:::-;24125:2;24120:3;24116:12;24109:19;;23768:366;;;:::o;24140:419::-;24306:4;24344:2;24333:9;24329:18;24321:26;;24393:9;24387:4;24383:20;24379:1;24368:9;24364:17;24357:47;24421:131;24547:4;24421:131;:::i;:::-;24413:139;;24140:419;;;:::o;24565:141::-;24614:4;24637:3;24629:11;;24660:3;24657:1;24650:14;24694:4;24691:1;24681:18;24673:26;;24565:141;;;:::o;24712:93::-;24749:6;24796:2;24791;24784:5;24780:14;24776:23;24766:33;;24712:93;;;:::o;24811:107::-;24855:8;24905:5;24899:4;24895:16;24874:37;;24811:107;;;;:::o;24924:393::-;24993:6;25043:1;25031:10;25027:18;25066:97;25096:66;25085:9;25066:97;:::i;:::-;25184:39;25214:8;25203:9;25184:39;:::i;:::-;25172:51;;25256:4;25252:9;25245:5;25241:21;25232:30;;25305:4;25295:8;25291:19;25284:5;25281:30;25271:40;;25000:317;;24924:393;;;;;:::o;25323:60::-;25351:3;25372:5;25365:12;;25323:60;;;:::o;25389:142::-;25439:9;25472:53;25490:34;25499:24;25517:5;25499:24;:::i;:::-;25490:34;:::i;:::-;25472:53;:::i;:::-;25459:66;;25389:142;;;:::o;25537:75::-;25580:3;25601:5;25594:12;;25537:75;;;:::o;25618:269::-;25728:39;25759:7;25728:39;:::i;:::-;25789:91;25838:41;25862:16;25838:41;:::i;:::-;25830:6;25823:4;25817:11;25789:91;:::i;:::-;25783:4;25776:105;25694:193;25618:269;;;:::o;25893:73::-;25938:3;25893:73;:::o;25972:189::-;26049:32;;:::i;:::-;26090:65;26148:6;26140;26134:4;26090:65;:::i;:::-;26025:136;25972:189;;:::o;26167:186::-;26227:120;26244:3;26237:5;26234:14;26227:120;;;26298:39;26335:1;26328:5;26298:39;:::i;:::-;26271:1;26264:5;26260:13;26251:22;;26227:120;;;26167:186;;:::o;26359:543::-;26460:2;26455:3;26452:11;26449:446;;;26494:38;26526:5;26494:38;:::i;:::-;26578:29;26596:10;26578:29;:::i;:::-;26568:8;26564:44;26761:2;26749:10;26746:18;26743:49;;;26782:8;26767:23;;26743:49;26805:80;26861:22;26879:3;26861:22;:::i;:::-;26851:8;26847:37;26834:11;26805:80;:::i;:::-;26464:431;;26449:446;26359:543;;;:::o;26908:117::-;26962:8;27012:5;27006:4;27002:16;26981:37;;26908:117;;;;:::o;27031:169::-;27075:6;27108:51;27156:1;27152:6;27144:5;27141:1;27137:13;27108:51;:::i;:::-;27104:56;27189:4;27183;27179:15;27169:25;;27082:118;27031:169;;;;:::o;27205:295::-;27281:4;27427:29;27452:3;27446:4;27427:29;:::i;:::-;27419:37;;27489:3;27486:1;27482:11;27476:4;27473:21;27465:29;;27205:295;;;;:::o;27505:1395::-;27622:37;27655:3;27622:37;:::i;:::-;27724:18;27716:6;27713:30;27710:56;;;27746:18;;:::i;:::-;27710:56;27790:38;27822:4;27816:11;27790:38;:::i;:::-;27875:67;27935:6;27927;27921:4;27875:67;:::i;:::-;27969:1;27993:4;27980:17;;28025:2;28017:6;28014:14;28042:1;28037:618;;;;28699:1;28716:6;28713:77;;;28765:9;28760:3;28756:19;28750:26;28741:35;;28713:77;28816:67;28876:6;28869:5;28816:67;:::i;:::-;28810:4;28803:81;28672:222;28007:887;;28037:618;28089:4;28085:9;28077:6;28073:22;28123:37;28155:4;28123:37;:::i;:::-;28182:1;28196:208;28210:7;28207:1;28204:14;28196:208;;;28289:9;28284:3;28280:19;28274:26;28266:6;28259:42;28340:1;28332:6;28328:14;28318:24;;28387:2;28376:9;28372:18;28359:31;;28233:4;28230:1;28226:12;28221:17;;28196:208;;;28432:6;28423:7;28420:19;28417:179;;;28490:9;28485:3;28481:19;28475:26;28533:48;28575:4;28567:6;28563:17;28552:9;28533:48;:::i;:::-;28525:6;28518:64;28440:156;28417:179;28642:1;28638;28630:6;28626:14;28622:22;28616:4;28609:36;28044:611;;;28007:887;;27597:1303;;;27505:1395;;:::o;28906:173::-;29046:25;29042:1;29034:6;29030:14;29023:49;28906:173;:::o;29085:366::-;29227:3;29248:67;29312:2;29307:3;29248:67;:::i;:::-;29241:74;;29324:93;29413:3;29324:93;:::i;:::-;29442:2;29437:3;29433:12;29426:19;;29085:366;;;:::o;29457:419::-;29623:4;29661:2;29650:9;29646:18;29638:26;;29710:9;29704:4;29700:20;29696:1;29685:9;29681:17;29674:47;29738:131;29864:4;29738:131;:::i;:::-;29730:139;;29457:419;;;:::o;29882:148::-;29984:11;30021:3;30006:18;;29882:148;;;;:::o;30060:874::-;30163:3;30200:5;30194:12;30229:36;30255:9;30229:36;:::i;:::-;30281:89;30363:6;30358:3;30281:89;:::i;:::-;30274:96;;30401:1;30390:9;30386:17;30417:1;30412:166;;;;30592:1;30587:341;;;;30379:549;;30412:166;30496:4;30492:9;30481;30477:25;30472:3;30465:38;30558:6;30551:14;30544:22;30536:6;30532:35;30527:3;30523:45;30516:52;;30412:166;;30587:341;30654:38;30686:5;30654:38;:::i;:::-;30714:1;30728:154;30742:6;30739:1;30736:13;30728:154;;;30816:7;30810:14;30806:1;30801:3;30797:11;30790:35;30866:1;30857:7;30853:15;30842:26;;30764:4;30761:1;30757:12;30752:17;;30728:154;;;30911:6;30906:3;30902:16;30895:23;;30594:334;;30379:549;;30167:767;;30060:874;;;;:::o;30940:390::-;31046:3;31074:39;31107:5;31074:39;:::i;:::-;31129:89;31211:6;31206:3;31129:89;:::i;:::-;31122:96;;31227:65;31285:6;31280:3;31273:4;31266:5;31262:16;31227:65;:::i;:::-;31317:6;31312:3;31308:16;31301:23;;31050:280;30940:390;;;;:::o;31336:429::-;31513:3;31535:92;31623:3;31614:6;31535:92;:::i;:::-;31528:99;;31644:95;31735:3;31726:6;31644:95;:::i;:::-;31637:102;;31756:3;31749:10;;31336:429;;;;;:::o;31771:225::-;31911:34;31907:1;31899:6;31895:14;31888:58;31980:8;31975:2;31967:6;31963:15;31956:33;31771:225;:::o;32002:366::-;32144:3;32165:67;32229:2;32224:3;32165:67;:::i;:::-;32158:74;;32241:93;32330:3;32241:93;:::i;:::-;32359:2;32354:3;32350:12;32343:19;;32002:366;;;:::o;32374:419::-;32540:4;32578:2;32567:9;32563:18;32555:26;;32627:9;32621:4;32617:20;32613:1;32602:9;32598:17;32591:47;32655:131;32781:4;32655:131;:::i;:::-;32647:139;;32374:419;;;:::o;32799:182::-;32939:34;32935:1;32927:6;32923:14;32916:58;32799:182;:::o;32987:366::-;33129:3;33150:67;33214:2;33209:3;33150:67;:::i;:::-;33143:74;;33226:93;33315:3;33226:93;:::i;:::-;33344:2;33339:3;33335:12;33328:19;;32987:366;;;:::o;33359:419::-;33525:4;33563:2;33552:9;33548:18;33540:26;;33612:9;33606:4;33602:20;33598:1;33587:9;33583:17;33576:47;33640:131;33766:4;33640:131;:::i;:::-;33632:139;;33359:419;;;:::o;33784:233::-;33823:3;33846:24;33864:5;33846:24;:::i;:::-;33837:33;;33892:66;33885:5;33882:77;33879:103;;33962:18;;:::i;:::-;33879:103;34009:1;34002:5;33998:13;33991:20;;33784:233;;;:::o;34023:180::-;34071:77;34068:1;34061:88;34168:4;34165:1;34158:15;34192:4;34189:1;34182:15;34209:185;34249:1;34266:20;34284:1;34266:20;:::i;:::-;34261:25;;34300:20;34318:1;34300:20;:::i;:::-;34295:25;;34339:1;34329:35;;34344:18;;:::i;:::-;34329:35;34386:1;34383;34379:9;34374:14;;34209:185;;;;:::o;34400:176::-;34432:1;34449:20;34467:1;34449:20;:::i;:::-;34444:25;;34483:20;34501:1;34483:20;:::i;:::-;34478:25;;34522:1;34512:35;;34527:18;;:::i;:::-;34512:35;34568:1;34565;34561:9;34556:14;;34400:176;;;;:::o;34582:180::-;34630:77;34627:1;34620:88;34727:4;34724:1;34717:15;34751:4;34748:1;34741:15;34768:98;34819:6;34853:5;34847:12;34837:22;;34768:98;;;:::o;34872:168::-;34955:11;34989:6;34984:3;34977:19;35029:4;35024:3;35020:14;35005:29;;34872:168;;;;:::o;35046:373::-;35132:3;35160:38;35192:5;35160:38;:::i;:::-;35214:70;35277:6;35272:3;35214:70;:::i;:::-;35207:77;;35293:65;35351:6;35346:3;35339:4;35332:5;35328:16;35293:65;:::i;:::-;35383:29;35405:6;35383:29;:::i;:::-;35378:3;35374:39;35367:46;;35136:283;35046:373;;;;:::o;35425:640::-;35620:4;35658:3;35647:9;35643:19;35635:27;;35672:71;35740:1;35729:9;35725:17;35716:6;35672:71;:::i;:::-;35753:72;35821:2;35810:9;35806:18;35797:6;35753:72;:::i;:::-;35835;35903:2;35892:9;35888:18;35879:6;35835:72;:::i;:::-;35954:9;35948:4;35944:20;35939:2;35928:9;35924:18;35917:48;35982:76;36053:4;36044:6;35982:76;:::i;:::-;35974:84;;35425:640;;;;;;;:::o;36071:141::-;36127:5;36158:6;36152:13;36143:22;;36174:32;36200:5;36174:32;:::i;:::-;36071:141;;;;:::o;36218:349::-;36287:6;36336:2;36324:9;36315:7;36311:23;36307:32;36304:119;;;36342:79;;:::i;:::-;36304:119;36462:1;36487:63;36542:7;36533:6;36522:9;36518:22;36487:63;:::i;:::-;36477:73;;36433:127;36218:349;;;;:::o

Swarm Source

ipfs://ae19b776ecb602196d453cfc9e64fb89443188a05266ae12c59b4513e58c0902
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.