ETH Price: $3,039.16 (+3.39%)

Token

BITCOINPHUNKS (BITCOIN)
 

Overview

Max Total Supply

1,035 BITCOIN

Holders

381

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
2 BITCOIN
0xB61f2804f4A2C19d9503a42eE8678e3dA755F3fc
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
BitcoinPhunksMarket

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-29
*/

// 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() {
        
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        _status = _ENTERED;

        _;

        _status = _NOT_ENTERED;
    }
}

pragma solidity ^0.8.0;

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

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

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

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

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

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

pragma solidity ^0.8.0;


library EnumerableSet {


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

        mapping(bytes32 => uint256) _indexes;
    }

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

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

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

        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {

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

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

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

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

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

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

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

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

    struct Bytes32Set {
        Set _inner;
    }

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

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

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

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

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

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

    struct AddressSet {
        Set _inner;
    }

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

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

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

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

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

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

        assembly {
            result := store
        }

        return result;
    }

    struct UintSet {
        Set _inner;
    }

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

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

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

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

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

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

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

        return result;
    }
}

pragma solidity ^0.8.4;

interface IERC721A {

    error ApprovalCallerNotOwnerNorApproved();

    error ApprovalQueryForNonexistentToken();

    error BalanceQueryForZeroAddress();

    error MintToZeroAddress();

    error MintZeroQuantity();

    error OwnerQueryForNonexistentToken();

    error TransferCallerNotOwnerNorApproved();

    error TransferFromIncorrectOwner();

    error TransferToNonERC721ReceiverImplementer();

    error TransferToZeroAddress();

    error URIQueryForNonexistentToken();

    error MintERC2309QuantityExceedsLimit();

    error OwnershipNotInitializedForExtraData();

    struct TokenOwnership {

        address addr;

        uint64 startTimestamp;

        bool burned;

        uint24 extraData;
    }

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

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

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

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

