ETH Price: $3,589.34 (+4.85%)

Token

BOB IS HERE (BOB)
 

Overview

Max Total Supply

2,933 BOB

Holders

823

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
3 BOB
0x288235a308282d99d474e16f55cd24616b6e3a48
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
BobIsHere

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// 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 {
owner := and(owner, _BITMASK_ADDRESS)
result := or(owner, or(shl(_BITPOS_START_TIMESTAMP, timestamp()), flags))
        }
    }

    function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) {

        assembly {

            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 && 
            _packedOwnerships[tokenId] & _BITMASK_BURNED == 0;
    }

    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 BobIsHere is Ownable, ERC721A, ReentrancyGuard, ERC721ABurnable, DefaultOperatorFilterer{
string public CONTRACT_URI = "";
mapping(address => uint) public userHasMinted;
bool public REVEALED;
string public UNREVEALED_URI = "";
string public BASE_URI = "";
bool public isPublicMintEnabled = false;
uint public COLLECTION_SIZE = 10000; 
uint public MINT_PRICE = 0.003 ether; 
uint public MAX_BATCH_SIZE = 25;
uint public SUPPLY_PER_WALLET = 25;
uint public FREE_SUPPLY_PER_WALLET = 3;
constructor() ERC721A("BOB IS HERE", "BOB") {}

    function MintTo (uint256 quantity, address receiver) public onlyOwner {
        require(
            totalSupply() + quantity <= COLLECTION_SIZE,
            "No 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, "Not Live yet!");
require(totalSupply() + quantity <= COLLECTION_SIZE, "No more in Stock");
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 eth");

        _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 SetCollectionUrI(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 SetSupply(uint256 _new) external onlyOwner {
        COLLECTION_SIZE = _new;
    }

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

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

    function SetSupplyPerWallet(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":[],"name":"FREE_SUPPLY_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BATCH_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"MintTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"REVEALED","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_revealed","type":"bool"},{"internalType":"string","name":"_baseURI","type":"string"}],"name":"SetCollectionUrI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"SetFreePerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"SetMaxBatchSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"SetPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"SetSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"SetSupplyPerWallet","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"}]

608060405260405180602001604052806000815250600a9081620000249190620006df565b5060405180602001604052806000815250600d9081620000459190620006df565b5060405180602001604052806000815250600e9081620000669190620006df565b506000600f60006101000a81548160ff021916908315150217905550612710601055660aa87bee538000601155601960125560196013556003601455348015620000af57600080fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280600b81526020017f424f4220495320484552450000000000000000000000000000000000000000008152506040518060400160405280600381526020017f424f42000000000000000000000000000000000000000000000000000000000081525062000153620001476200039460201b60201c565b6200039c60201b60201c565b8160039081620001649190620006df565b508060049081620001769190620006df565b50620001876200046060201b60201c565b6001819055505050600160098190555060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156200038c57801562000252576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b8152600401620002189291906200080b565b600060405180830381600087803b1580156200023357600080fd5b505af115801562000248573d6000803e3d6000fd5b505050506200038b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146200030c576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b8152600401620002d29291906200080b565b600060405180830381600087803b158015620002ed57600080fd5b505af115801562000302573d6000803e3d6000fd5b505050506200038a565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b815260040162000355919062000838565b600060405180830381600087803b1580156200037057600080fd5b505af115801562000385573d6000803e3d6000fd5b505050505b5b5b505062000855565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004e757607f821691505b602082108103620004fd57620004fc6200049f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000528565b62000573868362000528565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005c0620005ba620005b4846200058b565b62000595565b6200058b565b9050919050565b6000819050919050565b620005dc836200059f565b620005f4620005eb82620005c7565b84845462000535565b825550505050565b600090565b6200060b620005fc565b62000618818484620005d1565b505050565b5b8181101562000640576200063460008262000601565b6001810190506200061e565b5050565b601f8211156200068f57620006598162000503565b620006648462000518565b8101602085101562000674578190505b6200068c620006838562000518565b8301826200061d565b50505b505050565b600082821c905092915050565b6000620006b46000198460080262000694565b1980831691505092915050565b6000620006cf8383620006a1565b9150826002028217905092915050565b620006ea8262000465565b67ffffffffffffffff81111562000706576200070562000470565b5b620007128254620004ce565b6200071f82828562000644565b600060209050601f83116001811462000757576000841562000742578287015190505b6200074e8582620006c1565b865550620007be565b601f198416620007678662000503565b60005b8281101562000791578489015182556001820191506020850194506020810190506200076a565b86831015620007b15784890151620007ad601f891682620006a1565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007f382620007c6565b9050919050565b6200080581620007e6565b82525050565b6000604082019050620008226000830185620007fa565b620008316020830184620007fa565b9392505050565b60006020820190506200084f6000830184620007fa565b92915050565b61402f80620008656000396000f3fe6080604052600436106102515760003560e01c8063715018a611610139578063c87b56dd116100b6578063e8a3d4851161007a578063e8a3d4851461084b578063e985e9c514610876578063ec02c891146108b3578063f1112575146108dc578063f2fde38b14610905578063fcd47d351461092e57610251565b8063c87b56dd14610750578063cfdbf2541461078d578063d8258d95146107b8578063dbddb26a146107e3578063e75722301461080e57610251565b8063a4cdd719116100fd578063a4cdd7191461069e578063a76a9587146106b5578063b88d4fde146106e0578063c002d23d146106fc578063c144a4ba1461072757610251565b8063715018a6146105ec5780638da5cb5b1461060357806395d89b411461062e578063a0712d6814610659578063a22cb4651461067557610251565b806342842e0e116101d257806356b48d631161019657806356b48d63146104ca57806356b4f673146104f35780635fe755871461051e5780635ff38740146105495780636352211e1461057257806370a08231146105af57610251565b806342842e0e1461040857806342966c681461042457806342c42c0e1461044d5780634f5539c014610476578063507862d11461049f57610251565b80631422374f116102195780631422374f1461034257806318160ddd1461036d5780631d9857781461039857806323b872dd146103d557806324600fc3146103f157610251565b80630116bc2d1461025657806301ffc9a71461028157806306fdde03146102be578063081812fc146102e9578063095ea7b314610326575b600080fd5b34801561026257600080fd5b5061026b610957565b6040516102789190612c96565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190612d1d565b61096a565b6040516102b59190612c96565b60405180910390f35b3480156102ca57600080fd5b506102d36109fc565b6040516102e09190612dda565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190612e32565b610a8e565b60405161031d9190612ea0565b60405180910390f35b610340600480360381019061033b9190612ee7565b610b0d565b005b34801561034e57600080fd5b50610357610c51565b6040516103649190612f36565b60405180910390f35b34801561037957600080fd5b50610382610c57565b60405161038f9190612f36565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190612f51565b610c6e565b6040516103cc9190612f36565b60405180910390f35b6103ef60048036038101906103ea9190612f7e565b610c86565b005b3480156103fd57600080fd5b50610406610d92565b005b610422600480360381019061041d9190612f7e565b610e9e565b005b34801561043057600080fd5b5061044b60048036038101906104469190612e32565b610faa565b005b34801561045957600080fd5b50610474600480360381019061046f9190612fd1565b610fb8565b005b34801561048257600080fd5b5061049d60048036038101906104989190612e32565b611025565b005b3480156104ab57600080fd5b506104b4611037565b6040516104c19190612dda565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec9190613146565b6110c5565b005b3480156104ff57600080fd5b506105086110e0565b6040516105159190612dda565b60405180910390f35b34801561052a57600080fd5b5061053361116e565b6040516105409190612f36565b60405180910390f35b34801561055557600080fd5b50610570600480360381019061056b9190612e32565b611174565b005b34801561057e57600080fd5b5061059960048036038101906105949190612e32565b611186565b6040516105a69190612ea0565b60405180910390f35b3480156105bb57600080fd5b506105d660048036038101906105d19190612f51565b611198565b6040516105e39190612f36565b60405180910390f35b3480156105f857600080fd5b50610601611250565b005b34801561060f57600080fd5b50610618611264565b6040516106259190612ea0565b60405180910390f35b34801561063a57600080fd5b5061064361128d565b6040516106509190612dda565b60405180910390f35b610673600480360381019061066e9190612e32565b61131f565b005b34801561068157600080fd5b5061069c600480360381019061069791906131bb565b61176c565b005b3480156106aa57600080fd5b506106b3611877565b005b3480156106c157600080fd5b506106ca6118ab565b6040516106d79190612c96565b60405180910390f35b6106fa60048036038101906106f5919061329c565b6118be565b005b34801561070857600080fd5b506107116119cc565b60405161071e9190612f36565b60405180910390f35b34801561073357600080fd5b5061074e60048036038101906107499190612e32565b6119d2565b005b34801561075c57600080fd5b5061077760048036038101906107729190612e32565b6119e4565b6040516107849190612dda565b60405180910390f35b34801561079957600080fd5b506107a2611ac0565b6040516107af9190612f36565b60405180910390f35b3480156107c457600080fd5b506107cd611ac6565b6040516107da9190612f36565b60405180910390f35b3480156107ef57600080fd5b506107f8611acc565b6040516108059190612dda565b60405180910390f35b34801561081a57600080fd5b5061083560048036038101906108309190612e32565b611b5a565b6040516108429190612f36565b60405180910390f35b34801561085757600080fd5b50610860611be4565b60405161086d9190612dda565b60405180910390f35b34801561088257600080fd5b5061089d6004803603810190610898919061331f565b611c76565b6040516108aa9190612c96565b60405180910390f35b3480156108bf57600080fd5b506108da60048036038101906108d59190612e32565b611d0a565b005b3480156108e857600080fd5b5061090360048036038101906108fe9190612e32565b611d1c565b005b34801561091157600080fd5b5061092c60048036038101906109279190612f51565b611d2e565b005b34801561093a57600080fd5b506109556004803603810190610950919061335f565b611db1565b005b600f60009054906101000a900460ff1681565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c557506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109f55750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060038054610a0b906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610a37906133ea565b8015610a845780601f10610a5957610100808354040283529160200191610a84565b820191906000526020600020905b815481529060010190602001808311610a6757829003601f168201915b5050505050905090565b6000610a9982611de7565b610acf576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b1882611186565b90508073ffffffffffffffffffffffffffffffffffffffff16610b39611e46565b73ffffffffffffffffffffffffffffffffffffffff1614610b9c57610b6581610b60611e46565b611c76565b610b9b576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826007600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60145481565b6000610c61611e4e565b6002546001540303905090565b600b6020528060005260406000206000915090505481565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610d82576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610cfd92919061341b565b6020604051808303816000875af1158015610d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d409190613459565b610d8157336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610d789190612ea0565b60405180910390fd5b5b610d8d838383611e53565b505050565b610d9a612175565b600260095403610ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd6906134d2565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610e0d90613523565b60006040518083038185875af1925050503d8060008114610e4a576040519150601f19603f3d011682016040523d82523d6000602084013e610e4f565b606091505b5050905080610e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8a90613584565b60405180910390fd5b506001600981905550565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610f9a576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610f1592919061341b565b6020604051808303816000875af1158015610f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f589190613459565b610f9957336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610f909190612ea0565b60405180910390fd5b5b610fa58383836121f3565b505050565b610fb5816001612213565b50565b610fc0612175565b60105482610fcc610c57565b610fd691906135d3565b1115611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e90613653565b60405180910390fd5b6110218183612465565b5050565b61102d612175565b8060118190555050565b600d8054611044906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611070906133ea565b80156110bd5780601f10611092576101008083540402835291602001916110bd565b820191906000526020600020905b8154815290600101906020018083116110a057829003601f168201915b505050505081565b6110cd612175565b80600a90816110dc919061381f565b5050565b600a80546110ed906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611119906133ea565b80156111665780601f1061113b57610100808354040283529160200191611166565b820191906000526020600020905b81548152906001019060200180831161114957829003601f168201915b505050505081565b60135481565b61117c612175565b8060138190555050565b600061119182612483565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111ff576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b611258612175565b611262600061254f565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461129c906133ea565b80601f01602080910402602001604051908101604052809291908181526020018280546112c8906133ea565b80156113155780601f106112ea57610100808354040283529160200191611315565b820191906000526020600020905b8154815290600101906020018083116112f857829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461138d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113849061393d565b60405180910390fd5b6002600954036113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c9906134d2565b60405180910390fd5b6002600981905550600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460145461142a919061395d565b90508083106114e157808361143f919061395d565b60115461144c9190613991565b915080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461149991906135d3565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611574565b6000915082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461153091906135d3565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff166115c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ba90613a37565b60405180910390fd5b601054836115cf610c57565b6115d991906135d3565b111561161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190613aa3565b60405180910390fd5b6013548361162733611198565b61163191906135d3565b1115611672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166990613b0f565b60405180910390fd5b6012548311156116b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ae90613ba1565b60405180910390fd5b813410156116fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f190613c0d565b60405180910390fd5b6117043384612465565b8134111561175f573373ffffffffffffffffffffffffffffffffffffffff166108fc8334611732919061395d565b9081150290604051600060405180830381858888f1935050505015801561175d573d6000803e3d6000fd5b505b5050600160098190555050565b8060086000611779611e46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611826611e46565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161186b9190612c96565b60405180910390a35050565b61187f612175565b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600c60009054906101000a900460ff1681565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156119ba576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b815260040161193592919061341b565b6020604051808303816000875af1158015611954573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119789190613459565b6119b957336040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016119b09190612ea0565b60405180910390fd5b5b6119c684848484612613565b50505050565b60115481565b6119da612175565b8060128190555050565b6060600c60009054906101000a900460ff1615611a2d57600e611a0683612686565b604051602001611a17929190613cec565b6040516020818303038152906040529050611abb565b600d8054611a3a906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611a66906133ea565b8015611ab35780601f10611a8857610100808354040283529160200191611ab3565b820191906000526020600020905b815481529060010190602001808311611a9657829003601f168201915b505050505090505b919050565b60125481565b60105481565b600e8054611ad9906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611b05906133ea565b8015611b525780601f10611b2757610100808354040283529160200191611b52565b820191906000526020600020905b815481529060010190602001808311611b3557829003601f168201915b505050505081565b6000806000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601454611bac919061395d565b9050808410611bd5578084611bc1919061395d565b601154611bce9190613991565b9150611bda565b600091505b8192505050919050565b6060600a8054611bf3906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1f906133ea565b8015611c6c5780601f10611c4157610100808354040283529160200191611c6c565b820191906000526020600020905b815481529060010190602001808311611c4f57829003601f168201915b5050505050905090565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d12612175565b8060108190555050565b611d24612175565b8060148190555050565b611d36612175565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9c90613d82565b60405180910390fd5b611dae8161254f565b50565b611db9612175565b80600e9081611dc8919061381f565b5081600c60006101000a81548160ff0219169083151502179055505050565b600081611df2611e4e565b11158015611e01575060015482105b8015611e3f575060007c0100000000000000000000000000000000000000000000000000000000600560008581526020019081526020016000205416145b9050919050565b600033905090565b600090565b6000611e5e82612483565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611ec5576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080611ed1846127e6565b91509150611ee78187611ee2611e46565b61280d565b611f3357611efc86611ef7611e46565b611c76565b611f32576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611f99576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fa68686866001612851565b8015611fb157600082555b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001019190508190555061207f8561205b888887612857565b7c02000000000000000000000000000000000000000000000000000000001761287f565b600560008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036121055760006001850190506000600560008381526020019081526020016000205403612103576001548114612102578360056000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461216d86868660016128aa565b505050505050565b61217d6128b0565b73ffffffffffffffffffffffffffffffffffffffff1661219b611264565b73ffffffffffffffffffffffffffffffffffffffff16146121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e890613dee565b60405180910390fd5b565b61220e838383604051806020016040528060008152506118be565b505050565b600061221e83612483565b90506000819050600080612231866127e6565b91509150841561229a5761224d8184612248611e46565b61280d565b612299576122628361225d611e46565b611c76565b612298576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b6122a8836000886001612851565b80156122b357600082555b600160806001901b03600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061235b8361231885600088612857565b7c02000000000000000000000000000000000000000000000000000000007c0100000000000000000000000000000000000000000000000000000000171761287f565b600560008881526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008516036123e157600060018701905060006005600083815260200190815260200160002054036123df5760015481146123de578460056000838152602001908152602001600020819055505b5b505b85600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461244b8360008860016128aa565b600260008154809291906001019190505550505050505050565b61247f8282604051806020016040528060008152506128b8565b5050565b60008082905080612492611e4e565b11612518576001548110156125175760006005600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821603612515575b6000810361250b5760056000836001900393508381526020019081526020016000205490506124e1565b809250505061254a565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61261e848484610c86565b60008373ffffffffffffffffffffffffffffffffffffffff163b146126805761264984848484612956565b61267f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060600082036126cd576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127e1565b600082905060005b600082146126ff5780806126e890613e0e565b915050600a826126f89190613e85565b91506126d5565b60008167ffffffffffffffff81111561271b5761271a61301b565b5b6040519080825280601f01601f19166020018201604052801561274d5781602001600182028036833780820191505090505b5090505b600085146127da57600182612766919061395d565b9150600a856127759190613eb6565b603061278191906135d3565b60f81b81838151811061279757612796613ee7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127d39190613e85565b9450612751565b8093505050505b919050565b60008060006007600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e861286e868684612aa6565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b600033905090565b6128c28383612aaf565b60008373ffffffffffffffffffffffffffffffffffffffff163b146129515760006001549050600083820390505b6129036000868380600101945086612956565b612939576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181106128f057816001541461294e57600080fd5b50505b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261297c611e46565b8786866040518563ffffffff1660e01b815260040161299e9493929190613f6b565b6020604051808303816000875af19250505080156129da57506040513d601f19601f820116820180604052508101906129d79190613fcc565b60015b612a53573d8060008114612a0a576040519150601f19603f3d011682016040523d82523d6000602084013e612a0f565b606091505b506000815103612a4b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60009392505050565b6000600154905060008203612af0576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612afd6000848385612851565b600160406001901b178202600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612b7483612b656000866000612857565b612b6e85612c6b565b1761287f565b6005600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b818114612c1557808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050612bda565b5060008203612c50576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001819055505050612c6660008483856128aa565b505050565b60006001821460e11b9050919050565b60008115159050919050565b612c9081612c7b565b82525050565b6000602082019050612cab6000830184612c87565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612cfa81612cc5565b8114612d0557600080fd5b50565b600081359050612d1781612cf1565b92915050565b600060208284031215612d3357612d32612cbb565b5b6000612d4184828501612d08565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d84578082015181840152602081019050612d69565b60008484015250505050565b6000601f19601f8301169050919050565b6000612dac82612d4a565b612db68185612d55565b9350612dc6818560208601612d66565b612dcf81612d90565b840191505092915050565b60006020820190508181036000830152612df48184612da1565b905092915050565b6000819050919050565b612e0f81612dfc565b8114612e1a57600080fd5b50565b600081359050612e2c81612e06565b92915050565b600060208284031215612e4857612e47612cbb565b5b6000612e5684828501612e1d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e8a82612e5f565b9050919050565b612e9a81612e7f565b82525050565b6000602082019050612eb56000830184612e91565b92915050565b612ec481612e7f565b8114612ecf57600080fd5b50565b600081359050612ee181612ebb565b92915050565b60008060408385031215612efe57612efd612cbb565b5b6000612f0c85828601612ed2565b9250506020612f1d85828601612e1d565b9150509250929050565b612f3081612dfc565b82525050565b6000602082019050612f4b6000830184612f27565b92915050565b600060208284031215612f6757612f66612cbb565b5b6000612f7584828501612ed2565b91505092915050565b600080600060608486031215612f9757612f96612cbb565b5b6000612fa586828701612ed2565b9350506020612fb686828701612ed2565b9250506040612fc786828701612e1d565b9150509250925092565b60008060408385031215612fe857612fe7612cbb565b5b6000612ff685828601612e1d565b925050602061300785828601612ed2565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61305382612d90565b810181811067ffffffffffffffff821117156130725761307161301b565b5b80604052505050565b6000613085612cb1565b9050613091828261304a565b919050565b600067ffffffffffffffff8211156130b1576130b061301b565b5b6130ba82612d90565b9050602081019050919050565b82818337600083830152505050565b60006130e96130e484613096565b61307b565b90508281526020810184848401111561310557613104613016565b5b6131108482856130c7565b509392505050565b600082601f83011261312d5761312c613011565b5b813561313d8482602086016130d6565b91505092915050565b60006020828403121561315c5761315b612cbb565b5b600082013567ffffffffffffffff81111561317a57613179612cc0565b5b61318684828501613118565b91505092915050565b61319881612c7b565b81146131a357600080fd5b50565b6000813590506131b58161318f565b92915050565b600080604083850312156131d2576131d1612cbb565b5b60006131e085828601612ed2565b92505060206131f1858286016131a6565b9150509250929050565b600067ffffffffffffffff8211156132165761321561301b565b5b61321f82612d90565b9050602081019050919050565b600061323f61323a846131fb565b61307b565b90508281526020810184848401111561325b5761325a613016565b5b6132668482856130c7565b509392505050565b600082601f83011261328357613282613011565b5b813561329384826020860161322c565b91505092915050565b600080600080608085870312156132b6576132b5612cbb565b5b60006132c487828801612ed2565b94505060206132d587828801612ed2565b93505060406132e687828801612e1d565b925050606085013567ffffffffffffffff81111561330757613306612cc0565b5b6133138782880161326e565b91505092959194509250565b6000806040838503121561333657613335612cbb565b5b600061334485828601612ed2565b925050602061335585828601612ed2565b9150509250929050565b6000806040838503121561337657613375612cbb565b5b6000613384858286016131a6565b925050602083013567ffffffffffffffff8111156133a5576133a4612cc0565b5b6133b185828601613118565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061340257607f821691505b602082108103613415576134146133bb565b5b50919050565b60006040820190506134306000830185612e91565b61343d6020830184612e91565b9392505050565b6000815190506134538161318f565b92915050565b60006020828403121561346f5761346e612cbb565b5b600061347d84828501613444565b91505092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006134bc601f83612d55565b91506134c782613486565b602082019050919050565b600060208201905081810360008301526134eb816134af565b9050919050565b600081905092915050565b50565b600061350d6000836134f2565b9150613518826134fd565b600082019050919050565b600061352e82613500565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b600061356e601083612d55565b915061357982613538565b602082019050919050565b6000602082019050818103600083015261359d81613561565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006135de82612dfc565b91506135e983612dfc565b9250828201905080821115613601576136006135a4565b5b92915050565b7f4e6f206d6f726520696e2073746f636b21000000000000000000000000000000600082015250565b600061363d601183612d55565b915061364882613607565b602082019050919050565b6000602082019050818103600083015261366c81613630565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026136d57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613698565b6136df8683613698565b95508019841693508086168417925050509392505050565b6000819050919050565b600061371c61371761371284612dfc565b6136f7565b612dfc565b9050919050565b6000819050919050565b61373683613701565b61374a61374282613723565b8484546136a5565b825550505050565b600090565b61375f613752565b61376a81848461372d565b505050565b5b8181101561378e57613783600082613757565b600181019050613770565b5050565b601f8211156137d3576137a481613673565b6137ad84613688565b810160208510156137bc578190505b6137d06137c885613688565b83018261376f565b50505b505050565b600082821c905092915050565b60006137f6600019846008026137d8565b1980831691505092915050565b600061380f83836137e5565b9150826002028217905092915050565b61382882612d4a565b67ffffffffffffffff8111156138415761384061301b565b5b61384b82546133ea565b613856828285613792565b600060209050601f8311600181146138895760008415613877578287015190505b6138818582613803565b8655506138e9565b601f19841661389786613673565b60005b828110156138bf5784890151825560018201915060208501945060208101905061389a565b868310156138dc57848901516138d8601f8916826137e5565b8355505b6001600288020188555050505b505050505050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000613927601e83612d55565b9150613932826138f1565b602082019050919050565b600060208201905081810360008301526139568161391a565b9050919050565b600061396882612dfc565b915061397383612dfc565b925082820390508181111561398b5761398a6135a4565b5b92915050565b600061399c82612dfc565b91506139a783612dfc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139e0576139df6135a4565b5b828202905092915050565b7f4e6f74204c697665207965742100000000000000000000000000000000000000600082015250565b6000613a21600d83612d55565b9150613a2c826139eb565b602082019050919050565b60006020820190508181036000830152613a5081613a14565b9050919050565b7f4e6f206d6f726520696e2053746f636b00000000000000000000000000000000600082015250565b6000613a8d601083612d55565b9150613a9882613a57565b602082019050919050565b60006020820190508181036000830152613abc81613a80565b9050919050565b7f547269656420746f206d696e74206f766572206f766572206c696d6974000000600082015250565b6000613af9601d83612d55565b9150613b0482613ac3565b602082019050919050565b60006020820190508181036000830152613b2881613aec565b9050919050565b7f547269656420746f206d696e74206f766572206c696d69742c2072657472792060008201527f776974682072656475636564207175616e746974790000000000000000000000602082015250565b6000613b8b603583612d55565b9150613b9682613b2f565b604082019050919050565b60006020820190508181036000830152613bba81613b7e565b9050919050565b7f4d7573742073656e64206d6f7265206574680000000000000000000000000000600082015250565b6000613bf7601283612d55565b9150613c0282613bc1565b602082019050919050565b60006020820190508181036000830152613c2681613bea565b9050919050565b600081905092915050565b60008154613c45816133ea565b613c4f8186613c2d565b94506001821660008114613c6a5760018114613c7f57613cb2565b60ff1983168652811515820286019350613cb2565b613c8885613673565b60005b83811015613caa57815481890152600182019150602081019050613c8b565b838801955050505b50505092915050565b6000613cc682612d4a565b613cd08185613c2d565b9350613ce0818560208601612d66565b80840191505092915050565b6000613cf88285613c38565b9150613d048284613cbb565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d6c602683612d55565b9150613d7782613d10565b604082019050919050565b60006020820190508181036000830152613d9b81613d5f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613dd8602083612d55565b9150613de382613da2565b602082019050919050565b60006020820190508181036000830152613e0781613dcb565b9050919050565b6000613e1982612dfc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e4b57613e4a6135a4565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e9082612dfc565b9150613e9b83612dfc565b925082613eab57613eaa613e56565b5b828204905092915050565b6000613ec182612dfc565b9150613ecc83612dfc565b925082613edc57613edb613e56565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000613f3d82613f16565b613f478185613f21565b9350613f57818560208601612d66565b613f6081612d90565b840191505092915050565b6000608082019050613f806000830187612e91565b613f8d6020830186612e91565b613f9a6040830185612f27565b8181036060830152613fac8184613f32565b905095945050505050565b600081519050613fc681612cf1565b92915050565b600060208284031215613fe257613fe1612cbb565b5b6000613ff084828501613fb7565b9150509291505056fea2646970667358221220702cf635f46a5208bad4f47417501240336933b3c284b6709bb37ffe6a5ec27e64736f6c63430008100033

Deployed Bytecode

0x6080604052600436106102515760003560e01c8063715018a611610139578063c87b56dd116100b6578063e8a3d4851161007a578063e8a3d4851461084b578063e985e9c514610876578063ec02c891146108b3578063f1112575146108dc578063f2fde38b14610905578063fcd47d351461092e57610251565b8063c87b56dd14610750578063cfdbf2541461078d578063d8258d95146107b8578063dbddb26a146107e3578063e75722301461080e57610251565b8063a4cdd719116100fd578063a4cdd7191461069e578063a76a9587146106b5578063b88d4fde146106e0578063c002d23d146106fc578063c144a4ba1461072757610251565b8063715018a6146105ec5780638da5cb5b1461060357806395d89b411461062e578063a0712d6814610659578063a22cb4651461067557610251565b806342842e0e116101d257806356b48d631161019657806356b48d63146104ca57806356b4f673146104f35780635fe755871461051e5780635ff38740146105495780636352211e1461057257806370a08231146105af57610251565b806342842e0e1461040857806342966c681461042457806342c42c0e1461044d5780634f5539c014610476578063507862d11461049f57610251565b80631422374f116102195780631422374f1461034257806318160ddd1461036d5780631d9857781461039857806323b872dd146103d557806324600fc3146103f157610251565b80630116bc2d1461025657806301ffc9a71461028157806306fdde03146102be578063081812fc146102e9578063095ea7b314610326575b600080fd5b34801561026257600080fd5b5061026b610957565b6040516102789190612c96565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190612d1d565b61096a565b6040516102b59190612c96565b60405180910390f35b3480156102ca57600080fd5b506102d36109fc565b6040516102e09190612dda565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190612e32565b610a8e565b60405161031d9190612ea0565b60405180910390f35b610340600480360381019061033b9190612ee7565b610b0d565b005b34801561034e57600080fd5b50610357610c51565b6040516103649190612f36565b60405180910390f35b34801561037957600080fd5b50610382610c57565b60405161038f9190612f36565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190612f51565b610c6e565b6040516103cc9190612f36565b60405180910390f35b6103ef60048036038101906103ea9190612f7e565b610c86565b005b3480156103fd57600080fd5b50610406610d92565b005b610422600480360381019061041d9190612f7e565b610e9e565b005b34801561043057600080fd5b5061044b60048036038101906104469190612e32565b610faa565b005b34801561045957600080fd5b50610474600480360381019061046f9190612fd1565b610fb8565b005b34801561048257600080fd5b5061049d60048036038101906104989190612e32565b611025565b005b3480156104ab57600080fd5b506104b4611037565b6040516104c19190612dda565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec9190613146565b6110c5565b005b3480156104ff57600080fd5b506105086110e0565b6040516105159190612dda565b60405180910390f35b34801561052a57600080fd5b5061053361116e565b6040516105409190612f36565b60405180910390f35b34801561055557600080fd5b50610570600480360381019061056b9190612e32565b611174565b005b34801561057e57600080fd5b5061059960048036038101906105949190612e32565b611186565b6040516105a69190612ea0565b60405180910390f35b3480156105bb57600080fd5b506105d660048036038101906105d19190612f51565b611198565b6040516105e39190612f36565b60405180910390f35b3480156105f857600080fd5b50610601611250565b005b34801561060f57600080fd5b50610618611264565b6040516106259190612ea0565b60405180910390f35b34801561063a57600080fd5b5061064361128d565b6040516106509190612dda565b60405180910390f35b610673600480360381019061066e9190612e32565b61131f565b005b34801561068157600080fd5b5061069c600480360381019061069791906131bb565b61176c565b005b3480156106aa57600080fd5b506106b3611877565b005b3480156106c157600080fd5b506106ca6118ab565b6040516106d79190612c96565b60405180910390f35b6106fa60048036038101906106f5919061329c565b6118be565b005b34801561070857600080fd5b506107116119cc565b60405161071e9190612f36565b60405180910390f35b34801561073357600080fd5b5061074e60048036038101906107499190612e32565b6119d2565b005b34801561075c57600080fd5b5061077760048036038101906107729190612e32565b6119e4565b6040516107849190612dda565b60405180910390f35b34801561079957600080fd5b506107a2611ac0565b6040516107af9190612f36565b60405180910390f35b3480156107c457600080fd5b506107cd611ac6565b6040516107da9190612f36565b60405180910390f35b3480156107ef57600080fd5b506107f8611acc565b6040516108059190612dda565b60405180910390f35b34801561081a57600080fd5b5061083560048036038101906108309190612e32565b611b5a565b6040516108429190612f36565b60405180910390f35b34801561085757600080fd5b50610860611be4565b60405161086d9190612dda565b60405180910390f35b34801561088257600080fd5b5061089d6004803603810190610898919061331f565b611c76565b6040516108aa9190612c96565b60405180910390f35b3480156108bf57600080fd5b506108da60048036038101906108d59190612e32565b611d0a565b005b3480156108e857600080fd5b5061090360048036038101906108fe9190612e32565b611d1c565b005b34801561091157600080fd5b5061092c60048036038101906109279190612f51565b611d2e565b005b34801561093a57600080fd5b506109556004803603810190610950919061335f565b611db1565b005b600f60009054906101000a900460ff1681565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c557506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109f55750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060038054610a0b906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610a37906133ea565b8015610a845780601f10610a5957610100808354040283529160200191610a84565b820191906000526020600020905b815481529060010190602001808311610a6757829003601f168201915b5050505050905090565b6000610a9982611de7565b610acf576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b1882611186565b90508073ffffffffffffffffffffffffffffffffffffffff16610b39611e46565b73ffffffffffffffffffffffffffffffffffffffff1614610b9c57610b6581610b60611e46565b611c76565b610b9b576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826007600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60145481565b6000610c61611e4e565b6002546001540303905090565b600b6020528060005260406000206000915090505481565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610d82576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610cfd92919061341b565b6020604051808303816000875af1158015610d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d409190613459565b610d8157336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610d789190612ea0565b60405180910390fd5b5b610d8d838383611e53565b505050565b610d9a612175565b600260095403610ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd6906134d2565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610e0d90613523565b60006040518083038185875af1925050503d8060008114610e4a576040519150601f19603f3d011682016040523d82523d6000602084013e610e4f565b606091505b5050905080610e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8a90613584565b60405180910390fd5b506001600981905550565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610f9a576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610f1592919061341b565b6020604051808303816000875af1158015610f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f589190613459565b610f9957336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610f909190612ea0565b60405180910390fd5b5b610fa58383836121f3565b505050565b610fb5816001612213565b50565b610fc0612175565b60105482610fcc610c57565b610fd691906135d3565b1115611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e90613653565b60405180910390fd5b6110218183612465565b5050565b61102d612175565b8060118190555050565b600d8054611044906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611070906133ea565b80156110bd5780601f10611092576101008083540402835291602001916110bd565b820191906000526020600020905b8154815290600101906020018083116110a057829003601f168201915b505050505081565b6110cd612175565b80600a90816110dc919061381f565b5050565b600a80546110ed906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611119906133ea565b80156111665780601f1061113b57610100808354040283529160200191611166565b820191906000526020600020905b81548152906001019060200180831161114957829003601f168201915b505050505081565b60135481565b61117c612175565b8060138190555050565b600061119182612483565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111ff576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b611258612175565b611262600061254f565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461129c906133ea565b80601f01602080910402602001604051908101604052809291908181526020018280546112c8906133ea565b80156113155780601f106112ea57610100808354040283529160200191611315565b820191906000526020600020905b8154815290600101906020018083116112f857829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461138d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113849061393d565b60405180910390fd5b6002600954036113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c9906134d2565b60405180910390fd5b6002600981905550600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460145461142a919061395d565b90508083106114e157808361143f919061395d565b60115461144c9190613991565b915080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461149991906135d3565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611574565b6000915082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461153091906135d3565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff166115c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ba90613a37565b60405180910390fd5b601054836115cf610c57565b6115d991906135d3565b111561161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190613aa3565b60405180910390fd5b6013548361162733611198565b61163191906135d3565b1115611672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166990613b0f565b60405180910390fd5b6012548311156116b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ae90613ba1565b60405180910390fd5b813410156116fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f190613c0d565b60405180910390fd5b6117043384612465565b8134111561175f573373ffffffffffffffffffffffffffffffffffffffff166108fc8334611732919061395d565b9081150290604051600060405180830381858888f1935050505015801561175d573d6000803e3d6000fd5b505b5050600160098190555050565b8060086000611779611e46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611826611e46565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161186b9190612c96565b60405180910390a35050565b61187f612175565b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600c60009054906101000a900460ff1681565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156119ba576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b815260040161193592919061341b565b6020604051808303816000875af1158015611954573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119789190613459565b6119b957336040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016119b09190612ea0565b60405180910390fd5b5b6119c684848484612613565b50505050565b60115481565b6119da612175565b8060128190555050565b6060600c60009054906101000a900460ff1615611a2d57600e611a0683612686565b604051602001611a17929190613cec565b6040516020818303038152906040529050611abb565b600d8054611a3a906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611a66906133ea565b8015611ab35780601f10611a8857610100808354040283529160200191611ab3565b820191906000526020600020905b815481529060010190602001808311611a9657829003601f168201915b505050505090505b919050565b60125481565b60105481565b600e8054611ad9906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611b05906133ea565b8015611b525780601f10611b2757610100808354040283529160200191611b52565b820191906000526020600020905b815481529060010190602001808311611b3557829003601f168201915b505050505081565b6000806000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601454611bac919061395d565b9050808410611bd5578084611bc1919061395d565b601154611bce9190613991565b9150611bda565b600091505b8192505050919050565b6060600a8054611bf3906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1f906133ea565b8015611c6c5780601f10611c4157610100808354040283529160200191611c6c565b820191906000526020600020905b815481529060010190602001808311611c4f57829003601f168201915b5050505050905090565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d12612175565b8060108190555050565b611d24612175565b8060148190555050565b611d36612175565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9c90613d82565b60405180910390fd5b611dae8161254f565b50565b611db9612175565b80600e9081611dc8919061381f565b5081600c60006101000a81548160ff0219169083151502179055505050565b600081611df2611e4e565b11158015611e01575060015482105b8015611e3f575060007c0100000000000000000000000000000000000000000000000000000000600560008581526020019081526020016000205416145b9050919050565b600033905090565b600090565b6000611e5e82612483565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611ec5576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080611ed1846127e6565b91509150611ee78187611ee2611e46565b61280d565b611f3357611efc86611ef7611e46565b611c76565b611f32576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611f99576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fa68686866001612851565b8015611fb157600082555b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001019190508190555061207f8561205b888887612857565b7c02000000000000000000000000000000000000000000000000000000001761287f565b600560008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036121055760006001850190506000600560008381526020019081526020016000205403612103576001548114612102578360056000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461216d86868660016128aa565b505050505050565b61217d6128b0565b73ffffffffffffffffffffffffffffffffffffffff1661219b611264565b73ffffffffffffffffffffffffffffffffffffffff16146121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e890613dee565b60405180910390fd5b565b61220e838383604051806020016040528060008152506118be565b505050565b600061221e83612483565b90506000819050600080612231866127e6565b91509150841561229a5761224d8184612248611e46565b61280d565b612299576122628361225d611e46565b611c76565b612298576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b6122a8836000886001612851565b80156122b357600082555b600160806001901b03600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061235b8361231885600088612857565b7c02000000000000000000000000000000000000000000000000000000007c0100000000000000000000000000000000000000000000000000000000171761287f565b600560008881526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008516036123e157600060018701905060006005600083815260200190815260200160002054036123df5760015481146123de578460056000838152602001908152602001600020819055505b5b505b85600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461244b8360008860016128aa565b600260008154809291906001019190505550505050505050565b61247f8282604051806020016040528060008152506128b8565b5050565b60008082905080612492611e4e565b11612518576001548110156125175760006005600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821603612515575b6000810361250b5760056000836001900393508381526020019081526020016000205490506124e1565b809250505061254a565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61261e848484610c86565b60008373ffffffffffffffffffffffffffffffffffffffff163b146126805761264984848484612956565b61267f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060600082036126cd576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127e1565b600082905060005b600082146126ff5780806126e890613e0e565b915050600a826126f89190613e85565b91506126d5565b60008167ffffffffffffffff81111561271b5761271a61301b565b5b6040519080825280601f01601f19166020018201604052801561274d5781602001600182028036833780820191505090505b5090505b600085146127da57600182612766919061395d565b9150600a856127759190613eb6565b603061278191906135d3565b60f81b81838151811061279757612796613ee7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127d39190613e85565b9450612751565b8093505050505b919050565b60008060006007600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e861286e868684612aa6565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b600033905090565b6128c28383612aaf565b60008373ffffffffffffffffffffffffffffffffffffffff163b146129515760006001549050600083820390505b6129036000868380600101945086612956565b612939576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181106128f057816001541461294e57600080fd5b50505b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261297c611e46565b8786866040518563ffffffff1660e01b815260040161299e9493929190613f6b565b6020604051808303816000875af19250505080156129da57506040513d601f19601f820116820180604052508101906129d79190613fcc565b60015b612a53573d8060008114612a0a576040519150601f19603f3d011682016040523d82523d6000602084013e612a0f565b606091505b506000815103612a4b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60009392505050565b6000600154905060008203612af0576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612afd6000848385612851565b600160406001901b178202600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612b7483612b656000866000612857565b612b6e85612c6b565b1761287f565b6005600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b818114612c1557808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050612bda565b5060008203612c50576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001819055505050612c6660008483856128aa565b505050565b60006001821460e11b9050919050565b60008115159050919050565b612c9081612c7b565b82525050565b6000602082019050612cab6000830184612c87565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612cfa81612cc5565b8114612d0557600080fd5b50565b600081359050612d1781612cf1565b92915050565b600060208284031215612d3357612d32612cbb565b5b6000612d4184828501612d08565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d84578082015181840152602081019050612d69565b60008484015250505050565b6000601f19601f8301169050919050565b6000612dac82612d4a565b612db68185612d55565b9350612dc6818560208601612d66565b612dcf81612d90565b840191505092915050565b60006020820190508181036000830152612df48184612da1565b905092915050565b6000819050919050565b612e0f81612dfc565b8114612e1a57600080fd5b50565b600081359050612e2c81612e06565b92915050565b600060208284031215612e4857612e47612cbb565b5b6000612e5684828501612e1d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e8a82612e5f565b9050919050565b612e9a81612e7f565b82525050565b6000602082019050612eb56000830184612e91565b92915050565b612ec481612e7f565b8114612ecf57600080fd5b50565b600081359050612ee181612ebb565b92915050565b60008060408385031215612efe57612efd612cbb565b5b6000612f0c85828601612ed2565b9250506020612f1d85828601612e1d565b9150509250929050565b612f3081612dfc565b82525050565b6000602082019050612f4b6000830184612f27565b92915050565b600060208284031215612f6757612f66612cbb565b5b6000612f7584828501612ed2565b91505092915050565b600080600060608486031215612f9757612f96612cbb565b5b6000612fa586828701612ed2565b9350506020612fb686828701612ed2565b9250506040612fc786828701612e1d565b9150509250925092565b60008060408385031215612fe857612fe7612cbb565b5b6000612ff685828601612e1d565b925050602061300785828601612ed2565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61305382612d90565b810181811067ffffffffffffffff821117156130725761307161301b565b5b80604052505050565b6000613085612cb1565b9050613091828261304a565b919050565b600067ffffffffffffffff8211156130b1576130b061301b565b5b6130ba82612d90565b9050602081019050919050565b82818337600083830152505050565b60006130e96130e484613096565b61307b565b90508281526020810184848401111561310557613104613016565b5b6131108482856130c7565b509392505050565b600082601f83011261312d5761312c613011565b5b813561313d8482602086016130d6565b91505092915050565b60006020828403121561315c5761315b612cbb565b5b600082013567ffffffffffffffff81111561317a57613179612cc0565b5b61318684828501613118565b91505092915050565b61319881612c7b565b81146131a357600080fd5b50565b6000813590506131b58161318f565b92915050565b600080604083850312156131d2576131d1612cbb565b5b60006131e085828601612ed2565b92505060206131f1858286016131a6565b9150509250929050565b600067ffffffffffffffff8211156132165761321561301b565b5b61321f82612d90565b9050602081019050919050565b600061323f61323a846131fb565b61307b565b90508281526020810184848401111561325b5761325a613016565b5b6132668482856130c7565b509392505050565b600082601f83011261328357613282613011565b5b813561329384826020860161322c565b91505092915050565b600080600080608085870312156132b6576132b5612cbb565b5b60006132c487828801612ed2565b94505060206132d587828801612ed2565b93505060406132e687828801612e1d565b925050606085013567ffffffffffffffff81111561330757613306612cc0565b5b6133138782880161326e565b91505092959194509250565b6000806040838503121561333657613335612cbb565b5b600061334485828601612ed2565b925050602061335585828601612ed2565b9150509250929050565b6000806040838503121561337657613375612cbb565b5b6000613384858286016131a6565b925050602083013567ffffffffffffffff8111156133a5576133a4612cc0565b5b6133b185828601613118565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061340257607f821691505b602082108103613415576134146133bb565b5b50919050565b60006040820190506134306000830185612e91565b61343d6020830184612e91565b9392505050565b6000815190506134538161318f565b92915050565b60006020828403121561346f5761346e612cbb565b5b600061347d84828501613444565b91505092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006134bc601f83612d55565b91506134c782613486565b602082019050919050565b600060208201905081810360008301526134eb816134af565b9050919050565b600081905092915050565b50565b600061350d6000836134f2565b9150613518826134fd565b600082019050919050565b600061352e82613500565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b600061356e601083612d55565b915061357982613538565b602082019050919050565b6000602082019050818103600083015261359d81613561565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006135de82612dfc565b91506135e983612dfc565b9250828201905080821115613601576136006135a4565b5b92915050565b7f4e6f206d6f726520696e2073746f636b21000000000000000000000000000000600082015250565b600061363d601183612d55565b915061364882613607565b602082019050919050565b6000602082019050818103600083015261366c81613630565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026136d57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613698565b6136df8683613698565b95508019841693508086168417925050509392505050565b6000819050919050565b600061371c61371761371284612dfc565b6136f7565b612dfc565b9050919050565b6000819050919050565b61373683613701565b61374a61374282613723565b8484546136a5565b825550505050565b600090565b61375f613752565b61376a81848461372d565b505050565b5b8181101561378e57613783600082613757565b600181019050613770565b5050565b601f8211156137d3576137a481613673565b6137ad84613688565b810160208510156137bc578190505b6137d06137c885613688565b83018261376f565b50505b505050565b600082821c905092915050565b60006137f6600019846008026137d8565b1980831691505092915050565b600061380f83836137e5565b9150826002028217905092915050565b61382882612d4a565b67ffffffffffffffff8111156138415761384061301b565b5b61384b82546133ea565b613856828285613792565b600060209050601f8311600181146138895760008415613877578287015190505b6138818582613803565b8655506138e9565b601f19841661389786613673565b60005b828110156138bf5784890151825560018201915060208501945060208101905061389a565b868310156138dc57848901516138d8601f8916826137e5565b8355505b6001600288020188555050505b505050505050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000613927601e83612d55565b9150613932826138f1565b602082019050919050565b600060208201905081810360008301526139568161391a565b9050919050565b600061396882612dfc565b915061397383612dfc565b925082820390508181111561398b5761398a6135a4565b5b92915050565b600061399c82612dfc565b91506139a783612dfc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139e0576139df6135a4565b5b828202905092915050565b7f4e6f74204c697665207965742100000000000000000000000000000000000000600082015250565b6000613a21600d83612d55565b9150613a2c826139eb565b602082019050919050565b60006020820190508181036000830152613a5081613a14565b9050919050565b7f4e6f206d6f726520696e2053746f636b00000000000000000000000000000000600082015250565b6000613a8d601083612d55565b9150613a9882613a57565b602082019050919050565b60006020820190508181036000830152613abc81613a80565b9050919050565b7f547269656420746f206d696e74206f766572206f766572206c696d6974000000600082015250565b6000613af9601d83612d55565b9150613b0482613ac3565b602082019050919050565b60006020820190508181036000830152613b2881613aec565b9050919050565b7f547269656420746f206d696e74206f766572206c696d69742c2072657472792060008201527f776974682072656475636564207175616e746974790000000000000000000000602082015250565b6000613b8b603583612d55565b9150613b9682613b2f565b604082019050919050565b60006020820190508181036000830152613bba81613b7e565b9050919050565b7f4d7573742073656e64206d6f7265206574680000000000000000000000000000600082015250565b6000613bf7601283612d55565b9150613c0282613bc1565b602082019050919050565b60006020820190508181036000830152613c2681613bea565b9050919050565b600081905092915050565b60008154613c45816133ea565b613c4f8186613c2d565b94506001821660008114613c6a5760018114613c7f57613cb2565b60ff1983168652811515820286019350613cb2565b613c8885613673565b60005b83811015613caa57815481890152600182019150602081019050613c8b565b838801955050505b50505092915050565b6000613cc682612d4a565b613cd08185613c2d565b9350613ce0818560208601612d66565b80840191505092915050565b6000613cf88285613c38565b9150613d048284613cbb565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d6c602683612d55565b9150613d7782613d10565b604082019050919050565b60006020820190508181036000830152613d9b81613d5f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613dd8602083612d55565b9150613de382613da2565b602082019050919050565b60006020820190508181036000830152613e0781613dcb565b9050919050565b6000613e1982612dfc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e4b57613e4a6135a4565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e9082612dfc565b9150613e9b83612dfc565b925082613eab57613eaa613e56565b5b828204905092915050565b6000613ec182612dfc565b9150613ecc83612dfc565b925082613edc57613edb613e56565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000613f3d82613f16565b613f478185613f21565b9350613f57818560208601612d66565b613f6081612d90565b840191505092915050565b6000608082019050613f806000830187612e91565b613f8d6020830186612e91565b613f9a6040830185612f27565b8181036060830152613fac8184613f32565b905095945050505050565b600081519050613fc681612cf1565b92915050565b600060208284031215613fe257613fe1612cbb565b5b6000613ff084828501613fb7565b9150509291505056fea2646970667358221220702cf635f46a5208bad4f47417501240336933b3c284b6709bb37ffe6a5ec27e64736f6c63430008100033

Deployed Bytecode Sourcemap

36019:4556:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36290:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16919:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17171:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20403:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19987:408;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36482:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15282:180;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36153:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39576:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38453:191;;;;;;;;;;;;;:::i;:::-;;39770:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35892:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36577:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39138:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36224:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38917:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36119:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36445:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39358:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17801:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15747:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3473:103;;;;;;;;;;;;;:::i;:::-;;3238:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17279:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37295:1034;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20629:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38335:110;;;;;;;;;;;;;:::i;:::-;;36201:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39971:250;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36371:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39470:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40229:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36411:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36332:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36260:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36963:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38812:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20871:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39037:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39243:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3586:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38652:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36290:39;;;;;;;;;;;;;:::o;16919:244::-;17004:4;17058:10;17043:25;;:11;:25;;;;:68;;;;17101:10;17086:25;;:11;:25;;;;17043:68;:111;;;;17144:10;17129:25;;:11;:25;;;;17043:111;17023:131;;16919:244;;;:::o;17171:100::-;17225:13;17258:5;17251:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17171:100;:::o;20403:218::-;20479:7;20504:16;20512:7;20504;:16::i;:::-;20499:64;;20529:34;;;;;;;;;;;;;;20499:64;20583:15;:24;20599:7;20583:24;;;;;;;;;;;:30;;;;;;;;;;;;20576:37;;20403:218;;;:::o;19987:408::-;20076:13;20092:16;20100:7;20092;:16::i;:::-;20076:32;;20148:5;20125:28;;:19;:17;:19::i;:::-;:28;;;20121:175;;20173:44;20190:5;20197:19;:17;:19::i;:::-;20173:16;:44::i;:::-;20168:128;;20245:35;;;;;;;;;;;;;;20168:128;20121:175;20341:2;20308:15;:24;20324:7;20308:24;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;20379:7;20375:2;20359:28;;20368:5;20359:28;;;;;;;;;;;;20065:330;19987:408;;:::o;36482:38::-;;;;:::o;15282:180::-;15343:7;15428:15;:13;:15::i;:::-;15413:12;;15397:13;;:28;:46;15390:53;;15282:180;:::o;36153:45::-;;;;;;;;;;;;;;;;;:::o;39576:186::-;33148:1;32359:42;33102:43;;;:47;33098:225;;;32359:42;33171:40;;;33220:4;33227:10;33171:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33166:146;;33285:10;33266:30;;;;;;;;;;;:::i;:::-;;;;;;;;33166:146;33098:225;39717:37:::1;39736:4;39742:2;39746:7;39717:18;:37::i;:::-;39576:186:::0;;;:::o;38453:191::-;3197:13;:11;:13::i;:::-;4147:1:::1;4305:7;;:19:::0;4297:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;4147:1;4373:7;:18;;;;38522:12:::2;38540:10;:15;;38563:21;38540:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38521:68;;;38608:7;38600:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;38510:134;4103:1:::1;4418:7;:22;;;;38453:191::o:0;39770:193::-;33148:1;32359:42;33102:43;;;:47;33098:225;;;32359:42;33171:40;;;33220:4;33227:10;33171:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33166:146;;33285:10;33266:30;;;;;;;;;;;:::i;:::-;;;;;;;;33166:146;33098:225;39914:41:::1;39937:4;39943:2;39947:7;39914:22;:41::i;:::-;39770:193:::0;;;:::o;35892:94::-;35958:20;35964:7;35973:4;35958:5;:20::i;:::-;35892:94;:::o;36577:249::-;3197:13;:11;:13::i;:::-;36708:15:::1;;36696:8;36680:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:43;;36658:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;36789:29;36799:8;36809;36789:9;:29::i;:::-;36577:249:::0;;:::o;39138:97::-;3197:13;:11;:13::i;:::-;39218:9:::1;39205:10;:22;;;;39138:97:::0;:::o;36224:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38917:112::-;3197:13;:11;:13::i;:::-;39009:12:::1;38994;:27;;;;;;:::i;:::-;;38917:112:::0;:::o;36119:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36445:34::-;;;;:::o;39358:104::-;3197:13;:11;:13::i;:::-;39450:4:::1;39430:17;:24;;;;39358:104:::0;:::o;17801:152::-;17873:7;17916:27;17935:7;17916:18;:27::i;:::-;17893:52;;17801:152;;;:::o;15747:233::-;15819:7;15860:1;15843:19;;:5;:19;;;15839:60;;15871:28;;;;;;;;;;;;;;15839:60;13633:13;15917:18;:25;15936:5;15917:25;;;;;;;;;;;;;;;;:55;15910:62;;15747:233;;;:::o;3473:103::-;3197:13;:11;:13::i;:::-;3538:30:::1;3565:1;3538:18;:30::i;:::-;3473:103::o:0;3238:87::-;3284:7;3311:6;;;;;;;;;;;3304:13;;3238:87;:::o;17279:104::-;17335:13;17368:7;17361:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17279:104;:::o;37295:1034::-;36890:10;36877:23;;:9;:23;;;36869:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;4147:1:::1;4305:7;;:19:::0;4297:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;4147:1;4373:7;:18;;;;37420:10:::2;37441:9:::0;37478:13:::2;:25;37492:10;37478:25;;;;;;;;;;;;;;;;37453:22;;:50;;;;:::i;:::-;37441:62;;37530:4;37518:8;:16;37514:285;;37586:4;37575:8;:15;;;;:::i;:::-;37560:10;;37559:32;;;;:::i;:::-;37551:40;;37662:4;37634:13;:25;37648:10;37634:25;;;;;;;;;;;;;;;;:32;;;;:::i;:::-;37606:13;:25;37620:10;37606:25;;;;;;;;;;;;;;;:60;;;;37514:285;;;37707:1;37699:9;;37779:8;37751:13;:25;37765:10;37751:25;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;37723:13;:25;37737:10;37723:25;;;;;;;;;;;;;;;:64;;;;37514:285;37811:19;;;;;;;;;;;37803:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;37887:15;;37875:8;37859:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:43;;37851:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;37970:17;;37958:8;37934:21;37944:10;37934:9;:21::i;:::-;:32;;;;:::i;:::-;:53;;37926:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;38044:14;;38032:8;:26;;38024:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;38140:5;38127:9;:18;;38119:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;38181:31;38191:10;38203:8;38181:9;:31::i;:::-;38241:5;38229:9;:17;38225:97;;;38271:10;38263:28;;:47;38304:5;38292:9;:17;;;;:::i;:::-;38263:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;38225:97;37409:920;;4103:1:::1;4418:7;:22;;;;37295:1034:::0;:::o;20629:234::-;20776:8;20724:18;:39;20743:19;:17;:19::i;:::-;20724:39;;;;;;;;;;;;;;;:49;20764:8;20724:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;20836:8;20800:55;;20815:19;:17;:19::i;:::-;20800:55;;;20846:8;20800:55;;;;;;:::i;:::-;;;;;;;;20629:234;;:::o;38335:110::-;3197:13;:11;:13::i;:::-;38418:19:::1;;;;;;;;;;;38417:20;38395:19;;:42;;;;;;;;;;;;;;;;;;38335:110::o:0;36201:20::-;;;;;;;;;;;;;:::o;39971:250::-;33148:1;32359:42;33102:43;;;:47;33098:225;;;32359:42;33171:40;;;33220:4;33227:10;33171:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33166:146;;33285:10;33266:30;;;;;;;;;;;:::i;:::-;;;;;;;;33166:146;33098:225;40166:47:::1;40189:4;40195:2;40199:7;40208:4;40166:22;:47::i;:::-;39971:250:::0;;;;:::o;36371:36::-;;;;:::o;39470:98::-;3197:13;:11;:13::i;:::-;39556:4:::1;39539:14;:21;;;;39470:98:::0;:::o;40229:341::-;40351:13;40386:8;;;;;;;;;;;40382:181;;;40459:8;40469:26;40486:8;40469:16;:26::i;:::-;40442:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40411:86;;;;40382:181;40537:14;40530:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40229:341;;;;:::o;36411:31::-;;;;:::o;36332:35::-;;;;:::o;36260:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36963:324::-;37016:4;37032:10;37053:9;37090:13;:25;37104:10;37090:25;;;;;;;;;;;;;;;;37065:22;;:50;;;;:::i;:::-;37053:62;;37142:4;37130:8;:16;37126:131;;37198:4;37187:8;:15;;;;:::i;:::-;37172:10;;37171:32;;;;:::i;:::-;37163:40;;37126:131;;;37244:1;37236:9;;37126:131;37274:5;37267:12;;;;36963:324;;;:::o;38812:97::-;38856:13;38889:12;38882:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38812:97;:::o;20871:164::-;20968:4;20992:18;:25;21011:5;20992:25;;;;;;;;;;;;;;;:35;21018:8;20992:35;;;;;;;;;;;;;;;;;;;;;;;;;20985:42;;20871:164;;;;:::o;39037:93::-;3197:13;:11;:13::i;:::-;39118:4:::1;39100:15;:22;;;;39037:93:::0;:::o;39243:107::-;3197:13;:11;:13::i;:::-;39338:4:::1;39313:22;:29;;;;39243:107:::0;:::o;3586:201::-;3197:13;:11;:13::i;:::-;3695:1:::1;3675:22;;:8;:22;;::::0;3667:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3751:28;3770:8;3751:18;:28::i;:::-;3586:201:::0;:::o;38652:152::-;3197:13;:11;:13::i;:::-;38757:8:::1;38746;:19;;;;;;:::i;:::-;;38787:9;38776:8;;:20;;;;;;;;;;;;;;;;;;38652:152:::0;;:::o;21043:243::-;21108:4;21164:7;21145:15;:13;:15::i;:::-;:26;;:66;;;;;21198:13;;21188:7;:23;21145:66;:133;;;;;21277:1;13995:8;21229:17;:26;21247:7;21229:26;;;;;;;;;;;;:44;:49;21145:133;21125:153;;21043:243;;;:::o;31384:105::-;31444:7;31471:10;31464:17;;31384:105;:::o;15071:92::-;15127:7;15071:92;:::o;22099:1651::-;22241:27;22271;22290:7;22271:18;:27::i;:::-;22241:57;;22356:4;22315:45;;22331:19;22315:45;;;22311:86;;22369:28;;;;;;;;;;;;;;22311:86;22411:27;22440:23;22467:35;22494:7;22467:26;:35::i;:::-;22410:92;;;;22520:68;22545:15;22562:4;22568:19;:17;:19::i;:::-;22520:24;:68::i;:::-;22515:180;;22608:43;22625:4;22631:19;:17;:19::i;:::-;22608:16;:43::i;:::-;22603:92;;22660:35;;;;;;;;;;;;;;22603:92;22515:180;22726:1;22712:16;;:2;:16;;;22708:52;;22737:23;;;;;;;;;;;;;;22708:52;22773:43;22795:4;22801:2;22805:7;22814:1;22773:21;:43::i;:::-;22856:15;22853:85;;;22921:1;22900:19;22893:30;22853:85;22990:18;:24;23009:4;22990:24;;;;;;;;;;;;;;;;22988:26;;;;;;;;;;;;23032:18;:22;23051:2;23032:22;;;;;;;;;;;;;;;;23030:24;;;;;;;;;;;23101:146;23138:2;23187:45;23202:4;23208:2;23212:19;23187:14;:45::i;:::-;14125:8;23159:73;23101:18;:146::i;:::-;23072:17;:26;23090:7;23072:26;;;;;;;;;;;:175;;;;23319:1;14125:8;23268:19;:47;:52;23264:370;;23341:19;23373:1;23363:7;:11;23341:33;;23433:1;23399:17;:30;23417:11;23399:30;;;;;;;;;;;;:35;23395:224;;23480:13;;23465:11;:28;23461:139;;23557:19;23524:17;:30;23542:11;23524:30;;;;;;;;;;;:52;;;;23461:139;23395:224;23322:312;23264:370;23681:7;23677:2;23662:27;;23671:4;23662:27;;;;;;;;;;;;23700:42;23721:4;23727:2;23731:7;23740:1;23700:20;:42::i;:::-;22230:1520;;;22099:1651;;;:::o;3333:132::-;3408:12;:10;:12::i;:::-;3397:23;;:7;:5;:7::i;:::-;:23;;;3389:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3333:132::o;23758:193::-;23904:39;23921:4;23927:2;23931:7;23904:39;;;;;;;;;;;;:16;:39::i;:::-;23758:193;;;:::o;28754:1679::-;28834:27;28864;28883:7;28864:18;:27::i;:::-;28834:57;;28904:12;28935:19;28904:52;;28970:27;28999:23;29026:35;29053:7;29026:26;:35::i;:::-;28969:92;;;;29078:13;29074:244;;;29127:68;29152:15;29169:4;29175:19;:17;:19::i;:::-;29127:24;:68::i;:::-;29122:184;;29219:43;29236:4;29242:19;:17;:19::i;:::-;29219:16;:43::i;:::-;29214:92;;29271:35;;;;;;;;;;;;;;29214:92;29122:184;29074:244;29330:51;29352:4;29366:1;29370:7;29379:1;29330:21;:51::i;:::-;29421:15;29418:101;;;29502:1;29481:19;29474:30;29418:101;29628:1;13760:3;29598:1;:26;;29597:32;29569:18;:24;29588:4;29569:24;;;;;;;;;;;;;;;;:60;;;;;;;;;;;29675:176;29712:4;29783:53;29798:4;29812:1;29816:19;29783:14;:53::i;:::-;14125:8;13995;29736:43;29735:101;29675:18;:176::i;:::-;29646:17;:26;29664:7;29646:26;;;;;;;;;;;:205;;;;29923:1;14125:8;29872:19;:47;:52;29868:370;;29945:19;29977:1;29967:7;:11;29945:33;;30037:1;30003:17;:30;30021:11;30003:30;;;;;;;;;;;;:35;29999:224;;30084:13;;30069:11;:28;30065:139;;30161:19;30128:17;:30;30146:11;30128:30;;;;;;;;;;;:52;;;;30065:139;29999:224;29926:312;29868:370;30293:7;30289:1;30266:35;;30275:4;30266:35;;;;;;;;;;;;30312:50;30333:4;30347:1;30351:7;30360:1;30312:20;:50::i;:::-;30400:12;;:14;;;;;;;;;;;;;28823:1610;;;;28754:1679;;:::o;28537:112::-;28614:27;28624:2;28628:8;28614:27;;;;;;;;;;;;:9;:27::i;:::-;28537:112;;:::o;18508:633::-;18575:7;18595:12;18610:7;18595:22;;18678:4;18659:15;:13;:15::i;:::-;:23;18655:419;;18712:13;;18705:4;:20;18701:373;;;18750:14;18767:17;:23;18785:4;18767:23;;;;;;;;;;;;18750:40;;18847:1;13995:8;18819:6;:24;:29;18815:240;;18879:113;18896:1;18886:6;:11;18879:113;;18939:17;:25;18957:6;;;;;;;18939:25;;;;;;;;;;;;18930:34;;18879:113;;;19025:6;19018:13;;;;;;18815:240;18727:347;18701:373;18655:419;19102:31;;;;;;;;;;;;;;18508:633;;;;:::o;3795:191::-;3869:16;3888:6;;;;;;;;;;;3869:25;;3914:8;3905:6;;:17;;;;;;;;;;;;;;;;;;3969:8;3938:40;;3959:8;3938:40;;;;;;;;;;;;3858:128;3795:191;:::o;23959:407::-;24134:31;24147:4;24153:2;24157:7;24134:12;:31::i;:::-;24198:1;24180:2;:14;;;:19;24176:183;;24219:56;24250:4;24256:2;24260:7;24269:5;24219:30;:56::i;:::-;24214:145;;24303:40;;;;;;;;;;;;;;24214:145;24176:183;23959:407;;;;:::o;4622:534::-;4678:13;4719:1;4710:5;:10;4706:53;;4737:10;;;;;;;;;;;;;;;;;;;;;4706:53;4769:12;4784:5;4769:20;;4800:14;4825:78;4840:1;4832:4;:9;4825:78;;4858:8;;;;;:::i;:::-;;;;4889:2;4881:10;;;;;:::i;:::-;;;4825:78;;;4913:19;4945:6;4935:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4913:39;;4963:154;4979:1;4970:5;:10;4963:154;;5007:1;4997:11;;;;;:::i;:::-;;;5074:2;5066:5;:10;;;;:::i;:::-;5053:2;:24;;;;:::i;:::-;5040:39;;5023:6;5030;5023:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;5103:2;5094:11;;;;;:::i;:::-;;;4963:154;;;5141:6;5127:21;;;;;4622:534;;;;:::o;21699:392::-;21801:27;21830:23;21871:38;21912:15;:24;21928:7;21912:24;;;;;;;;;;;21871:65;;21996:18;21973:41;;22053:19;22047:26;22028:45;;21958:126;21699:392;;;:::o;21294:397::-;21443:11;21513:16;21506:5;21502:28;21493:37;;21574:16;21563:9;21559:32;21546:45;;21656:15;21645:9;21642:30;21634:5;21623:9;21620:20;21617:56;21607:66;;21294:397;;;;;:::o;24374:159::-;;;;;:::o;31065:311::-;31200:7;31220:16;14186:3;31246:19;:41;;31220:68;;14186:3;31314:31;31325:4;31331:2;31335:9;31314:10;:31::i;:::-;31306:40;;:62;;31299:69;;;31065:311;;;;;:::o;19523:249::-;19603:14;19662:16;19655:5;19651:28;19642:37;;19747:5;19733:11;19708:23;19704:41;19701:52;19694:5;19691:63;19681:73;;19523:249;;;;:::o;24541:158::-;;;;;:::o;2700:98::-;2753:7;2780:10;2773:17;;2700:98;:::o;27840:689::-;27971:19;27977:2;27981:8;27971:5;:19::i;:::-;28050:1;28032:2;:14;;;:19;28028:483;;28072:11;28086:13;;28072:27;;28118:13;28140:8;28134:3;:14;28118:30;;28167:233;28198:62;28237:1;28241:2;28245:7;;;;;;28254:5;28198:30;:62::i;:::-;28193:167;;28296:40;;;;;;;;;;;;;;28193:167;28395:3;28387:5;:11;28167:233;;28482:3;28465:13;;:20;28461:34;;28487:8;;;28461:34;28053:458;;28028:483;27840:689;;;:::o;24707:716::-;24870:4;24916:2;24891:45;;;24937:19;:17;:19::i;:::-;24958:4;24964:7;24973:5;24891:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;24887:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25191:1;25174:6;:13;:18;25170:235;;25220:40;;;;;;;;;;;;;;25170:235;25363:6;25357:13;25348:6;25344:2;25340:15;25333:38;24887:529;25060:54;;;25050:64;;;:6;:64;;;;25043:71;;;24707:716;;;;;;:::o;30910:147::-;31047:6;30910:147;;;;;:::o;25431:1442::-;25504:20;25527:13;;25504:36;;25567:1;25555:8;:13;25551:44;;25577:18;;;;;;;;;;;;;;25551:44;25608:61;25638:1;25642:2;25646:12;25660:8;25608:21;:61::i;:::-;25778:1;13702:2;25748:1;:26;;25747:32;25735:8;:45;25709:18;:22;25728:2;25709:22;;;;;;;;;;;;;;;;:71;;;;;;;;;;;25831:139;25868:2;25922:33;25945:1;25949:2;25953:1;25922:14;:33::i;:::-;25889:30;25910:8;25889:20;:30::i;:::-;:66;25831:18;:139::i;:::-;25797:17;:31;25815:12;25797:31;;;;;;;;;;;:173;;;;25987:16;26018:11;26047:8;26032:12;:23;26018:37;;26122:16;26118:2;26114:25;26102:37;;26342:12;26310:8;26285:1;26236:25;26211:1;26186;26159:215;26454:1;26440:12;26436:20;26394:279;26495:3;26486:7;26483:16;26394:279;;26646:7;26636:8;26633:1;26606:25;26603:1;26600;26595:59;26548:1;26539:7;26535:15;26524:26;;26394:279;;;26398:77;26718:1;26706:8;:13;26702:45;;26728:19;;;;;;;;;;;;;;26702:45;26780:3;26764:13;:19;;;;25682:1113;;26805:60;26834:1;26838:2;26842:12;26856:8;26805:20;:60::i;:::-;25493:1380;25431:1442;;:::o;19780:199::-;19850:14;19958:1;19948:8;19945:15;19919:24;19915:46;19905:56;;19780:199;;;:::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:468::-;9634:6;9642;9691:2;9679:9;9670:7;9666:23;9662:32;9659:119;;;9697:79;;:::i;:::-;9659:119;9817:1;9842:53;9887:7;9878:6;9867:9;9863:22;9842:53;:::i;:::-;9832:63;;9788:117;9944:2;9970:50;10012:7;10003:6;9992:9;9988:22;9970:50;:::i;:::-;9960:60;;9915:115;9569:468;;;;;:::o;10043:307::-;10104:4;10194:18;10186:6;10183:30;10180:56;;;10216:18;;:::i;:::-;10180:56;10254:29;10276:6;10254:29;:::i;:::-;10246:37;;10338:4;10332;10328:15;10320:23;;10043:307;;;:::o;10356:423::-;10433:5;10458:65;10474:48;10515:6;10474:48;:::i;:::-;10458:65;:::i;:::-;10449:74;;10546:6;10539:5;10532:21;10584:4;10577:5;10573:16;10622:3;10613:6;10608:3;10604:16;10601:25;10598:112;;;10629:79;;:::i;:::-;10598:112;10719:54;10766:6;10761:3;10756;10719:54;:::i;:::-;10439:340;10356:423;;;;;:::o;10798:338::-;10853:5;10902:3;10895:4;10887:6;10883:17;10879:27;10869:122;;10910:79;;:::i;:::-;10869:122;11027:6;11014:20;11052:78;11126:3;11118:6;11111:4;11103:6;11099:17;11052:78;:::i;:::-;11043:87;;10859:277;10798:338;;;;:::o;11142:943::-;11237:6;11245;11253;11261;11310:3;11298:9;11289:7;11285:23;11281:33;11278:120;;;11317:79;;:::i;:::-;11278:120;11437:1;11462:53;11507:7;11498:6;11487:9;11483:22;11462:53;:::i;:::-;11452:63;;11408:117;11564:2;11590:53;11635:7;11626:6;11615:9;11611:22;11590:53;:::i;:::-;11580:63;;11535:118;11692:2;11718:53;11763:7;11754:6;11743:9;11739:22;11718:53;:::i;:::-;11708:63;;11663:118;11848:2;11837:9;11833:18;11820:32;11879:18;11871:6;11868:30;11865:117;;;11901:79;;:::i;:::-;11865:117;12006:62;12060:7;12051:6;12040:9;12036:22;12006:62;:::i;:::-;11996:72;;11791:287;11142:943;;;;;;;:::o;12091:474::-;12159:6;12167;12216:2;12204:9;12195:7;12191:23;12187:32;12184:119;;;12222:79;;:::i;:::-;12184:119;12342:1;12367:53;12412:7;12403:6;12392:9;12388:22;12367:53;:::i;:::-;12357:63;;12313:117;12469:2;12495:53;12540:7;12531:6;12520:9;12516:22;12495:53;:::i;:::-;12485:63;;12440:118;12091:474;;;;;:::o;12571:648::-;12646:6;12654;12703:2;12691:9;12682:7;12678:23;12674:32;12671:119;;;12709:79;;:::i;:::-;12671:119;12829:1;12854:50;12896:7;12887:6;12876:9;12872:22;12854:50;:::i;:::-;12844:60;;12800:114;12981:2;12970:9;12966:18;12953:32;13012:18;13004:6;13001:30;12998:117;;;13034:79;;:::i;:::-;12998:117;13139:63;13194:7;13185:6;13174:9;13170:22;13139:63;:::i;:::-;13129:73;;12924:288;12571:648;;;;;:::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:167::-;18107:19;18103:1;18095:6;18091:14;18084:43;17967:167;:::o;18140:366::-;18282:3;18303:67;18367:2;18362:3;18303:67;:::i;:::-;18296:74;;18379:93;18468:3;18379:93;:::i;:::-;18497:2;18492:3;18488:12;18481:19;;18140:366;;;:::o;18512:419::-;18678:4;18716:2;18705:9;18701:18;18693:26;;18765:9;18759:4;18755:20;18751:1;18740:9;18736:17;18729:47;18793:131;18919:4;18793:131;:::i;:::-;18785:139;;18512:419;;;:::o;18937:141::-;18986:4;19009:3;19001:11;;19032:3;19029:1;19022:14;19066:4;19063:1;19053:18;19045:26;;18937:141;;;:::o;19084:93::-;19121:6;19168:2;19163;19156:5;19152:14;19148:23;19138:33;;19084:93;;;:::o;19183:107::-;19227:8;19277:5;19271:4;19267:16;19246:37;;19183:107;;;;:::o;19296:393::-;19365:6;19415:1;19403:10;19399:18;19438:97;19468:66;19457:9;19438:97;:::i;:::-;19556:39;19586:8;19575:9;19556:39;:::i;:::-;19544:51;;19628:4;19624:9;19617:5;19613:21;19604:30;;19677:4;19667:8;19663:19;19656:5;19653:30;19643:40;;19372:317;;19296:393;;;;;:::o;19695:60::-;19723:3;19744:5;19737:12;;19695:60;;;:::o;19761:142::-;19811:9;19844:53;19862:34;19871:24;19889:5;19871:24;:::i;:::-;19862:34;:::i;:::-;19844:53;:::i;:::-;19831:66;;19761:142;;;:::o;19909:75::-;19952:3;19973:5;19966:12;;19909:75;;;:::o;19990:269::-;20100:39;20131:7;20100:39;:::i;:::-;20161:91;20210:41;20234:16;20210:41;:::i;:::-;20202:6;20195:4;20189:11;20161:91;:::i;:::-;20155:4;20148:105;20066:193;19990:269;;;:::o;20265:73::-;20310:3;20265:73;:::o;20344:189::-;20421:32;;:::i;:::-;20462:65;20520:6;20512;20506:4;20462:65;:::i;:::-;20397:136;20344:189;;:::o;20539:186::-;20599:120;20616:3;20609:5;20606:14;20599:120;;;20670:39;20707:1;20700:5;20670:39;:::i;:::-;20643:1;20636:5;20632:13;20623:22;;20599:120;;;20539:186;;:::o;20731:543::-;20832:2;20827:3;20824:11;20821:446;;;20866:38;20898:5;20866:38;:::i;:::-;20950:29;20968:10;20950:29;:::i;:::-;20940:8;20936:44;21133:2;21121:10;21118:18;21115:49;;;21154:8;21139:23;;21115:49;21177:80;21233:22;21251:3;21233:22;:::i;:::-;21223:8;21219:37;21206:11;21177:80;:::i;:::-;20836:431;;20821:446;20731:543;;;:::o;21280:117::-;21334:8;21384:5;21378:4;21374:16;21353:37;;21280:117;;;;:::o;21403:169::-;21447:6;21480:51;21528:1;21524:6;21516:5;21513:1;21509:13;21480:51;:::i;:::-;21476:56;21561:4;21555;21551:15;21541:25;;21454:118;21403:169;;;;:::o;21577:295::-;21653:4;21799:29;21824:3;21818:4;21799:29;:::i;:::-;21791:37;;21861:3;21858:1;21854:11;21848:4;21845:21;21837:29;;21577:295;;;;:::o;21877:1395::-;21994:37;22027:3;21994:37;:::i;:::-;22096:18;22088:6;22085:30;22082:56;;;22118:18;;:::i;:::-;22082:56;22162:38;22194:4;22188:11;22162:38;:::i;:::-;22247:67;22307:6;22299;22293:4;22247:67;:::i;:::-;22341:1;22365:4;22352:17;;22397:2;22389:6;22386:14;22414:1;22409:618;;;;23071:1;23088:6;23085:77;;;23137:9;23132:3;23128:19;23122:26;23113:35;;23085:77;23188:67;23248:6;23241:5;23188:67;:::i;:::-;23182:4;23175:81;23044:222;22379:887;;22409:618;22461:4;22457:9;22449:6;22445:22;22495:37;22527:4;22495:37;:::i;:::-;22554:1;22568:208;22582:7;22579:1;22576:14;22568:208;;;22661:9;22656:3;22652:19;22646:26;22638:6;22631:42;22712:1;22704:6;22700:14;22690:24;;22759:2;22748:9;22744:18;22731:31;;22605:4;22602:1;22598:12;22593:17;;22568:208;;;22804:6;22795:7;22792:19;22789:179;;;22862:9;22857:3;22853:19;22847:26;22905:48;22947:4;22939:6;22935:17;22924:9;22905:48;:::i;:::-;22897:6;22890:64;22812:156;22789:179;23014:1;23010;23002:6;22998:14;22994:22;22988:4;22981:36;22416:611;;;22379:887;;21969:1303;;;21877:1395;;:::o;23278:180::-;23418:32;23414:1;23406:6;23402:14;23395:56;23278:180;:::o;23464:366::-;23606:3;23627:67;23691:2;23686:3;23627:67;:::i;:::-;23620:74;;23703:93;23792:3;23703:93;:::i;:::-;23821:2;23816:3;23812:12;23805:19;;23464:366;;;:::o;23836:419::-;24002:4;24040:2;24029:9;24025:18;24017:26;;24089:9;24083:4;24079:20;24075:1;24064:9;24060:17;24053:47;24117:131;24243:4;24117:131;:::i;:::-;24109:139;;23836:419;;;:::o;24261:194::-;24301:4;24321:20;24339:1;24321:20;:::i;:::-;24316:25;;24355:20;24373:1;24355:20;:::i;:::-;24350:25;;24399:1;24396;24392:9;24384:17;;24423:1;24417:4;24414:11;24411:37;;;24428:18;;:::i;:::-;24411:37;24261:194;;;;:::o;24461:348::-;24501:7;24524:20;24542:1;24524:20;:::i;:::-;24519:25;;24558:20;24576:1;24558:20;:::i;:::-;24553:25;;24746:1;24678:66;24674:74;24671:1;24668:81;24663:1;24656:9;24649:17;24645:105;24642:131;;;24753:18;;:::i;:::-;24642:131;24801:1;24798;24794:9;24783:20;;24461:348;;;;:::o;24815:163::-;24955:15;24951:1;24943:6;24939:14;24932:39;24815:163;:::o;24984:366::-;25126:3;25147:67;25211:2;25206:3;25147:67;:::i;:::-;25140:74;;25223:93;25312:3;25223:93;:::i;:::-;25341:2;25336:3;25332:12;25325:19;;24984:366;;;:::o;25356:419::-;25522:4;25560:2;25549:9;25545:18;25537:26;;25609:9;25603:4;25599:20;25595:1;25584:9;25580:17;25573:47;25637:131;25763:4;25637:131;:::i;:::-;25629:139;;25356:419;;;:::o;25781:166::-;25921:18;25917:1;25909:6;25905:14;25898:42;25781:166;:::o;25953:366::-;26095:3;26116:67;26180:2;26175:3;26116:67;:::i;:::-;26109:74;;26192:93;26281:3;26192:93;:::i;:::-;26310:2;26305:3;26301:12;26294:19;;25953:366;;;:::o;26325:419::-;26491:4;26529:2;26518:9;26514:18;26506:26;;26578:9;26572:4;26568:20;26564:1;26553:9;26549:17;26542:47;26606:131;26732:4;26606:131;:::i;:::-;26598:139;;26325:419;;;:::o;26750:179::-;26890:31;26886:1;26878:6;26874:14;26867:55;26750:179;:::o;26935:366::-;27077:3;27098:67;27162:2;27157:3;27098:67;:::i;:::-;27091:74;;27174:93;27263:3;27174:93;:::i;:::-;27292:2;27287:3;27283:12;27276:19;;26935:366;;;:::o;27307:419::-;27473:4;27511:2;27500:9;27496:18;27488:26;;27560:9;27554:4;27550:20;27546:1;27535:9;27531:17;27524:47;27588:131;27714:4;27588:131;:::i;:::-;27580:139;;27307:419;;;:::o;27732:240::-;27872:34;27868:1;27860:6;27856:14;27849:58;27941:23;27936:2;27928:6;27924:15;27917:48;27732:240;:::o;27978:366::-;28120:3;28141:67;28205:2;28200:3;28141:67;:::i;:::-;28134:74;;28217:93;28306:3;28217:93;:::i;:::-;28335:2;28330:3;28326:12;28319:19;;27978:366;;;:::o;28350:419::-;28516:4;28554:2;28543:9;28539:18;28531:26;;28603:9;28597:4;28593:20;28589:1;28578:9;28574:17;28567:47;28631:131;28757:4;28631:131;:::i;:::-;28623:139;;28350:419;;;:::o;28775:168::-;28915:20;28911:1;28903:6;28899:14;28892:44;28775:168;:::o;28949:366::-;29091:3;29112:67;29176:2;29171:3;29112:67;:::i;:::-;29105:74;;29188:93;29277:3;29188:93;:::i;:::-;29306:2;29301:3;29297:12;29290:19;;28949:366;;;:::o;29321:419::-;29487:4;29525:2;29514:9;29510:18;29502:26;;29574:9;29568:4;29564:20;29560:1;29549:9;29545:17;29538:47;29602:131;29728:4;29602:131;:::i;:::-;29594:139;;29321:419;;;:::o;29746:148::-;29848:11;29885:3;29870:18;;29746:148;;;;:::o;29924:874::-;30027:3;30064:5;30058:12;30093:36;30119:9;30093:36;:::i;:::-;30145:89;30227:6;30222:3;30145:89;:::i;:::-;30138:96;;30265:1;30254:9;30250:17;30281:1;30276:166;;;;30456:1;30451:341;;;;30243:549;;30276:166;30360:4;30356:9;30345;30341:25;30336:3;30329:38;30422:6;30415:14;30408:22;30400:6;30396:35;30391:3;30387:45;30380:52;;30276:166;;30451:341;30518:38;30550:5;30518:38;:::i;:::-;30578:1;30592:154;30606:6;30603:1;30600:13;30592:154;;;30680:7;30674:14;30670:1;30665:3;30661:11;30654:35;30730:1;30721:7;30717:15;30706:26;;30628:4;30625:1;30621:12;30616:17;;30592:154;;;30775:6;30770:3;30766:16;30759:23;;30458:334;;30243:549;;30031:767;;29924:874;;;;:::o;30804:390::-;30910:3;30938:39;30971:5;30938:39;:::i;:::-;30993:89;31075:6;31070:3;30993:89;:::i;:::-;30986:96;;31091:65;31149:6;31144:3;31137:4;31130:5;31126:16;31091:65;:::i;:::-;31181:6;31176:3;31172:16;31165:23;;30914:280;30804:390;;;;:::o;31200:429::-;31377:3;31399:92;31487:3;31478:6;31399:92;:::i;:::-;31392:99;;31508:95;31599:3;31590:6;31508:95;:::i;:::-;31501:102;;31620:3;31613:10;;31200:429;;;;;:::o;31635:225::-;31775:34;31771:1;31763:6;31759:14;31752:58;31844:8;31839:2;31831:6;31827:15;31820:33;31635:225;:::o;31866:366::-;32008:3;32029:67;32093:2;32088:3;32029:67;:::i;:::-;32022:74;;32105:93;32194:3;32105:93;:::i;:::-;32223:2;32218:3;32214:12;32207:19;;31866:366;;;:::o;32238:419::-;32404:4;32442:2;32431:9;32427:18;32419:26;;32491:9;32485:4;32481:20;32477:1;32466:9;32462:17;32455:47;32519:131;32645:4;32519:131;:::i;:::-;32511:139;;32238:419;;;:::o;32663:182::-;32803:34;32799:1;32791:6;32787:14;32780:58;32663:182;:::o;32851:366::-;32993:3;33014:67;33078:2;33073:3;33014:67;:::i;:::-;33007:74;;33090:93;33179:3;33090:93;:::i;:::-;33208:2;33203:3;33199:12;33192:19;;32851:366;;;:::o;33223:419::-;33389:4;33427:2;33416:9;33412:18;33404:26;;33476:9;33470:4;33466:20;33462:1;33451:9;33447:17;33440:47;33504:131;33630:4;33504:131;:::i;:::-;33496:139;;33223:419;;;:::o;33648:233::-;33687:3;33710:24;33728:5;33710:24;:::i;:::-;33701:33;;33756:66;33749:5;33746:77;33743:103;;33826:18;;:::i;:::-;33743:103;33873:1;33866:5;33862:13;33855:20;;33648:233;;;:::o;33887:180::-;33935:77;33932:1;33925:88;34032:4;34029:1;34022:15;34056:4;34053:1;34046:15;34073:185;34113:1;34130:20;34148:1;34130:20;:::i;:::-;34125:25;;34164:20;34182:1;34164:20;:::i;:::-;34159:25;;34203:1;34193:35;;34208:18;;:::i;:::-;34193:35;34250:1;34247;34243:9;34238:14;;34073:185;;;;:::o;34264:176::-;34296:1;34313:20;34331:1;34313:20;:::i;:::-;34308:25;;34347:20;34365:1;34347:20;:::i;:::-;34342:25;;34386:1;34376:35;;34391:18;;:::i;:::-;34376:35;34432:1;34429;34425:9;34420:14;;34264:176;;;;:::o;34446:180::-;34494:77;34491:1;34484:88;34591:4;34588:1;34581:15;34615:4;34612:1;34605:15;34632:98;34683:6;34717:5;34711:12;34701:22;;34632:98;;;:::o;34736:168::-;34819:11;34853:6;34848:3;34841:19;34893:4;34888:3;34884:14;34869:29;;34736:168;;;;:::o;34910:373::-;34996:3;35024:38;35056:5;35024:38;:::i;:::-;35078:70;35141:6;35136:3;35078:70;:::i;:::-;35071:77;;35157:65;35215:6;35210:3;35203:4;35196:5;35192:16;35157:65;:::i;:::-;35247:29;35269:6;35247:29;:::i;:::-;35242:3;35238:39;35231:46;;35000:283;34910:373;;;;:::o;35289:640::-;35484:4;35522:3;35511:9;35507:19;35499:27;;35536:71;35604:1;35593:9;35589:17;35580:6;35536:71;:::i;:::-;35617:72;35685:2;35674:9;35670:18;35661:6;35617:72;:::i;:::-;35699;35767:2;35756:9;35752:18;35743:6;35699:72;:::i;:::-;35818:9;35812:4;35808:20;35803:2;35792:9;35788:18;35781:48;35846:76;35917:4;35908:6;35846:76;:::i;:::-;35838:84;;35289:640;;;;;;;:::o;35935:141::-;35991:5;36022:6;36016:13;36007:22;;36038:32;36064:5;36038:32;:::i;:::-;35935:141;;;;:::o;36082:349::-;36151:6;36200:2;36188:9;36179:7;36175:23;36171:32;36168:119;;;36206:79;;:::i;:::-;36168:119;36326:1;36351:63;36406:7;36397:6;36386:9;36382:22;36351:63;:::i;:::-;36341:73;;36297:127;36082:349;;;;:::o

Swarm Source

ipfs://702cf635f46a5208bad4f47417501240336933b3c284b6709bb37ffe6a5ec27e
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.