    function setApprovalForAll(address operator, bool _approved) external;

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

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

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

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

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

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

pragma solidity ^0.8.4;

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

contract ERC721A is IERC721A {

    struct TokenApprovalRef {
        address value;
    }

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

    uint256 private constant _BITPOS_NUMBER_MINTED = 64;

    uint256 private constant _BITPOS_NUMBER_BURNED = 128;

    uint256 private constant _BITPOS_AUX = 192;

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

    uint256 private constant _BITPOS_START_TIMESTAMP = 160;

    uint256 private constant _BITMASK_BURNED = 1 << 224;

    uint256 private constant _BITPOS_NEXT_INITIALIZED = 225;

    uint256 private constant _BITMASK_NEXT_INITIALIZED = 1 << 225;

    uint256 private constant _BITPOS_EXTRA_DATA = 232;

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

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

    uint256 private constant _MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000;

    bytes32 private constant _TRANSFER_EVENT_SIGNATURE =
        0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef;

    uint256 private _currentIndex;

    uint256 private _burnCounter;

    string private _name;

    string private _symbol;

    mapping(uint256 => uint256) private _packedOwnerships;

    mapping(address => uint256) private _packedAddressData;

    mapping(uint256 => TokenApprovalRef) private _tokenApprovals;

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

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

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

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

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

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

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

        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

                    if (packed & _BITMASK_BURNED == 0) {

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

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

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

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

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

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

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

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

        return _tokenApprovals[tokenId].value;
    }

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

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

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

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

            owner := and(owner, _BITMASK_ADDRESS)

            msgSender := and(msgSender, _BITMASK_ADDRESS)

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

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

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

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

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

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

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

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

        _beforeTokenTransfers(from, to, tokenId, 1);

        assembly {
            if approvedAddress {

                sstore(approvedAddressSlot, 0)
            }
        }

        unchecked {

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

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

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

                if (_packedOwnerships[nextTokenId] == 0) {

                    if (nextTokenId != _currentIndex) {

                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

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

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

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

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

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

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

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

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

        unchecked {

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

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

            uint256 toMasked;
            uint256 end = startTokenId + quantity;

            assembly {

                toMasked := and(to, _BITMASK_ADDRESS)

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

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

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

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

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

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

        unchecked {

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

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

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

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

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

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

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

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

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

        address from = address(uint160(prevOwnershipPacked));

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

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

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

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

        unchecked {

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

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

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

                if (_packedOwnerships[nextTokenId] == 0) {

                    if (nextTokenId != _currentIndex) {

                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

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

        unchecked {
            _burnCounter++;
        }
    }

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

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

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

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

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

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

            mstore(0x40, m)

            str := sub(m, 0x20)

            mstore(str, 0)

            let end := str

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

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

                temp := div(temp, 10)

                if iszero(temp) { break }
            }

            let length := sub(end, str)

            str := sub(str, 0x20)

            mstore(str, length)
        }
    }
}

pragma solidity ^0.8.13;

contract OperatorFilterer {
    error OperatorNotAllowed(address operator);

    IOperatorFilterRegistry constant operatorFilterRegistry =
        IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E);

    constructor(address subscriptionOrRegistrantToCopy, bool subscribe) {

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

    modifier onlyAllowedOperator() virtual {

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

pragma solidity ^0.8.13;

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

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

pragma solidity ^0.8.13;

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

pragma solidity ^0.8.4;

interface IERC721ABurnable is IERC721A {

    function burn(uint256 tokenId) external;
}

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

pragma solidity ^0.8.16;
contract BitcoinPhunksMarket 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 = true;
uint public COLLECTION_SIZE = 10000; 
uint public MINT_PRICE = 0.005 ether; 
uint public MAX_BATCH_SIZE = 40;
uint public SUPPLY_PER_WALLET = 100;
uint public FREE_SUPPLY_PER_WALLET = 2;

constructor() ERC721A("BITCOINPHUNKS", "BITCOIN") {}

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

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

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

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

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

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

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

        _safeMint(msg.sender, quantity);

        if (msg.value > price) {
            payable(msg.sender).transfer(msg.value - price);
        }
    }
    function setPublicMintEnabled() public onlyOwner {
        isPublicMintEnabled = !isPublicMintEnabled;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

}

Contract Security Audit

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":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"ChangeCollectionSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"ChangeFreePerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"ChangePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"ChangeSupplyPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"Claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_revealed","type":"bool"},{"internalType":"string","name":"_baseURI","type":"string"}],"name":"CollectionUrI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"FREE_SUPPLY_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BATCH_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REVEALED","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"SetMaxBatchSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"UNREVEALED_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_contractURI","type":"string"}],"name":"setContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicMintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userHasMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260405180602001604052805f815250600a9081620000239190620006ae565b5060405180602001604052805f815250600d9081620000439190620006ae565b5060405180602001604052805f815250600e9081620000639190620006ae565b506001600f5f6101000a81548160ff0219169083151502179055506127106010556611c37937e08000601155602860125560646013556002601455348015620000aa575f80fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280600d81526020017f424954434f494e5048554e4b53000000000000000000000000000000000000008152506040518060400160405280600781526020017f424954434f494e000000000000000000000000000000000000000000000000008152506200014e620001426200037e60201b60201c565b6200038560201b60201c565b81600390816200015f9190620006ae565b508060049081620001719190620006ae565b50620001826200044660201b60201c565b600181905550505060016009819055505f6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156200037657801562000247576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b815260040162000212929190620007d5565b5f604051808303815f87803b1580156200022a575f80fd5b505af11580156200023d573d5f803e3d5ffd5b5050505062000375565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620002fb576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b8152600401620002c6929190620007d5565b5f604051808303815f87803b158015620002de575f80fd5b505af1158015620002f1573d5f803e3d5ffd5b5050505062000374565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b815260040162000344919062000800565b5f604051808303815f87803b1580156200035c575f80fd5b505af11580156200036f573d5f803e3d5ffd5b505050505b5b5b50506200081b565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f90565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620004c657607f821691505b602082108103620004dc57620004db62000481565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620005407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000503565b6200054c868362000503565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000596620005906200058a8462000564565b6200056d565b62000564565b9050919050565b5f819050919050565b620005b18362000576565b620005c9620005c0826200059d565b8484546200050f565b825550505050565b5f90565b620005df620005d1565b620005ec818484620005a6565b505050565b5b818110156200061357620006075f82620005d5565b600181019050620005f2565b5050565b601f82111562000662576200062c81620004e2565b6200063784620004f4565b8101602085101562000647578190505b6200065f6200065685620004f4565b830182620005f1565b50505b505050565b5f82821c905092915050565b5f620006845f198460080262000667565b1980831691505092915050565b5f6200069e838362000673565b9150826002028217905092915050565b620006b9826200044a565b67ffffffffffffffff811115620006d557620006d462000454565b5b620006e18254620004ae565b620006ee82828562000617565b5f60209050601f83116001811462000724575f84156200070f578287015190505b6200071b858262000691565b8655506200078a565b601f1984166200073486620004e2565b5f5b828110156200075d5784890151825560018201915060208501945060208101905062000736565b868310156200077d578489015162000779601f89168262000673565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620007bd8262000792565b9050919050565b620007cf81620007b1565b82525050565b5f604082019050620007ea5f830185620007c4565b620007f96020830184620007c4565b9392505050565b5f602082019050620008155f830184620007c4565b92915050565b613e8680620008295f395ff3fe608060405260043610610250575f3560e01c806375b6447111610138578063c144a4ba116100b5578063e757223011610079578063e757223014610816578063e8a3d48514610852578063e985e9c51461087c578063f2fde38b146108b8578063f814943d146108e0578063fb92488b1461090857610250565b8063c144a4ba14610734578063c87b56dd1461075c578063cfdbf25414610798578063d8258d95146107c2578063dbddb26a146107ec57610250565b8063a22cb465116100fc578063a22cb46514610686578063a4cdd719146106ae578063a76a9587146106c4578063b88d4fde146106ee578063c002d23d1461070a57610250565b806375b64471146105c65780638da5cb5b146105ee57806395d89b4114610618578063a0712d6814610642578063a1db246e1461065e57610250565b806335538759116101d157806356b4f6731161019557806356b4f673146104bc5780635fe75587146104e65780636352211e1461051057806370a082311461054c578063715018a6146105885780637304ff6c1461059e57610250565b806335538759146103fe57806342842e0e1461042657806342966c6814610442578063507862d11461046a57806356b48d631461049457610250565b80631422374f116102185780631422374f1461033c57806318160ddd146103665780631d9857781461039057806323b872dd146103cc57806324600fc3146103e857610250565b80630116bc2d1461025457806301ffc9a71461027e57806306fdde03146102ba578063081812fc146102e4578063095ea7b314610320575b5f80fd5b34801561025f575f80fd5b50610268610930565b6040516102759190612bab565b60405180910390f35b348015610289575f80fd5b506102a4600480360381019061029f9190612c2a565b610942565b6040516102b19190612bab565b60405180910390f35b3480156102c5575f80fd5b506102ce6109d3565b6040516102db9190612cdf565b60405180910390f35b3480156102ef575f80fd5b5061030a60048036038101906103059190612d32565b610a63565b6040516103179190612d9c565b60405180910390f35b61033a60048036038101906103359190612ddf565b610add565b005b348015610347575f80fd5b50610350610c1c565b60405161035d9190612e2c565b60405180910390f35b348015610371575f80fd5b5061037a610c22565b6040516103879190612e2c565b60405180910390f35b34801561039b575f80fd5b506103b660048036038101906103b19190612e45565b610c38565b6040516103c39190612e2c565b60405180910390f35b6103e660048036038101906103e19190612e70565b610c4d565b005b3480156103f3575f80fd5b506103fc610d55565b005b348015610409575f80fd5b50610424600480360381019061041f9190612ec0565b610e5d565b005b610440600480360381019061043b9190612e70565b610eca565b005b34801561044d575f80fd5b5061046860048036038101906104639190612d32565b610fd2565b005b348015610475575f80fd5b5061047e610fe0565b60405161048b9190612cdf565b60405180910390f35b34801561049f575f80fd5b506104ba60048036038101906104b5919061302a565b61106c565b005b3480156104c7575f80fd5b506104d0611087565b6040516104dd9190612cdf565b60405180910390f35b3480156104f1575f80fd5b506104fa611113565b6040516105079190612e2c565b60405180910390f35b34801561051b575f80fd5b5061053660048036038101906105319190612d32565b611119565b6040516105439190612d9c565b60405180910390f35b348015610557575f80fd5b50610572600480360381019061056d9190612e45565b61112a565b60405161057f9190612e2c565b60405180910390f35b348015610593575f80fd5b5061059c6111df565b005b3480156105a9575f80fd5b506105c460048036038101906105bf919061309b565b6111f2565b005b3480156105d1575f80fd5b506105ec60048036038101906105e79190612d32565b611227565b005b3480156105f9575f80fd5b50610602611239565b60405161060f9190612d9c565b60405180910390f35b348015610623575f80fd5b5061062c611260565b6040516106399190612cdf565b60405180910390f35b61065c60048036038101906106579190612d32565b6112f0565b005b348015610669575f80fd5b50610684600480360381019061067f9190612d32565b61172d565b005b348015610691575f80fd5b506106ac60048036038101906106a791906130f5565b61173f565b005b3480156106b9575f80fd5b506106c2611845565b005b3480156106cf575f80fd5b506106d8611877565b6040516106e59190612bab565b60405180910390f35b610708600480360381019061070391906131d1565b611889565b005b348015610715575f80fd5b5061071e611993565b60405161072b9190612e2c565b60405180910390f35b34801561073f575f80fd5b5061075a60048036038101906107559190612d32565b611999565b005b348015610767575f80fd5b50610782600480360381019061077d9190612d32565b6119ab565b60405161078f9190612cdf565b60405180910390f35b3480156107a3575f80fd5b506107ac611a84565b6040516107b99190612e2c565b60405180910390f35b3480156107cd575f80fd5b506107d6611a8a565b6040516107e39190612e2c565b60405180910390f35b3480156107f7575f80fd5b50610800611a90565b60405161080d9190612cdf565b60405180910390f35b348015610821575f80fd5b5061083c60048036038101906108379190612d32565b611b1c565b6040516108499190612e2c565b60405180910390f35b34801561085d575f80fd5b50610866611ba1565b6040516108739190612cdf565b60405180910390f35b348015610887575f80fd5b506108a2600480360381019061089d9190613251565b611c31565b6040516108af9190612bab565b60405180910390f35b3480156108c3575f80fd5b506108de60048036038101906108d99190612e45565b611cbf565b005b3480156108eb575f80fd5b5061090660048036038101906109019190612d32565b611d41565b005b348015610913575f80fd5b5061092e60048036038101906109299190612d32565b611d53565b005b600f5f9054906101000a900460ff1681565b5f6301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061099c57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109cc5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600380546109e2906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0e906132bc565b8015610a595780601f10610a3057610100808354040283529160200191610a59565b820191905f5260205f20905b815481529060010190602001808311610a3c57829003601f168201915b5050505050905090565b5f610a6d82611d65565b610aa3576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075f8381526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610ae782611119565b90508073ffffffffffffffffffffffffffffffffffffffff16610b08611dc0565b73ffffffffffffffffffffffffffffffffffffffff1614610b6b57610b3481610b2f611dc0565b611c31565b610b6a576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b8260075f8481526020019081526020015f205f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60145481565b5f610c2b611dc7565b6002546001540303905090565b600b602052805f5260405f205f915090505481565b5f6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610d45576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610cc39291906132ec565b6020604051808303815f875af1158015610cdf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d039190613327565b610d4457336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610d3b9190612d9c565b60405180910390fd5b5b610d50838383611dcb565b505050565b610d5d6120da565b600260095403610da2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d999061339c565b60405180910390fd5b60026009819055505f3373ffffffffffffffffffffffffffffffffffffffff1647604051610dcf906133e7565b5f6040518083038185875af1925050503d805f8114610e09576040519150601f19603f3d011682016040523d82523d5f602084013e610e0e565b606091505b5050905080610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990613445565b60405180910390fd5b506001600981905550565b610e656120da565b60105482610e71610c22565b610e7b9190613490565b1115610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb39061350d565b60405180910390fd5b610ec68183612158565b5050565b5f6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610fc2576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610f409291906132ec565b6020604051808303815f875af1158015610f5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f809190613327565b610fc157336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610fb89190612d9c565b60405180910390fd5b5b610fcd838383612175565b505050565b610fdd816001612194565b50565b600d8054610fed906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054611019906132bc565b80156110645780601f1061103b57610100808354040283529160200191611064565b820191905f5260205f20905b81548152906001019060200180831161104757829003601f168201915b505050505081565b6110746120da565b80600a908161108391906136c8565b5050565b600a8054611094906132bc565b80601f01602080910402602001604051908101604052809291908181526020018280546110c0906132bc565b801561110b5780601f106110e25761010080835404028352916020019161110b565b820191905f5260205f20905b8154815290600101906020018083116110ee57829003601f168201915b505050505081565b60135481565b5f611123826123d1565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611190576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054169050919050565b6111e76120da565b6111f05f612495565b565b6111fa6120da565b80600e908161120991906136c8565b5081600c5f6101000a81548160ff0219169083151502179055505050565b61122f6120da565b8060108190555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461126f906132bc565b80601f016020809104026020016040519081016040528092919081815260200182805461129b906132bc565b80156112e65780601f106112bd576101008083540402835291602001916112e6565b820191905f5260205f20905b8154815290600101906020018083116112c957829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461135e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611355906137e1565b60405180910390fd5b6002600954036113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a9061339c565b60405180910390fd5b60026009819055505f80600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546014546113f891906137ff565b90508083106114ab57808361140d91906137ff565b60115461141a9190613832565b915080600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546114659190613490565b600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611539565b5f915082600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546114f79190613490565b600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b600f5f9054906101000a900460ff16611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157e906138bd565b60405180910390fd5b60105483611593610c22565b61159d9190613490565b11156115de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d590613925565b60405180910390fd5b601354836115eb3361112a565b6115f59190613490565b1115611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162d9061398d565b60405180910390fd5b60125483111561167b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167290613a1b565b60405180910390fd5b813410156116be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b590613a83565b60405180910390fd5b6116c83384612158565b81341115611720573373ffffffffffffffffffffffffffffffffffffffff166108fc83346116f691906137ff565b90811502906040515f60405180830381858888f1935050505015801561171e573d5f803e3d5ffd5b505b5050600160098190555050565b6117356120da565b8060148190555050565b8060085f61174b611dc0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117f4611dc0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118399190612bab565b60405180910390a35050565b61184d6120da565b600f5f9054906101000a900460ff1615600f5f6101000a81548160ff021916908315150217905550565b600c5f9054906101000a900460ff1681565b5f6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611981576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b81526004016118ff9291906132ec565b6020604051808303815f875af115801561191b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061193f9190613327565b61198057336040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016119779190612d9c565b60405180910390fd5b5b61198d84848484612556565b50505050565b60115481565b6119a16120da565b8060128190555050565b6060600c5f9054906101000a900460ff16156119f357600e6119cc836125c8565b6040516020016119dd929190613b5b565b6040516020818303038152906040529050611a7f565b600d8054611a00906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2c906132bc565b8015611a775780601f10611a4e57610100808354040283529160200191611a77565b820191905f5260205f20905b815481529060010190602001808311611a5a57829003601f168201915b505050505090505b919050565b60125481565b60105481565b600e8054611a9d906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac9906132bc565b8015611b145780601f10611aeb57610100808354040283529160200191611b14565b820191905f5260205f20905b815481529060010190602001808311611af757829003601f168201915b505050505081565b5f805f600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054601454611b6a91906137ff565b9050808410611b93578084611b7f91906137ff565b601154611b8c9190613832565b9150611b97565b5f91505b8192505050919050565b6060600a8054611bb0906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054611bdc906132bc565b8015611c275780601f10611bfe57610100808354040283529160200191611c27565b820191905f5260205f20905b815481529060010190602001808311611c0a57829003601f168201915b5050505050905090565b5f60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b611cc76120da565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2c90613bee565b60405180910390fd5b611d3e81612495565b50565b611d496120da565b8060138190555050565b611d5b6120da565b8060118190555050565b5f81611d6f611dc7565b11158015611d7e575060015482105b8015611db957505f7c010000000000000000000000000000000000000000000000000000000060055f8581526020019081526020015f205416145b9050919050565b5f33905090565b5f90565b5f611dd5826123d1565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611e3c576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80611e4784612721565b91509150611e5d8187611e58611dc0565b612744565b611ea957611e7286611e6d611dc0565b611c31565b611ea8576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611f0e576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f1b8686866001612787565b8015611f25575f82555b60065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600190039190508190555060065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815460010191905081905550611fed85611fc988888761278d565b7c0200000000000000000000000000000000000000000000000000000000176127b4565b60055f8681526020019081526020015f20819055505f7c020000000000000000000000000000000000000000000000000000000084160361206a575f6001850190505f60055f8381526020019081526020015f205403612068576001548114612067578360055f8381526020019081526020015f20819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120d286868660016127de565b505050505050565b6120e26127e4565b73ffffffffffffffffffffffffffffffffffffffff16612100611239565b73ffffffffffffffffffffffffffffffffffffffff1614612156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214d90613c56565b60405180910390fd5b565b612171828260405180602001604052805f8152506127eb565b5050565b61218f83838360405180602001604052805f815250611889565b505050565b5f61219e836123d1565b90505f8190505f806121af86612721565b915091508415612218576121cb81846121c6611dc0565b612744565b612217576121e0836121db611dc0565b611c31565b612216576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b612225835f886001612787565b801561222f575f82555b600160806001901b0360065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055506122d383612290855f8861278d565b7c02000000000000000000000000000000000000000000000000000000007c010000000000000000000000000000000000000000000000000000000017176127b4565b60055f8881526020019081526020015f20819055505f7c0200000000000000000000000000000000000000000000000000000000851603612350575f6001870190505f60055f8381526020019081526020015f20540361234e57600154811461234d578460055f8381526020019081526020015f20819055505b5b505b855f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123b8835f8860016127de565b60025f8154809291906001019190505550505050505050565b5f80829050806123df611dc7565b1161245e5760015481101561245d575f60055f8381526020019081526020015f205490505f7c010000000000000000000000000000000000000000000000000000000082160361245b575b5f81036124515760055f836001900393508381526020019081526020015f2054905061242a565b8092505050612490565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612561848484610c4d565b5f8373ffffffffffffffffffffffffffffffffffffffff163b146125c25761258b84848484612884565b6125c1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60605f820361260e576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061271c565b5f8290505f5b5f821461263d57808061262690613c74565b915050600a826126369190613ce8565b9150612614565b5f8167ffffffffffffffff81111561265857612657612f06565b5b6040519080825280601f01601f19166020018201604052801561268a5781602001600182028036833780820191505090505b5090505b5f8514612715576001826126a291906137ff565b9150600a856126b19190613d18565b60306126bd9190613490565b60f81b8183815181106126d3576126d2613d48565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a8561270e9190613ce8565b945061268e565b8093505050505b919050565b5f805f60075f8581526020019081526020015f2090508092508254915050915091565b5f73ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b5f8060e883901c905060e86127a38686846129cf565b62ffffff16901b9150509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b5f33905090565b6127f583836129d7565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1461287f575f60015490505f83820390505b6128325f868380600101945086612884565b612868576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81811061282057816001541461287c575f80fd5b50505b505050565b5f8373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128a9611dc0565b8786866040518563ffffffff1660e01b81526004016128cb9493929190613dc7565b6020604051808303815f875af192505050801561290657506040513d601f19601f820116820180604052508101906129039190613e25565b60015b61297c573d805f8114612934576040519150601f19603f3d011682016040523d82523d5f602084013e612939565b606091505b505f815103612974576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b5f9392505050565b5f60015490505f8203612a16576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a225f848385612787565b600160406001901b17820260065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540192505081905550612a9483612a855f865f61278d565b612a8e85612b82565b176127b4565b60055f8381526020019081526020015f20819055505f80838301905073ffffffffffffffffffffffffffffffffffffffff8516915082825f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4600183015b818114612b2e5780835f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4600181019050612af5565b505f8203612b68576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001819055505050612b7d5f8483856127de565b505050565b5f6001821460e11b9050919050565b5f8115159050919050565b612ba581612b91565b82525050565b5f602082019050612bbe5f830184612b9c565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612c0981612bd5565b8114612c13575f80fd5b50565b5f81359050612c2481612c00565b92915050565b5f60208284031215612c3f57612c3e612bcd565b5b5f612c4c84828501612c16565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612c8c578082015181840152602081019050612c71565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612cb182612c55565b612cbb8185612c5f565b9350612ccb818560208601612c6f565b612cd481612c97565b840191505092915050565b5f6020820190508181035f830152612cf78184612ca7565b905092915050565b5f819050919050565b612d1181612cff565b8114612d1b575f80fd5b50565b5f81359050612d2c81612d08565b92915050565b5f60208284031215612d4757612d46612bcd565b5b5f612d5484828501612d1e565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612d8682612d5d565b9050919050565b612d9681612d7c565b82525050565b5f602082019050612daf5f830184612d8d565b92915050565b612dbe81612d7c565b8114612dc8575f80fd5b50565b5f81359050612dd981612db5565b92915050565b5f8060408385031215612df557612df4612bcd565b5b5f612e0285828601612dcb565b9250506020612e1385828601612d1e565b9150509250929050565b612e2681612cff565b82525050565b5f602082019050612e3f5f830184612e1d565b92915050565b5f60208284031215612e5a57612e59612bcd565b5b5f612e6784828501612dcb565b91505092915050565b5f805f60608486031215612e8757612e86612bcd565b5b5f612e9486828701612dcb565b9350506020612ea586828701612dcb565b9250506040612eb686828701612d1e565b9150509250925092565b5f8060408385031215612ed657612ed5612bcd565b5b5f612ee385828601612d1e565b9250506020612ef485828601612dcb565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612f3c82612c97565b810181811067ffffffffffffffff82111715612f5b57612f5a612f06565b5b80604052505050565b5f612f6d612bc4565b9050612f798282612f33565b919050565b5f67ffffffffffffffff821115612f9857612f97612f06565b5b612fa182612c97565b9050602081019050919050565b828183375f83830152505050565b5f612fce612fc984612f7e565b612f64565b905082815260208101848484011115612fea57612fe9612f02565b5b612ff5848285612fae565b509392505050565b5f82601f83011261301157613010612efe565b5b8135613021848260208601612fbc565b91505092915050565b5f6020828403121561303f5761303e612bcd565b5b5f82013567ffffffffffffffff81111561305c5761305b612bd1565b5b61306884828501612ffd565b91505092915050565b61307a81612b91565b8114613084575f80fd5b50565b5f8135905061309581613071565b92915050565b5f80604083850312156130b1576130b0612bcd565b5b5f6130be85828601613087565b925050602083013567ffffffffffffffff8111156130df576130de612bd1565b5b6130eb85828601612ffd565b9150509250929050565b5f806040838503121561310b5761310a612bcd565b5b5f61311885828601612dcb565b925050602061312985828601613087565b9150509250929050565b5f67ffffffffffffffff82111561314d5761314c612f06565b5b61315682612c97565b9050602081019050919050565b5f61317561317084613133565b612f64565b90508281526020810184848401111561319157613190612f02565b5b61319c848285612fae565b509392505050565b5f82601f8301126131b8576131b7612efe565b5b81356131c8848260208601613163565b91505092915050565b5f805f80608085870312156131e9576131e8612bcd565b5b5f6131f687828801612dcb565b945050602061320787828801612dcb565b935050604061321887828801612d1e565b925050606085013567ffffffffffffffff81111561323957613238612bd1565b5b613245878288016131a4565b91505092959194509250565b5f806040838503121561326757613266612bcd565b5b5f61327485828601612dcb565b925050602061328585828601612dcb565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806132d357607f821691505b6020821081036132e6576132e561328f565b5b50919050565b5f6040820190506132ff5f830185612d8d565b61330c6020830184612d8d565b9392505050565b5f8151905061332181613071565b92915050565b5f6020828403121561333c5761333b612bcd565b5b5f61334984828501613313565b91505092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f613386601f83612c5f565b915061339182613352565b602082019050919050565b5f6020820190508181035f8301526133b38161337a565b9050919050565b5f81905092915050565b50565b5f6133d25f836133ba565b91506133dd826133c4565b5f82019050919050565b5f6133f1826133c7565b9150819050919050565b7f5472616e73666572206661696c65642e000000000000000000000000000000005f82015250565b5f61342f601083612c5f565b915061343a826133fb565b602082019050919050565b5f6020820190508181035f83015261345c81613423565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61349a82612cff565b91506134a583612cff565b92508282019050808211156134bd576134bc613463565b5b92915050565b7f4e6f205068756e6b73206d6f726520696e2073746f636b2100000000000000005f82015250565b5f6134f7601883612c5f565b9150613502826134c3565b602082019050919050565b5f6020820190508181035f830152613524816134eb565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026135877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261354c565b613591868361354c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6135cc6135c76135c284612cff565b6135a9565b612cff565b9050919050565b5f819050919050565b6135e5836135b2565b6135f96135f1826135d3565b848454613558565b825550505050565b5f90565b61360d613601565b6136188184846135dc565b505050565b5b8181101561363b576136305f82613605565b60018101905061361e565b5050565b601f821115613680576136518161352b565b61365a8461353d565b81016020851015613669578190505b61367d6136758561353d565b83018261361d565b50505b505050565b5f82821c905092915050565b5f6136a05f1984600802613685565b1980831691505092915050565b5f6136b88383613691565b9150826002028217905092915050565b6136d182612c55565b67ffffffffffffffff8111156136ea576136e9612f06565b5b6136f482546132bc565b6136ff82828561363f565b5f60209050601f831160018114613730575f841561371e578287015190505b61372885826136ad565b86555061378f565b601f19841661373e8661352b565b5f5b8281101561376557848901518255600182019150602085019450602081019050613740565b86831015613782578489015161377e601f891682613691565b8355505b6001600288020188555050505b505050505050565b7f5468652063616c6c657220697320616e6f7468657220636f6e747261637400005f82015250565b5f6137cb601e83612c5f565b91506137d682613797565b602082019050919050565b5f6020820190508181035f8301526137f8816137bf565b9050919050565b5f61380982612cff565b915061381483612cff565b925082820390508181111561382c5761382b613463565b5b92915050565b5f61383c82612cff565b915061384783612cff565b925082820261385581612cff565b9150828204841483151761386c5761386b613463565b5b5092915050565b7f5068756e6b73206e6f74207265616479207965742100000000000000000000005f82015250565b5f6138a7601583612c5f565b91506138b282613873565b602082019050919050565b5f6020820190508181035f8301526138d48161389b565b9050919050565b7f4e6f206d6f7265206c65667421000000000000000000000000000000000000005f82015250565b5f61390f600d83612c5f565b915061391a826138db565b602082019050919050565b5f6020820190508181035f83015261393c81613903565b9050919050565b7f547269656420746f206d696e74206f766572206f766572206c696d69740000005f82015250565b5f613977601d83612c5f565b915061398282613943565b602082019050919050565b5f6020820190508181035f8301526139a48161396b565b9050919050565b7f547269656420746f206d696e74206f766572206c696d69742c207265747279205f8201527f776974682072656475636564207175616e746974790000000000000000000000602082015250565b5f613a05603583612c5f565b9150613a10826139ab565b604082019050919050565b5f6020820190508181035f830152613a32816139f9565b9050919050565b7f4d7573742073656e64206d6f7265206d6f6e65792100000000000000000000005f82015250565b5f613a6d601583612c5f565b9150613a7882613a39565b602082019050919050565b5f6020820190508181035f830152613a9a81613a61565b9050919050565b5f81905092915050565b5f8154613ab7816132bc565b613ac18186613aa1565b9450600182165f8114613adb5760018114613af057613b22565b60ff1983168652811515820286019350613b22565b613af98561352b565b5f5b83811015613b1a57815481890152600182019150602081019050613afb565b838801955050505b50505092915050565b5f613b3582612c55565b613b3f8185613aa1565b9350613b4f818560208601612c6f565b80840191505092915050565b5f613b668285613aab565b9150613b728284613b2b565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613bd8602683612c5f565b9150613be382613b7e565b604082019050919050565b5f6020820190508181035f830152613c0581613bcc565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613c40602083612c5f565b9150613c4b82613c0c565b602082019050919050565b5f6020820190508181035f830152613c6d81613c34565b9050919050565b5f613c7e82612cff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613cb057613caf613463565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613cf282612cff565b9150613cfd83612cff565b925082613d0d57613d0c613cbb565b5b828204905092915050565b5f613d2282612cff565b9150613d2d83612cff565b925082613d3d57613d3c613cbb565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f613d9982613d75565b613da38185613d7f565b9350613db3818560208601612c6f565b613dbc81612c97565b840191505092915050565b5f608082019050613dda5f830187612d8d565b613de76020830186612d8d565b613df46040830185612e1d565b8181036060830152613e068184613d8f565b905095945050505050565b5f81519050613e1f81612c00565b92915050565b5f60208284031215613e3a57613e39612bcd565b5b5f613e4784828501613e11565b9150509291505056fea26469706673582212202d2a5d9e5af494f5b02b07144776155a62ed519ee8e8a756f1a60f5e47f12c0464736f6c63430008140033

Deployed Bytecode

0x608060405260043610610250575f3560e01c806375b6447111610138578063c144a4ba116100b5578063e757223011610079578063e757223014610816578063e8a3d48514610852578063e985e9c51461087c578063f2fde38b146108b8578063f814943d146108e0578063fb92488b1461090857610250565b8063c144a4ba14610734578063c87b56dd1461075c578063cfdbf25414610798578063d8258d95146107c2578063dbddb26a146107ec57610250565b8063a22cb465116100fc578063a22cb46514610686578063a4cdd719146106ae578063a76a9587146106c4578063b88d4fde146106ee578063c002d23d1461070a57610250565b806375b64471146105c65780638da5cb5b146105ee57806395d89b4114610618578063a0712d6814610642578063a1db246e1461065e57610250565b806335538759116101d157806356b4f6731161019557806356b4f673146104bc5780635fe75587146104e65780636352211e1461051057806370a082311461054c578063715018a6146105885780637304ff6c1461059e57610250565b806335538759146103fe57806342842e0e1461042657806342966c6814610442578063507862d11461046a57806356b48d631461049457610250565b80631422374f116102185780631422374f1461033c57806318160ddd146103665780631d9857781461039057806323b872dd146103cc57806324600fc3146103e857610250565b80630116bc2d1461025457806301ffc9a71461027e57806306fdde03146102ba578063081812fc146102e4578063095ea7b314610320575b5f80fd5b34801561025f575f80fd5b50610268610930565b6040516102759190612bab565b60405180910390f35b348015610289575f80fd5b506102a4600480360381019061029f9190612c2a565b610942565b6040516102b19190612bab565b60405180910390f35b3480156102c5575f80fd5b506102ce6109d3565b6040516102db9190612cdf565b60405180910390f35b3480156102ef575f80fd5b5061030a60048036038101906103059190612d32565b610a63565b6040516103179190612d9c565b60405180910390f35b61033a60048036038101906103359190612ddf565b610add565b005b348015610347575f80fd5b50610350610c1c565b60405161035d9190612e2c565b60405180910390f35b348015610371575f80fd5b5061037a610c22565b6040516103879190612e2c565b60405180910390f35b34801561039b575f80fd5b506103b660048036038101906103b19190612e45565b610c38565b6040516103c39190612e2c565b60405180910390f35b6103e660048036038101906103e19190612e70565b610c4d565b005b3480156103f3575f80fd5b506103fc610d55565b005b348015610409575f80fd5b50610424600480360381019061041f9190612ec0565b610e5d565b005b610440600480360381019061043b9190612e70565b610eca565b005b34801561044d575f80fd5b5061046860048036038101906104639190612d32565b610fd2565b005b348015610475575f80fd5b5061047e610fe0565b60405161048b9190612cdf565b60405180910390f35b34801561049f575f80fd5b506104ba60048036038101906104b5919061302a565b61106c565b005b3480156104c7575f80fd5b506104d0611087565b6040516104dd9190612cdf565b60405180910390f35b3480156104f1575f80fd5b506104fa611113565b6040516105079190612e2c565b60405180910390f35b34801561051b575f80fd5b5061053660048036038101906105319190612d32565b611119565b6040516105439190612d9c565b60405180910390f35b348015610557575f80fd5b50610572600480360381019061056d9190612e45565b61112a565b60405161057f9190612e2c565b60405180910390f35b348015610593575f80fd5b5061059c6111df565b005b3480156105a9575f80fd5b506105c460048036038101906105bf919061309b565b6111f2565b005b3480156105d1575f80fd5b506105ec60048036038101906105e79190612d32565b611227565b005b3480156105f9575f80fd5b50610602611239565b60405161060f9190612d9c565b60405180910390f35b348015610623575f80fd5b5061062c611260565b6040516106399190612cdf565b60405180910390f35b61065c60048036038101906106579190612d32565b6112f0565b005b348015610669575f80fd5b50610684600480360381019061067f9190612d32565b61172d565b005b348015610691575f80fd5b506106ac60048036038101906106a791906130f5565b61173f565b005b3480156106b9575f80fd5b506106c2611845565b005b3480156106cf575f80fd5b506106d8611877565b6040516106e59190612bab565b60405180910390f35b610708600480360381019061070391906131d1565b611889565b005b348015610715575f80fd5b5061071e611993565b60405161072b9190612e2c565b60405180910390f35b34801561073f575f80fd5b5061075a60048036038101906107559190612d32565b611999565b005b348015610767575f80fd5b50610782600480360381019061077d9190612d32565b6119ab565b60405161078f9190612cdf565b60405180910390f35b3480156107a3575f80fd5b506107ac611a84565b6040516107b99190612e2c565b60405180910390f35b3480156107cd575f80fd5b506107d6611a8a565b6040516107e39190612e2c565b60405180910390f35b3480156107f7575f80fd5b50610800611a90565b60405161080d9190612cdf565b60405180910390f35b348015610821575f80fd5b5061083c60048036038101906108379190612d32565b611b1c565b6040516108499190612e2c565b60405180910390f35b34801561085d575f80fd5b50610866611ba1565b6040516108739190612cdf565b60405180910390f35b348015610887575f80fd5b506108a2600480360381019061089d9190613251565b611c31565b6040516108af9190612bab565b60405180910390f35b3480156108c3575f80fd5b506108de60048036038101906108d99190612e45565b611cbf565b005b3480156108eb575f80fd5b5061090660048036038101906109019190612d32565b611d41565b005b348015610913575f80fd5b5061092e60048036038101906109299190612d32565b611d53565b005b600f5f9054906101000a900460ff1681565b5f6301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061099c57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109cc5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600380546109e2906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0e906132bc565b8015610a595780601f10610a3057610100808354040283529160200191610a59565b820191905f5260205f20905b815481529060010190602001808311610a3c57829003601f168201915b5050505050905090565b5f610a6d82611d65565b610aa3576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075f8381526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610ae782611119565b90508073ffffffffffffffffffffffffffffffffffffffff16610b08611dc0565b73ffffffffffffffffffffffffffffffffffffffff1614610b6b57610b3481610b2f611dc0565b611c31565b610b6a576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b8260075f8481526020019081526020015f205f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60145481565b5f610c2b611dc7565b6002546001540303905090565b600b602052805f5260405f205f915090505481565b5f6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610d45576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610cc39291906132ec565b6020604051808303815f875af1158015610cdf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d039190613327565b610d4457336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610d3b9190612d9c565b60405180910390fd5b5b610d50838383611dcb565b505050565b610d5d6120da565b600260095403610da2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d999061339c565b60405180910390fd5b60026009819055505f3373ffffffffffffffffffffffffffffffffffffffff1647604051610dcf906133e7565b5f6040518083038185875af1925050503d805f8114610e09576040519150601f19603f3d011682016040523d82523d5f602084013e610e0e565b606091505b5050905080610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990613445565b60405180910390fd5b506001600981905550565b610e656120da565b60105482610e71610c22565b610e7b9190613490565b1115610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb39061350d565b60405180910390fd5b610ec68183612158565b5050565b5f6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610fc2576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610f409291906132ec565b6020604051808303815f875af1158015610f5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f809190613327565b610fc157336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610fb89190612d9c565b60405180910390fd5b5b610fcd838383612175565b505050565b610fdd816001612194565b50565b600d8054610fed906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054611019906132bc565b80156110645780601f1061103b57610100808354040283529160200191611064565b820191905f5260205f20905b81548152906001019060200180831161104757829003601f168201915b505050505081565b6110746120da565b80600a908161108391906136c8565b5050565b600a8054611094906132bc565b80601f01602080910402602001604051908101604052809291908181526020018280546110c0906132bc565b801561110b5780601f106110e25761010080835404028352916020019161110b565b820191905f5260205f20905b8154815290600101906020018083116110ee57829003601f168201915b505050505081565b60135481565b5f611123826123d1565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611190576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054169050919050565b6111e76120da565b6111f05f612495565b565b6111fa6120da565b80600e908161120991906136c8565b5081600c5f6101000a81548160ff0219169083151502179055505050565b61122f6120da565b8060108190555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461126f906132bc565b80601f016020809104026020016040519081016040528092919081815260200182805461129b906132bc565b80156112e65780601f106112bd576101008083540402835291602001916112e6565b820191905f5260205f20905b8154815290600101906020018083116112c957829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461135e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611355906137e1565b60405180910390fd5b6002600954036113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a9061339c565b60405180910390fd5b60026009819055505f80600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546014546113f891906137ff565b90508083106114ab57808361140d91906137ff565b60115461141a9190613832565b915080600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546114659190613490565b600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611539565b5f915082600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546114f79190613490565b600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b600f5f9054906101000a900460ff16611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157e906138bd565b60405180910390fd5b60105483611593610c22565b61159d9190613490565b11156115de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d590613925565b60405180910390fd5b601354836115eb3361112a565b6115f59190613490565b1115611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162d9061398d565b60405180910390fd5b60125483111561167b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167290613a1b565b60405180910390fd5b813410156116be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b590613a83565b60405180910390fd5b6116c83384612158565b81341115611720573373ffffffffffffffffffffffffffffffffffffffff166108fc83346116f691906137ff565b90811502906040515f60405180830381858888f1935050505015801561171e573d5f803e3d5ffd5b505b5050600160098190555050565b6117356120da565b8060148190555050565b8060085f61174b611dc0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117f4611dc0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118399190612bab565b60405180910390a35050565b61184d6120da565b600f5f9054906101000a900460ff1615600f5f6101000a81548160ff021916908315150217905550565b600c5f9054906101000a900460ff1681565b5f6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611981576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b81526004016118ff9291906132ec565b6020604051808303815f875af115801561191b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061193f9190613327565b61198057336040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016119779190612d9c565b60405180910390fd5b5b61198d84848484612556565b50505050565b60115481565b6119a16120da565b8060128190555050565b6060600c5f9054906101000a900460ff16156119f357600e6119cc836125c8565b6040516020016119dd929190613b5b565b6040516020818303038152906040529050611a7f565b600d8054611a00906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2c906132bc565b8015611a775780601f10611a4e57610100808354040283529160200191611a77565b820191905f5260205f20905b815481529060010190602001808311611a5a57829003601f168201915b505050505090505b919050565b60125481565b60105481565b600e8054611a9d906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac9906132bc565b8015611b145780601f10611aeb57610100808354040283529160200191611b14565b820191905f5260205f20905b815481529060010190602001808311611af757829003601f168201915b505050505081565b5f805f600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054601454611b6a91906137ff565b9050808410611b93578084611b7f91906137ff565b601154611b8c9190613832565b9150611b97565b5f91505b8192505050919050565b6060600a8054611bb0906132bc565b80601f0160208091040260200160405190810160405280929190818152602001828054611bdc906132bc565b8015611c275780601f10611bfe57610100808354040283529160200191611c27565b820191905f5260205f20905b815481529060010190602001808311611c0a57829003601f168201915b5050505050905090565b5f60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b611cc76120da565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2c90613bee565b60405180910390fd5b611d3e81612495565b50565b611d496120da565b8060138190555050565b611d5b6120da565b8060118190555050565b5f81611d6f611dc7565b11158015611d7e575060015482105b8015611db957505f7c010000000000000000000000000000000000000000000000000000000060055f8581526020019081526020015f205416145b9050919050565b5f33905090565b5f90565b5f611dd5826123d1565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611e3c576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80611e4784612721565b91509150611e5d8187611e58611dc0565b612744565b611ea957611e7286611e6d611dc0565b611c31565b611ea8576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611f0e576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f1b8686866001612787565b8015611f25575f82555b60065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600190039190508190555060065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815460010191905081905550611fed85611fc988888761278d565b7c0200000000000000000000000000000000000000000000000000000000176127b4565b60055f8681526020019081526020015f20819055505f7c020000000000000000000000000000000000000000000000000000000084160361206a575f6001850190505f60055f8381526020019081526020015f205403612068576001548114612067578360055f8381526020019081526020015f20819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120d286868660016127de565b505050505050565b6120e26127e4565b73ffffffffffffffffffffffffffffffffffffffff16612100611239565b73ffffffffffffffffffffffffffffffffffffffff1614612156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214d90613c56565b60405180910390fd5b565b612171828260405180602001604052805f8152506127eb565b5050565b61218f83838360405180602001604052805f815250611889565b505050565b5f61219e836123d1565b90505f8190505f806121af86612721565b915091508415612218576121cb81846121c6611dc0565b612744565b612217576121e0836121db611dc0565b611c31565b612216576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b612225835f886001612787565b801561222f575f82555b600160806001901b0360065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055506122d383612290855f8861278d565b7c02000000000000000000000000000000000000000000000000000000007c010000000000000000000000000000000000000000000000000000000017176127b4565b60055f8881526020019081526020015f20819055505f7c0200000000000000000000000000000000000000000000000000000000851603612350575f6001870190505f60055f8381526020019081526020015f20540361234e57600154811461234d578460055f8381526020019081526020015f20819055505b5b505b855f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123b8835f8860016127de565b60025f8154809291906001019190505550505050505050565b5f80829050806123df611dc7565b1161245e5760015481101561245d575f60055f8381526020019081526020015f205490505f7c010000000000000000000000000000000000000000000000000000000082160361245b575b5f81036124515760055f836001900393508381526020019081526020015f2054905061242a565b8092505050612490565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612561848484610c4d565b5f8373ffffffffffffffffffffffffffffffffffffffff163b146125c25761258b84848484612884565b6125c1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60605f820361260e576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061271c565b5f8290505f5b5f821461263d57808061262690613c74565b915050600a826126369190613ce8565b9150612614565b5f8167ffffffffffffffff81111561265857612657612f06565b5b6040519080825280601f01601f19166020018201604052801561268a5781602001600182028036833780820191505090505b5090505b5f8514612715576001826126a291906137ff565b9150600a856126b19190613d18565b60306126bd9190613490565b60f81b8183815181106126d3576126d2613d48565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a8561270e9190613ce8565b945061268e565b8093505050505b919050565b5f805f60075f8581526020019081526020015f2090508092508254915050915091565b5f73ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b5f8060e883901c905060e86127a38686846129cf565b62ffffff16901b9150509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b5f33905090565b6127f583836129d7565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1461287f575f60015490505f83820390505b6128325f868380600101945086612884565b612868576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81811061282057816001541461287c575f80fd5b50505b505050565b5f8373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128a9611dc0565b8786866040518563ffffffff1660e01b81526004016128cb9493929190613dc7565b6020604051808303815f875af192505050801561290657506040513d601f19601f820116820180604052508101906129039190613e25565b60015b61297c573d805f8114612934576040519150601f19603f3d011682016040523d82523d5f602084013e612939565b606091505b505f815103612974576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b5f9392505050565b5f60015490505f8203612a16576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a225f848385612787565b600160406001901b17820260065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540192505081905550612a9483612a855f865f61278d565b612a8e85612b82565b176127b4565b60055f8381526020019081526020015f20819055505f80838301905073ffffffffffffffffffffffffffffffffffffffff8516915082825f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4600183015b818114612b2e5780835f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4600181019050612af5565b505f8203612b68576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001819055505050612b7d5f8483856127de565b505050565b5f6001821460e11b9050919050565b5f8115159050919050565b612ba581612b91565b82525050565b5f602082019050612bbe5f830184612b9c565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612c0981612bd5565b8114612c13575f80fd5b50565b5f81359050612c2481612c00565b92915050565b5f60208284031215612c3f57612c3e612bcd565b5b5f612c4c84828501612c16565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612c8c578082015181840152602081019050612c71565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612cb182612c55565b612cbb8185612c5f565b9350612ccb818560208601612c6f565b612cd481612c97565b840191505092915050565b5f6020820190508181035f830152612cf78184612ca7565b905092915050565b5f819050919050565b612d1181612cff565b8114612d1b575f80fd5b50565b5f81359050612d2c81612d08565b92915050565b5f60208284031215612d4757612d46612bcd565b5b5f612d5484828501612d1e565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612d8682612d5d565b9050919050565b612d9681612d7c565b82525050565b5f602082019050612daf5f830184612d8d565b92915050565b612dbe81612d7c565b8114612dc8575f80fd5b50565b5f81359050612dd981612db5565b92915050565b5f8060408385031215612df557612df4612bcd565b5b5f612e0285828601612dcb565b9250506020612e1385828601612d1e565b9150509250929050565b612e2681612cff565b82525050565b5f602082019050612e3f5f830184612e1d565b92915050565b5f60208284031215612e5a57612e59612bcd565b5b5f612e6784828501612dcb565b91505092915050565b5f805f60608486031215612e8757612e86612bcd565b5b5f612e9486828701612dcb565b9350506020612ea586828701612dcb565b9250506040612eb686828701612d1e565b9150509250925092565b5f8060408385031215612ed657612ed5612bcd565b5b5f612ee385828601612d1e565b9250506020612ef485828601612dcb565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612f3c82612c97565b810181811067ffffffffffffffff82111715612f5b57612f5a612f06565b5b80604052505050565b5f612f6d612bc4565b9050612f798282612f33565b919050565b5f67ffffffffffffffff821115612f9857612f97612f06565b5b612fa182612c97565b9050602081019050919050565b828183375f83830152505050565b5f612fce612fc984612f7e565b612f64565b905082815260208101848484011115612fea57612fe9612f02565b5b612ff5848285612fae565b509392505050565b5f82601f83011261301157613010612efe565b5b8135613021848260208601612fbc565b91505092915050565b5f6020828403121561303f5761303e612bcd565b5b5f82013567ffffffffffffffff81111561305c5761305b612bd1565b5b61306884828501612ffd565b91505092915050565b61307a81612b91565b8114613084575f80fd5b50565b5f8135905061309581613071565b92915050565b5f80604083850312156130b1576130b0612bcd565b5b5f6130be85828601613087565b925050602083013567ffffffffffffffff8111156130df576130de612bd1565b5b6130eb85828601612ffd565b9150509250929050565b5f806040838503121561310b5761310a612bcd565b5b5f61311885828601612dcb565b925050602061312985828601613087565b9150509250929050565b5f67ffffffffffffffff82111561314d5761314c612f06565b5b61315682612c97565b9050602081019050919050565b5f61317561317084613133565b612f64565b90508281526020810184848401111561319157613190612f02565b5b61319c848285612fae565b509392505050565b5f82601f8301126131b8576131b7612efe565b5b81356131c8848260208601613163565b91505092915050565b5f805f80608085870312156131e9576131e8612bcd565b5b5f6131f687828801612dcb565b945050602061320787828801612dcb565b935050604061321887828801612d1e565b925050606085013567ffffffffffffffff81111561323957613238612bd1565b5b613245878288016131a4565b91505092959194509250565b5f806040838503121561326757613266612bcd565b5b5f61327485828601612dcb565b925050602061328585828601612dcb565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806132d357607f821691505b6020821081036132e6576132e561328f565b5b50919050565b5f6040820190506132ff5f830185612d8d565b61330c6020830184612d8d565b9392505050565b5f8151905061332181613071565b92915050565b5f6020828403121561333c5761333b612bcd565b5b5f61334984828501613313565b91505092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f613386601f83612c5f565b915061339182613352565b602082019050919050565b5f6020820190508181035f8301526133b38161337a565b9050919050565b5f81905092915050565b50565b5f6133d25f836133ba565b91506133dd826133c4565b5f82019050919050565b5f6133f1826133c7565b9150819050919050565b7f5472616e73666572206661696c65642e000000000000000000000000000000005f82015250565b5f61342f601083612c5f565b915061343a826133fb565b602082019050919050565b5f6020820190508181035f83015261345c81613423565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61349a82612cff565b91506134a583612cff565b92508282019050808211156134bd576134bc613463565b5b92915050565b7f4e6f205068756e6b73206d6f726520696e2073746f636b2100000000000000005f82015250565b5f6134f7601883612c5f565b9150613502826134c3565b602082019050919050565b5f6020820190508181035f830152613524816134eb565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026135877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261354c565b613591868361354c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6135cc6135c76135c284612cff565b6135a9565b612cff565b9050919050565b5f819050919050565b6135e5836135b2565b6135f96135f1826135d3565b848454613558565b825550505050565b5f90565b61360d613601565b6136188184846135dc565b505050565b5b8181101561363b576136305f82613605565b60018101905061361e565b5050565b601f821115613680576136518161352b565b61365a8461353d565b81016020851015613669578190505b61367d6136758561353d565b83018261361d565b50505b505050565b5f82821c905092915050565b5f6136a05f1984600802613685565b1980831691505092915050565b5f6136b88383613691565b9150826002028217905092915050565b6136d182612c55565b67ffffffffffffffff8111156136ea576136e9612f06565b5b6136f482546132bc565b6136ff82828561363f565b5f60209050601f831160018114613730575f841561371e578287015190505b61372885826136ad565b86555061378f565b601f19841661373e8661352b565b5f5b8281101561376557848901518255600182019150602085019450602081019050613740565b86831015613782578489015161377e601f891682613691565b8355505b6001600288020188555050505b505050505050565b7f5468652063616c6c657220697320616e6f7468657220636f6e747261637400005f82015250565b5f6137cb601e83612c5f565b91506137d682613797565b602082019050919050565b5f6020820190508181035f8301526137f8816137bf565b9050919050565b5f61380982612cff565b915061381483612cff565b925082820390508181111561382c5761382b613463565b5b92915050565b5f61383c82612cff565b915061384783612cff565b925082820261385581612cff565b9150828204841483151761386c5761386b613463565b5b5092915050565b7f5068756e6b73206e6f74207265616479207965742100000000000000000000005f82015250565b5f6138a7601583612c5f565b91506138b282613873565b602082019050919050565b5f6020820190508181035f8301526138d48161389b565b9050919050565b7f4e6f206d6f7265206c65667421000000000000000000000000000000000000005f82015250565b5f61390f600d83612c5f565b915061391a826138db565b602082019050919050565b5f6020820190508181035f83015261393c81613903565b9050919050565b7f547269656420746f206d696e74206f766572206f766572206c696d69740000005f82015250565b5f613977601d83612c5f565b915061398282613943565b602082019050919050565b5f6020820190508181035f8301526139a48161396b565b9050919050565b7f547269656420746f206d696e74206f766572206c696d69742c207265747279205f8201527f776974682072656475636564207175616e746974790000000000000000000000602082015250565b5f613a05603583612c5f565b9150613a10826139ab565b604082019050919050565b5f6020820190508181035f830152613a32816139f9565b9050919050565b7f4d7573742073656e64206d6f7265206d6f6e65792100000000000000000000005f82015250565b5f613a6d601583612c5f565b9150613a7882613a39565b602082019050919050565b5f6020820190508181035f830152613a9a81613a61565b9050919050565b5f81905092915050565b5f8154613ab7816132bc565b613ac18186613aa1565b9450600182165f8114613adb5760018114613af057613b22565b60ff1983168652811515820286019350613b22565b613af98561352b565b5f5b83811015613b1a57815481890152600182019150602081019050613afb565b838801955050505b50505092915050565b5f613b3582612c55565b613b3f8185613aa1565b9350613b4f818560208601612c6f565b80840191505092915050565b5f613b668285613aab565b9150613b728284613b2b565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613bd8602683612c5f565b9150613be382613b7e565b604082019050919050565b5f6020820190508181035f830152613c0581613bcc565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613c40602083612c5f565b9150613c4b82613c0c565b602082019050919050565b5f6020820190508181035f830152613c6d81613c34565b9050919050565b5f613c7e82612cff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613cb057613caf613463565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613cf282612cff565b9150613cfd83612cff565b925082613d0d57613d0c613cbb565b5b828204905092915050565b5f613d2282612cff565b9150613d2d83612cff565b925082613d3d57613d3c613cbb565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f613d9982613d75565b613da38185613d7f565b9350613db3818560208601612c6f565b613dbc81612c97565b840191505092915050565b5f608082019050613dda5f830187612d8d565b613de76020830186612d8d565b613df46040830185612e1d565b8181036060830152613e068184613d8f565b905095945050505050565b5f81519050613e1f81612c00565b92915050565b5f60208284031215613e3a57613e39612bcd565b5b5f613e4784828501613e11565b9150509291505056fea26469706673582212202d2a5d9e5af494f5b02b07144776155a62ed519ee8e8a756f1a60f5e47f12c0464736f6c63430008140033

Deployed Bytecode Sourcemap

34028:4649:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34309:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14525:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14777:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18353:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17937:408;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34501:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12888:180;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34172:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37679:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36537:191;;;;;;;;;;;;;:::i;:::-;;34604:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37872:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33901:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34243:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36998:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34138:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34463:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15425:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13353:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;883:103;;;;;;;;;;;;;:::i;:::-;;36736:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37118:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;648:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14885:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35327:1086;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37340:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18579:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36419:110;;;;;;;;;;;;;:::i;:::-;;34220:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38073:250;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34389:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37573:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38331:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34429:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34350:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34279:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34995:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36893:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18821:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;996:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37458:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37232:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34309:38;;;;;;;;;;;;;:::o;14525:244::-;14610:4;14664:10;14649:25;;:11;:25;;;;:68;;;;14707:10;14692:25;;:11;:25;;;;14649:68;:111;;;;14750:10;14735:25;;:11;:25;;;;14649:111;14629:131;;14525:244;;;:::o;14777:100::-;14831:13;14864:5;14857:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14777:100;:::o;18353:218::-;18429:7;18454:16;18462:7;18454;:16::i;:::-;18449:64;;18479:34;;;;;;;;;;;;;;18449:64;18533:15;:24;18549:7;18533:24;;;;;;;;;;;:30;;;;;;;;;;;;18526:37;;18353:218;;;:::o;17937:408::-;18026:13;18042:16;18050:7;18042;:16::i;:::-;18026:32;;18098:5;18075:28;;:19;:17;:19::i;:::-;:28;;;18071:175;;18123:44;18140:5;18147:19;:17;:19::i;:::-;18123:16;:44::i;:::-;18118:128;;18195:35;;;;;;;;;;;;;;18118:128;18071:175;18291:2;18258:15;:24;18274:7;18258:24;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;18329:7;18325:2;18309:28;;18318:5;18309:28;;;;;;;;;;;;18015:330;17937:408;;:::o;34501:38::-;;;;:::o;12888:180::-;12949:7;13034:15;:13;:15::i;:::-;13019:12;;13003:13;;:28;:46;12996:53;;12888:180;:::o;34172:45::-;;;;;;;;;;;;;;;;;:::o;37679:185::-;31137:1;30348:42;31091:43;;;:47;31087:225;;;30348:42;31160:40;;;31209:4;31216:10;31160:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31155:146;;31274:10;31255:30;;;;;;;;;;;:::i;:::-;;;;;;;;31155:146;31087:225;37819:37:::1;37838:4;37844:2;37848:7;37819:18;:37::i;:::-;37679:185:::0;;;:::o;36537:191::-;607:13;:11;:13::i;:::-;1557:1:::1;1715:7;;:19:::0;1707:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1557:1;1783:7;:18;;;;36606:12:::2;36624:10;:15;;36647:21;36624:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36605:68;;;36692:7;36684:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;36594:134;1513:1:::1;1828:7;:22;;;;36537:191::o:0;34604:254::-;607:13;:11;:13::i;:::-;34733:15:::1;;34721:8;34705:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:43;;34683:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;34821:29;34831:8;34841;34821:9;:29::i;:::-;34604:254:::0;;:::o;37872:193::-;31137:1;30348:42;31091:43;;;:47;31087:225;;;30348:42;31160:40;;;31209:4;31216:10;31160:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31155:146;;31274:10;31255:30;;;;;;;;;;;:::i;:::-;;;;;;;;31155:146;31087:225;38016:41:::1;38039:4;38045:2;38049:7;38016:22;:41::i;:::-;37872:193:::0;;;:::o;33901:94::-;33967:20;33973:7;33982:4;33967:5;:20::i;:::-;33901:94;:::o;34243:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36998:112::-;607:13;:11;:13::i;:::-;37090:12:::1;37075;:27;;;;;;:::i;:::-;;36998:112:::0;:::o;34138:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34463:35::-;;;;:::o;15425:152::-;15497:7;15540:27;15559:7;15540:18;:27::i;:::-;15517:52;;15425:152;;;:::o;13353:233::-;13425:7;13466:1;13449:19;;:5;:19;;;13445:60;;13477:28;;;;;;;;;;;;;;13445:60;11161:13;13523:18;:25;13542:5;13523:25;;;;;;;;;;;;;;;;:55;13516:62;;13353:233;;;:::o;883:103::-;607:13;:11;:13::i;:::-;948:30:::1;975:1;948:18;:30::i;:::-;883:103::o:0;36736:149::-;607:13;:11;:13::i;:::-;36838:8:::1;36827;:19;;;;;;:::i;:::-;;36868:9;36857:8;;:20;;;;;;;;;;;;;;;;;;36736:149:::0;;:::o;37118:106::-;607:13;:11;:13::i;:::-;37212:4:::1;37194:15;:22;;;;37118:106:::0;:::o;648:87::-;694:7;721:6;;;;;;;;;;;714:13;;648:87;:::o;14885:104::-;14941:13;14974:7;14967:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14885:104;:::o;35327:1086::-;34922:10;34909:23;;:9;:23;;;34901:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;1557:1:::1;1715:7;;:19:::0;1707:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1557:1;1783:7;:18;;;;35452:10:::2;35473:9:::0;35510:13:::2;:25;35524:10;35510:25;;;;;;;;;;;;;;;;35485:22;;:50;;;;:::i;:::-;35473:62;;35562:4;35550:8;:16;35546:285;;35618:4;35607:8;:15;;;;:::i;:::-;35592:10;;35591:32;;;;:::i;:::-;35583:40;;35694:4;35666:13;:25;35680:10;35666:25;;;;;;;;;;;;;;;;:32;;;;:::i;:::-;35638:13;:25;35652:10;35638:25;;;;;;;;;;;;;;;:60;;;;35546:285;;;35739:1;35731:9;;35811:8;35783:13;:25;35797:10;35783:25;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;35755:13;:25;35769:10;35755:25;;;;;;;;;;;;;;;:64;;;;35546:285;35851:19;;;;;;;;;;;35843:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;35943:15;;35931:8;35915:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:43;;35907:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;36033:17;;36021:8;35997:21;36007:10;35997:9;:21::i;:::-;:32;;;;:::i;:::-;:53;;35989:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36117:14;;36105:8;:26;;36097:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;36221:5;36208:9;:18;;36200:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;36265:31;36275:10;36287:8;36265:9;:31::i;:::-;36325:5;36313:9;:17;36309:97;;;36355:10;36347:28;;:47;36388:5;36376:9;:17;;;;:::i;:::-;36347:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;36309:97;35441:972;;1513:1:::1;1828:7;:22;;;;35327:1086:::0;:::o;37340:110::-;607:13;:11;:13::i;:::-;37438:4:::1;37413:22;:29;;;;37340:110:::0;:::o;18579:234::-;18726:8;18674:18;:39;18693:19;:17;:19::i;:::-;18674:39;;;;;;;;;;;;;;;:49;18714:8;18674:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;18786:8;18750:55;;18765:19;:17;:19::i;:::-;18750:55;;;18796:8;18750:55;;;;;;:::i;:::-;;;;;;;;18579:234;;:::o;36419:110::-;607:13;:11;:13::i;:::-;36502:19:::1;;;;;;;;;;;36501:20;36479:19;;:42;;;;;;;;;;;;;;;;;;36419:110::o:0;34220:20::-;;;;;;;;;;;;;:::o;38073:250::-;31137:1;30348:42;31091:43;;;:47;31087:225;;;30348:42;31160:40;;;31209:4;31216:10;31160:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31155:146;;31274:10;31255:30;;;;;;;;;;;:::i;:::-;;;;;;;;31155:146;31087:225;38268:47:::1;38291:4;38297:2;38301:7;38310:4;38268:22;:47::i;:::-;38073:250:::0;;;;:::o;34389:36::-;;;;:::o;37573:98::-;607:13;:11;:13::i;:::-;37659:4:::1;37642:14;:21;;;;37573:98:::0;:::o;38331:341::-;38453:13;38488:8;;;;;;;;;;;38484:181;;;38561:8;38571:26;38588:8;38571:16;:26::i;:::-;38544:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38513:86;;;;38484:181;38639:14;38632:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38331:341;;;;:::o;34429:31::-;;;;:::o;34350:35::-;;;;:::o;34279:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34995:324::-;35048:4;35064:10;35085:9;35122:13;:25;35136:10;35122:25;;;;;;;;;;;;;;;;35097:22;;:50;;;;:::i;:::-;35085:62;;35174:4;35162:8;:16;35158:131;;35230:4;35219:8;:15;;;;:::i;:::-;35204:10;;35203:32;;;;:::i;:::-;35195:40;;35158:131;;;35276:1;35268:9;;35158:131;35306:5;35299:12;;;;34995:324;;;:::o;36893:97::-;36937:13;36970:12;36963:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36893:97;:::o;18821:164::-;18918:4;18942:18;:25;18961:5;18942:25;;;;;;;;;;;;;;;:35;18968:8;18942:35;;;;;;;;;;;;;;;;;;;;;;;;;18935:42;;18821:164;;;;:::o;996:201::-;607:13;:11;:13::i;:::-;1105:1:::1;1085:22;;:8;:22;;::::0;1077:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1161:28;1180:8;1161:18;:28::i;:::-;996:201:::0;:::o;37458:107::-;607:13;:11;:13::i;:::-;37553:4:::1;37533:17;:24;;;;37458:107:::0;:::o;37232:100::-;607:13;:11;:13::i;:::-;37315:9:::1;37302:10;:22;;;;37232:100:::0;:::o;18993:282::-;19058:4;19114:7;19095:15;:13;:15::i;:::-;:26;;:66;;;;;19148:13;;19138:7;:23;19095:66;:153;;;;;19247:1;11535:8;19199:17;:26;19217:7;19199:26;;;;;;;;;;;;:44;:49;19095:153;19075:173;;18993:282;;;:::o;29373:105::-;29433:7;29460:10;29453:17;;29373:105;:::o;12677:92::-;12733:7;12677:92;:::o;20088:1651::-;20230:27;20260;20279:7;20260:18;:27::i;:::-;20230:57;;20345:4;20304:45;;20320:19;20304:45;;;20300:86;;20358:28;;;;;;;;;;;;;;20300:86;20400:27;20429:23;20456:35;20483:7;20456:26;:35::i;:::-;20399:92;;;;20509:68;20534:15;20551:4;20557:19;:17;:19::i;:::-;20509:24;:68::i;:::-;20504:180;;20597:43;20614:4;20620:19;:17;:19::i;:::-;20597:16;:43::i;:::-;20592:92;;20649:35;;;;;;;;;;;;;;20592:92;20504:180;20715:1;20701:16;;:2;:16;;;20697:52;;20726:23;;;;;;;;;;;;;;20697:52;20762:43;20784:4;20790:2;20794:7;20803:1;20762:21;:43::i;:::-;20845:15;20842:85;;;20910:1;20889:19;20882:30;20842:85;20979:18;:24;20998:4;20979:24;;;;;;;;;;;;;;;;20977:26;;;;;;;;;;;;21021:18;:22;21040:2;21021:22;;;;;;;;;;;;;;;;21019:24;;;;;;;;;;;21090:146;21127:2;21176:45;21191:4;21197:2;21201:19;21176:14;:45::i;:::-;11669:8;21148:73;21090:18;:146::i;:::-;21061:17;:26;21079:7;21061:26;;;;;;;;;;;:175;;;;21308:1;11669:8;21257:19;:47;:52;21253:370;;21330:19;21362:1;21352:7;:11;21330:33;;21422:1;21388:17;:30;21406:11;21388:30;;;;;;;;;;;;:35;21384:224;;21469:13;;21454:11;:28;21450:139;;21546:19;21513:17;:30;21531:11;21513:30;;;;;;;;;;;:52;;;;21450:139;21384:224;21311:312;21253:370;21670:7;21666:2;21651:27;;21660:4;21651:27;;;;;;;;;;;;21689:42;21710:4;21716:2;21720:7;21729:1;21689:20;:42::i;:::-;20219:1520;;;20088:1651;;;:::o;743:132::-;818:12;:10;:12::i;:::-;807:23;;:7;:5;:7::i;:::-;:23;;;799:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;743:132::o;26526:112::-;26603:27;26613:2;26617:8;26603:27;;;;;;;;;;;;:9;:27::i;:::-;26526:112;;:::o;21747:193::-;21893:39;21910:4;21916:2;21920:7;21893:39;;;;;;;;;;;;:16;:39::i;:::-;21747:193;;;:::o;26743:1679::-;26823:27;26853;26872:7;26853:18;:27::i;:::-;26823:57;;26893:12;26924:19;26893:52;;26959:27;26988:23;27015:35;27042:7;27015:26;:35::i;:::-;26958:92;;;;27067:13;27063:244;;;27116:68;27141:15;27158:4;27164:19;:17;:19::i;:::-;27116:24;:68::i;:::-;27111:184;;27208:43;27225:4;27231:19;:17;:19::i;:::-;27208:16;:43::i;:::-;27203:92;;27260:35;;;;;;;;;;;;;;27203:92;27111:184;27063:244;27319:51;27341:4;27355:1;27359:7;27368:1;27319:21;:51::i;:::-;27410:15;27407:101;;;27491:1;27470:19;27463:30;27407:101;27617:1;11292:3;27587:1;:26;;27586:32;27558:18;:24;27577:4;27558:24;;;;;;;;;;;;;;;;:60;;;;;;;;;;;27664:176;27701:4;27772:53;27787:4;27801:1;27805:19;27772:14;:53::i;:::-;11669:8;11535;27725:43;27724:101;27664:18;:176::i;:::-;27635:17;:26;27653:7;27635:26;;;;;;;;;;;:205;;;;27912:1;11669:8;27861:19;:47;:52;27857:370;;27934:19;27966:1;27956:7;:11;27934:33;;28026:1;27992:17;:30;28010:11;27992:30;;;;;;;;;;;;:35;27988:224;;28073:13;;28058:11;:28;28054:139;;28150:19;28117:17;:30;28135:11;28117:30;;;;;;;;;;;:52;;;;28054:139;27988:224;27915:312;27857:370;28282:7;28278:1;28255:35;;28264:4;28255:35;;;;;;;;;;;;28301:50;28322:4;28336:1;28340:7;28349:1;28301:20;:50::i;:::-;28389:12;;:14;;;;;;;;;;;;;26812:1610;;;;26743:1679;;:::o;16132:633::-;16199:7;16219:12;16234:7;16219:22;;16302:4;16283:15;:13;:15::i;:::-;:23;16279:419;;16336:13;;16329:4;:20;16325:373;;;16374:14;16391:17;:23;16409:4;16391:23;;;;;;;;;;;;16374:40;;16471:1;11535:8;16443:6;:24;:29;16439:240;;16503:113;16520:1;16510:6;:11;16503:113;;16563:17;:25;16581:6;;;;;;;16563:25;;;;;;;;;;;;16554:34;;16503:113;;;16649:6;16642:13;;;;;;16439:240;16351:347;16325:373;16279:419;16726:31;;;;;;;;;;;;;;16132:633;;;;:::o;1205:191::-;1279:16;1298:6;;;;;;;;;;;1279:25;;1324:8;1315:6;;:17;;;;;;;;;;;;;;;;;;1379:8;1348:40;;1369:8;1348:40;;;;;;;;;;;;1268:128;1205:191;:::o;21948:407::-;22123:31;22136:4;22142:2;22146:7;22123:12;:31::i;:::-;22187:1;22169:2;:14;;;:19;22165:183;;22208:56;22239:4;22245:2;22249:7;22258:5;22208:30;:56::i;:::-;22203:145;;22292:40;;;;;;;;;;;;;;22203:145;22165:183;21948:407;;;;:::o;2032:534::-;2088:13;2129:1;2120:5;:10;2116:53;;2147:10;;;;;;;;;;;;;;;;;;;;;2116:53;2179:12;2194:5;2179:20;;2210:14;2235:78;2250:1;2242:4;:9;2235:78;;2268:8;;;;;:::i;:::-;;;;2299:2;2291:10;;;;;:::i;:::-;;;2235:78;;;2323:19;2355:6;2345:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2323:39;;2373:154;2389:1;2380:5;:10;2373:154;;2417:1;2407:11;;;;;:::i;:::-;;;2484:2;2476:5;:10;;;;:::i;:::-;2463:2;:24;;;;:::i;:::-;2450:39;;2433:6;2440;2433:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2513:2;2504:11;;;;;:::i;:::-;;;2373:154;;;2551:6;2537:21;;;;;2032:534;;;;:::o;19688:392::-;19790:27;19819:23;19860:38;19901:15;:24;19917:7;19901:24;;;;;;;;;;;19860:65;;19985:18;19962:41;;20042:19;20036:26;20017:45;;19947:126;19688:392;;;:::o;19283:397::-;19432:11;19502:16;19495:5;19491:28;19482:37;;19563:16;19552:9;19548:32;19535:45;;19645:15;19634:9;19631:30;19623:5;19612:9;19609:20;19606:56;19596:66;;19283:397;;;;;:::o;22363:159::-;;;;;:::o;29054:311::-;29189:7;29209:16;11732:3;29235:19;:41;;29209:68;;11732:3;29303:31;29314:4;29320:2;29324:9;29303:10;:31::i;:::-;29295:40;;:62;;29288:69;;;29054:311;;;;;:::o;17147:450::-;17227:14;17395:16;17388:5;17384:28;17375:37;;17572:5;17558:11;17533:23;17529:41;17526:52;17519:5;17516:63;17506:73;;17147:450;;;;:::o;22530:158::-;;;;;:::o;96:98::-;149:7;176:10;169:17;;96:98;:::o;25829:689::-;25960:19;25966:2;25970:8;25960:5;:19::i;:::-;26039:1;26021:2;:14;;;:19;26017:483;;26061:11;26075:13;;26061:27;;26107:13;26129:8;26123:3;:14;26107:30;;26156:233;26187:62;26226:1;26230:2;26234:7;;;;;;26243:5;26187:30;:62::i;:::-;26182:167;;26285:40;;;;;;;;;;;;;;26182:167;26384:3;26376:5;:11;26156:233;;26471:3;26454:13;;:20;26450:34;;26476:8;;;26450:34;26042:458;;26017:483;25829:689;;;:::o;22696:716::-;22859:4;22905:2;22880:45;;;22926:19;:17;:19::i;:::-;22947:4;22953:7;22962:5;22880:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;22876:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23180:1;23163:6;:13;:18;23159:235;;23209:40;;;;;;;;;;;;;;23159:235;23352:6;23346:13;23337:6;23333:2;23329:15;23322:38;22876:529;23049:54;;;23039:64;;;:6;:64;;;;23032:71;;;22696:716;;;;;;:::o;28899:147::-;29036:6;28899:147;;;;;:::o;23420:1442::-;23493:20;23516:13;;23493:36;;23556:1;23544:8;:13;23540:44;;23566:18;;;;;;;;;;;;;;23540:44;23597:61;23627:1;23631:2;23635:12;23649:8;23597:21;:61::i;:::-;23767:1;11232:2;23737:1;:26;;23736:32;23724:8;:45;23698:18;:22;23717:2;23698:22;;;;;;;;;;;;;;;;:71;;;;;;;;;;;23820:139;23857:2;23911:33;23934:1;23938:2;23942:1;23911:14;:33::i;:::-;23878:30;23899:8;23878:20;:30::i;:::-;:66;23820:18;:139::i;:::-;23786:17;:31;23804:12;23786:31;;;;;;;;;;;:173;;;;23976:16;24007:11;24036:8;24021:12;:23;24007:37;;24111:16;24107:2;24103:25;24091:37;;24331:12;24299:8;24274:1;24225:25;24200:1;24175;24148:215;24443:1;24429:12;24425:20;24383:279;24484:3;24475:7;24472:16;24383:279;;24635:7;24625:8;24622:1;24595:25;24592:1;24589;24584:59;24537:1;24528:7;24524:15;24513:26;;24383:279;;;24387:77;24707:1;24695:8;:13;24691:45;;24717:19;;;;;;;;;;;;;;24691:45;24769:3;24753:13;:19;;;;23671:1113;;24794:60;24823:1;24827:2;24831:12;24845:8;24794:20;:60::i;:::-;23482:1380;23420:1442;;:::o;17605:324::-;17675:14;17908:1;17898:8;17895:15;17869:24;17865:46;17855:56;;17605: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:474::-;6270:6;6278;6327:2;6315:9;6306:7;6302:23;6298:32;6295:119;;;6333:79;;:::i;:::-;6295:119;6453:1;6478:53;6523:7;6514:6;6503:9;6499:22;6478:53;:::i;:::-;6468:63;;6424:117;6580:2;6606:53;6651:7;6642:6;6631:9;6627:22;6606:53;:::i;:::-;6596:63;;6551:118;6202:474;;;;;:::o;6682:117::-;6791:1;6788;6781:12;6805:117;6914:1;6911;6904:12;6928:180;6976:77;6973:1;6966:88;7073:4;7070:1;7063:15;7097:4;7094:1;7087:15;7114:281;7197:27;7219:4;7197:27;:::i;:::-;7189:6;7185:40;7327:6;7315:10;7312:22;7291:18;7279:10;7276:34;7273:62;7270:88;;;7338:18;;:::i;:::-;7270:88;7378:10;7374:2;7367:22;7157:238;7114:281;;:::o;7401:129::-;7435:6;7462:20;;:::i;:::-;7452:30;;7491:33;7519:4;7511:6;7491:33;:::i;:::-;7401:129;;;:::o;7536:308::-;7598:4;7688:18;7680:6;7677:30;7674:56;;;7710:18;;:::i;:::-;7674:56;7748:29;7770:6;7748:29;:::i;:::-;7740:37;;7832:4;7826;7822:15;7814:23;;7536:308;;;:::o;7850:146::-;7947:6;7942:3;7937;7924:30;7988:1;7979:6;7974:3;7970:16;7963:27;7850:146;;;:::o;8002:425::-;8080:5;8105:66;8121:49;8163:6;8121:49;:::i;:::-;8105:66;:::i;:::-;8096:75;;8194:6;8187:5;8180:21;8232:4;8225:5;8221:16;8270:3;8261:6;8256:3;8252:16;8249:25;8246:112;;;8277:79;;:::i;:::-;8246:112;8367:54;8414:6;8409:3;8404;8367:54;:::i;:::-;8086:341;8002:425;;;;;:::o;8447:340::-;8503:5;8552:3;8545:4;8537:6;8533:17;8529:27;8519:122;;8560:79;;:::i;:::-;8519:122;8677:6;8664:20;8702:79;8777:3;8769:6;8762:4;8754:6;8750:17;8702:79;:::i;:::-;8693:88;;8509:278;8447:340;;;;:::o;8793:509::-;8862:6;8911:2;8899:9;8890:7;8886:23;8882:32;8879:119;;;8917:79;;:::i;:::-;8879:119;9065:1;9054:9;9050:17;9037:31;9095:18;9087:6;9084:30;9081:117;;;9117:79;;:::i;:::-;9081:117;9222:63;9277:7;9268:6;9257:9;9253:22;9222:63;:::i;:::-;9212:73;;9008:287;8793:509;;;;:::o;9308:116::-;9378:21;9393:5;9378:21;:::i;:::-;9371:5;9368:32;9358:60;;9414:1;9411;9404:12;9358:60;9308:116;:::o;9430:133::-;9473:5;9511:6;9498:20;9489:29;;9527:30;9551:5;9527:30;:::i;:::-;9430:133;;;;:::o;9569:648::-;9644:6;9652;9701:2;9689:9;9680:7;9676:23;9672:32;9669:119;;;9707:79;;:::i;:::-;9669:119;9827:1;9852:50;9894:7;9885:6;9874:9;9870:22;9852:50;:::i;:::-;9842:60;;9798:114;9979:2;9968:9;9964:18;9951:32;10010:18;10002:6;9999:30;9996:117;;;10032:79;;:::i;:::-;9996:117;10137:63;10192:7;10183:6;10172:9;10168:22;10137:63;:::i;:::-;10127:73;;9922:288;9569:648;;;;;:::o;10223:468::-;10288:6;10296;10345:2;10333:9;10324:7;10320:23;10316:32;10313:119;;;10351:79;;:::i;:::-;10313:119;10471:1;10496:53;10541:7;10532:6;10521:9;10517:22;10496:53;:::i;:::-;10486:63;;10442:117;10598:2;10624:50;10666:7;10657:6;10646:9;10642:22;10624:50;:::i;:::-;10614:60;;10569:115;10223:468;;;;;:::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::-;17632:77;17629:1;17622:88;17729:4;17726:1;17719:15;17753:4;17750:1;17743:15;17770:191;17810:3;17829:20;17847:1;17829:20;:::i;:::-;17824:25;;17863:20;17881:1;17863:20;:::i;:::-;17858:25;;17906:1;17903;17899:9;17892:16;;17927:3;17924:1;17921:10;17918:36;;;17934:18;;:::i;:::-;17918:36;17770:191;;;;:::o;17967:174::-;18107:26;18103:1;18095:6;18091:14;18084:50;17967:174;:::o;18147:366::-;18289:3;18310:67;18374:2;18369:3;18310:67;:::i;:::-;18303:74;;18386:93;18475:3;18386:93;:::i;:::-;18504:2;18499:3;18495:12;18488:19;;18147:366;;;:::o;18519:419::-;18685:4;18723:2;18712:9;18708:18;18700:26;;18772:9;18766:4;18762:20;18758:1;18747:9;18743:17;18736:47;18800:131;18926:4;18800:131;:::i;:::-;18792:139;;18519:419;;;:::o;18944:141::-;18993:4;19016:3;19008:11;;19039:3;19036:1;19029:14;19073:4;19070:1;19060:18;19052:26;;18944:141;;;:::o;19091:93::-;19128:6;19175:2;19170;19163:5;19159:14;19155:23;19145:33;;19091:93;;;:::o;19190:107::-;19234:8;19284:5;19278:4;19274:16;19253:37;;19190:107;;;;:::o;19303:393::-;19372:6;19422:1;19410:10;19406:18;19445:97;19475:66;19464:9;19445:97;:::i;:::-;19563:39;19593:8;19582:9;19563:39;:::i;:::-;19551:51;;19635:4;19631:9;19624:5;19620:21;19611:30;;19684:4;19674:8;19670:19;19663:5;19660:30;19650:40;;19379:317;;19303:393;;;;;:::o;19702:60::-;19730:3;19751:5;19744:12;;19702:60;;;:::o;19768:142::-;19818:9;19851:53;19869:34;19878:24;19896:5;19878:24;:::i;:::-;19869:34;:::i;:::-;19851:53;:::i;:::-;19838:66;;19768:142;;;:::o;19916:75::-;19959:3;19980:5;19973:12;;19916:75;;;:::o;19997:269::-;20107:39;20138:7;20107:39;:::i;:::-;20168:91;20217:41;20241:16;20217:41;:::i;:::-;20209:6;20202:4;20196:11;20168:91;:::i;:::-;20162:4;20155:105;20073:193;19997:269;;;:::o;20272:73::-;20317:3;20272:73;:::o;20351:189::-;20428:32;;:::i;:::-;20469:65;20527:6;20519;20513:4;20469:65;:::i;:::-;20404:136;20351:189;;:::o;20546:186::-;20606:120;20623:3;20616:5;20613:14;20606:120;;;20677:39;20714:1;20707:5;20677:39;:::i;:::-;20650:1;20643:5;20639:13;20630:22;;20606:120;;;20546:186;;:::o;20738:543::-;20839:2;20834:3;20831:11;20828:446;;;20873:38;20905:5;20873:38;:::i;:::-;20957:29;20975:10;20957:29;:::i;:::-;20947:8;20943:44;21140:2;21128:10;21125:18;21122:49;;;21161:8;21146:23;;21122:49;21184:80;21240:22;21258:3;21240:22;:::i;:::-;21230:8;21226:37;21213:11;21184:80;:::i;:::-;20843:431;;20828:446;20738:543;;;:::o;21287:117::-;21341:8;21391:5;21385:4;21381:16;21360:37;;21287:117;;;;:::o;21410:169::-;21454:6;21487:51;21535:1;21531:6;21523:5;21520:1;21516:13;21487:51;:::i;:::-;21483:56;21568:4;21562;21558:15;21548:25;;21461:118;21410:169;;;;:::o;21584:295::-;21660:4;21806:29;21831:3;21825:4;21806:29;:::i;:::-;21798:37;;21868:3;21865:1;21861:11;21855:4;21852:21;21844:29;;21584:295;;;;:::o;21884:1395::-;22001:37;22034:3;22001:37;:::i;:::-;22103:18;22095:6;22092:30;22089:56;;;22125:18;;:::i;:::-;22089:56;22169:38;22201:4;22195:11;22169:38;:::i;:::-;22254:67;22314:6;22306;22300:4;22254:67;:::i;:::-;22348:1;22372:4;22359:17;;22404:2;22396:6;22393:14;22421:1;22416:618;;;;23078:1;23095:6;23092:77;;;23144:9;23139:3;23135:19;23129:26;23120:35;;23092:77;23195:67;23255:6;23248:5;23195:67;:::i;:::-;23189:4;23182:81;23051:222;22386:887;;22416:618;22468:4;22464:9;22456:6;22452:22;22502:37;22534:4;22502:37;:::i;:::-;22561:1;22575:208;22589:7;22586:1;22583:14;22575:208;;;22668:9;22663:3;22659:19;22653:26;22645:6;22638:42;22719:1;22711:6;22707:14;22697:24;;22766:2;22755:9;22751:18;22738:31;;22612:4;22609:1;22605:12;22600:17;;22575:208;;;22811:6;22802:7;22799:19;22796:179;;;22869:9;22864:3;22860:19;22854:26;22912:48;22954:4;22946:6;22942:17;22931:9;22912:48;:::i;:::-;22904:6;22897:64;22819:156;22796:179;23021:1;23017;23009:6;23005:14;23001:22;22995:4;22988:36;22423:611;;;22386:887;;21976:1303;;;21884:1395;;:::o;23285:180::-;23425:32;23421:1;23413:6;23409:14;23402:56;23285:180;:::o;23471:366::-;23613:3;23634:67;23698:2;23693:3;23634:67;:::i;:::-;23627:74;;23710:93;23799:3;23710:93;:::i;:::-;23828:2;23823:3;23819:12;23812:19;;23471:366;;;:::o;23843:419::-;24009:4;24047:2;24036:9;24032:18;24024:26;;24096:9;24090:4;24086:20;24082:1;24071:9;24067:17;24060:47;24124:131;24250:4;24124:131;:::i;:::-;24116:139;;23843:419;;;:::o;24268:194::-;24308:4;24328:20;24346:1;24328:20;:::i;:::-;24323:25;;24362:20;24380:1;24362:20;:::i;:::-;24357:25;;24406:1;24403;24399:9;24391:17;;24430:1;24424:4;24421:11;24418:37;;;24435:18;;:::i;:::-;24418:37;24268:194;;;;:::o;24468:410::-;24508:7;24531:20;24549:1;24531:20;:::i;:::-;24526:25;;24565:20;24583:1;24565:20;:::i;:::-;24560:25;;24620:1;24617;24613:9;24642:30;24660:11;24642:30;:::i;:::-;24631:41;;24821:1;24812:7;24808:15;24805:1;24802:22;24782:1;24775:9;24755:83;24732:139;;24851:18;;:::i;:::-;24732:139;24516:362;24468:410;;;;:::o;24884:171::-;25024:23;25020:1;25012:6;25008:14;25001:47;24884:171;:::o;25061:366::-;25203:3;25224:67;25288:2;25283:3;25224:67;:::i;:::-;25217:74;;25300:93;25389:3;25300:93;:::i;:::-;25418:2;25413:3;25409:12;25402:19;;25061:366;;;:::o;25433:419::-;25599:4;25637:2;25626:9;25622:18;25614:26;;25686:9;25680:4;25676:20;25672:1;25661:9;25657:17;25650:47;25714:131;25840:4;25714:131;:::i;:::-;25706:139;;25433:419;;;:::o;25858:163::-;25998:15;25994:1;25986:6;25982:14;25975:39;25858:163;:::o;26027:366::-;26169:3;26190:67;26254:2;26249:3;26190:67;:::i;:::-;26183:74;;26266:93;26355:3;26266:93;:::i;:::-;26384:2;26379:3;26375:12;26368:19;;26027:366;;;:::o;26399:419::-;26565:4;26603:2;26592:9;26588:18;26580:26;;26652:9;26646:4;26642:20;26638:1;26627:9;26623:17;26616:47;26680:131;26806:4;26680:131;:::i;:::-;26672:139;;26399:419;;;:::o;26824:179::-;26964:31;26960:1;26952:6;26948:14;26941:55;26824:179;:::o;27009:366::-;27151:3;27172:67;27236:2;27231:3;27172:67;:::i;:::-;27165:74;;27248:93;27337:3;27248:93;:::i;:::-;27366:2;27361:3;27357:12;27350:19;;27009:366;;;:::o;27381:419::-;27547:4;27585:2;27574:9;27570:18;27562:26;;27634:9;27628:4;27624:20;27620:1;27609:9;27605:17;27598:47;27662:131;27788:4;27662:131;:::i;:::-;27654:139;;27381:419;;;:::o;27806:240::-;27946:34;27942:1;27934:6;27930:14;27923:58;28015:23;28010:2;28002:6;27998:15;27991:48;27806:240;:::o;28052:366::-;28194:3;28215:67;28279:2;28274:3;28215:67;:::i;:::-;28208:74;;28291:93;28380:3;28291:93;:::i;:::-;28409:2;28404:3;28400:12;28393:19;;28052:366;;;:::o;28424:419::-;28590:4;28628:2;28617:9;28613:18;28605:26;;28677:9;28671:4;28667:20;28663:1;28652:9;28648:17;28641:47;28705:131;28831:4;28705:131;:::i;:::-;28697:139;;28424:419;;;:::o;28849:171::-;28989:23;28985:1;28977:6;28973:14;28966:47;28849:171;:::o;29026:366::-;29168:3;29189:67;29253:2;29248:3;29189:67;:::i;:::-;29182:74;;29265:93;29354:3;29265:93;:::i;:::-;29383:2;29378:3;29374:12;29367:19;;29026:366;;;:::o;29398:419::-;29564:4;29602:2;29591:9;29587:18;29579:26;;29651:9;29645:4;29641:20;29637:1;29626:9;29622:17;29615:47;29679:131;29805:4;29679:131;:::i;:::-;29671:139;;29398:419;;;:::o;29823:148::-;29925:11;29962:3;29947:18;;29823:148;;;;:::o;30001:874::-;30104:3;30141:5;30135:12;30170:36;30196:9;30170:36;:::i;:::-;30222:89;30304:6;30299:3;30222:89;:::i;:::-;30215:96;;30342:1;30331:9;30327:17;30358:1;30353:166;;;;30533:1;30528:341;;;;30320:549;;30353:166;30437:4;30433:9;30422;30418:25;30413:3;30406:38;30499:6;30492:14;30485:22;30477:6;30473:35;30468:3;30464:45;30457:52;;30353:166;;30528:341;30595:38;30627:5;30595:38;:::i;:::-;30655:1;30669:154;30683:6;30680:1;30677:13;30669:154;;;30757:7;30751:14;30747:1;30742:3;30738:11;30731:35;30807:1;30798:7;30794:15;30783:26;;30705:4;30702:1;30698:12;30693:17;;30669:154;;;30852:6;30847:3;30843:16;30836:23;;30535:334;;30320:549;;30108:767;;30001:874;;;;:::o;30881:390::-;30987:3;31015:39;31048:5;31015:39;:::i;:::-;31070:89;31152:6;31147:3;31070:89;:::i;:::-;31063:96;;31168:65;31226:6;31221:3;31214:4;31207:5;31203:16;31168:65;:::i;:::-;31258:6;31253:3;31249:16;31242:23;;30991:280;30881:390;;;;:::o;31277:429::-;31454:3;31476:92;31564:3;31555:6;31476:92;:::i;:::-;31469:99;;31585:95;31676:3;31667:6;31585:95;:::i;:::-;31578:102;;31697:3;31690:10;;31277:429;;;;;:::o;31712:225::-;31852:34;31848:1;31840:6;31836:14;31829:58;31921:8;31916:2;31908:6;31904:15;31897:33;31712:225;:::o;31943:366::-;32085:3;32106:67;32170:2;32165:3;32106:67;:::i;:::-;32099:74;;32182:93;32271:3;32182:93;:::i;:::-;32300:2;32295:3;32291:12;32284:19;;31943:366;;;:::o;32315:419::-;32481:4;32519:2;32508:9;32504:18;32496:26;;32568:9;32562:4;32558:20;32554:1;32543:9;32539:17;32532:47;32596:131;32722:4;32596:131;:::i;:::-;32588:139;;32315:419;;;:::o;32740:182::-;32880:34;32876:1;32868:6;32864:14;32857:58;32740:182;:::o;32928:366::-;33070:3;33091:67;33155:2;33150:3;33091:67;:::i;:::-;33084:74;;33167:93;33256:3;33167:93;:::i;:::-;33285:2;33280:3;33276:12;33269:19;;32928:366;;;:::o;33300:419::-;33466:4;33504:2;33493:9;33489:18;33481:26;;33553:9;33547:4;33543:20;33539:1;33528:9;33524:17;33517:47;33581:131;33707:4;33581:131;:::i;:::-;33573:139;;33300:419;;;:::o;33725:233::-;33764:3;33787:24;33805:5;33787:24;:::i;:::-;33778:33;;33833:66;33826:5;33823:77;33820:103;;33903:18;;:::i;:::-;33820:103;33950:1;33943:5;33939:13;33932:20;;33725:233;;;:::o;33964:180::-;34012:77;34009:1;34002:88;34109:4;34106:1;34099:15;34133:4;34130:1;34123:15;34150:185;34190:1;34207:20;34225:1;34207:20;:::i;:::-;34202:25;;34241:20;34259:1;34241:20;:::i;:::-;34236:25;;34280:1;34270:35;;34285:18;;:::i;:::-;34270:35;34327:1;34324;34320:9;34315:14;;34150:185;;;;:::o;34341:176::-;34373:1;34390:20;34408:1;34390:20;:::i;:::-;34385:25;;34424:20;34442:1;34424:20;:::i;:::-;34419:25;;34463:1;34453:35;;34468:18;;:::i;:::-;34453:35;34509:1;34506;34502:9;34497:14;;34341:176;;;;:::o;34523:180::-;34571:77;34568:1;34561:88;34668:4;34665:1;34658:15;34692:4;34689:1;34682:15;34709:98;34760:6;34794:5;34788:12;34778:22;;34709:98;;;:::o;34813:168::-;34896:11;34930:6;34925:3;34918:19;34970:4;34965:3;34961:14;34946:29;;34813:168;;;;:::o;34987:373::-;35073:3;35101:38;35133:5;35101:38;:::i;:::-;35155:70;35218:6;35213:3;35155:70;:::i;:::-;35148:77;;35234:65;35292:6;35287:3;35280:4;35273:5;35269:16;35234:65;:::i;:::-;35324:29;35346:6;35324:29;:::i;:::-;35319:3;35315:39;35308:46;;35077:283;34987:373;;;;:::o;35366:640::-;35561:4;35599:3;35588:9;35584:19;35576:27;;35613:71;35681:1;35670:9;35666:17;35657:6;35613:71;:::i;:::-;35694:72;35762:2;35751:9;35747:18;35738:6;35694:72;:::i;:::-;35776;35844:2;35833:9;35829:18;35820:6;35776:72;:::i;:::-;35895:9;35889:4;35885:20;35880:2;35869:9;35865:18;35858:48;35923:76;35994:4;35985:6;35923:76;:::i;:::-;35915:84;;35366:640;;;;;;;:::o;36012:141::-;36068:5;36099:6;36093:13;36084:22;;36115:32;36141:5;36115:32;:::i;:::-;36012:141;;;;:::o;36159:349::-;36228:6;36277:2;36265:9;36256:7;36252:23;36248:32;36245:119;;;36283:79;;:::i;:::-;36245:119;36403:1;36428:63;36483:7;36474:6;36463:9;36459:22;36428:63;:::i;:::-;36418:73;;36374:127;36159:349;;;;:::o

Swarm Source

ipfs://2d2a5d9e5af494f5b02b07144776155a62ed519ee8e8a756f1a60f5e47f12c04
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.