ETH Price: $3,279.69 (-1.52%)
Gas: 4.52 Gwei

Token

Omni Doors (odoors)
 

Overview

Max Total Supply

0 odoors

Holders

969

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
4 odoors
0x09E61F79948179C72E743E30b6fCF9ebb36A4BfE
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:
OMNIDOORS

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-12
*/

// SPDX-License-Identifier: Unlicense

pragma solidity >=0.5.0;

interface ILayerZeroUserApplicationConfig {
    // @notice set the configuration of the LayerZero messaging library of the specified version
    // @param _version - messaging library version
    // @param _chainId - the chainId for the pending config change
    // @param _configType - type of configuration. every messaging library has its own convention.
    // @param _config - configuration in the bytes. can encode arbitrary content.
    function setConfig(
        uint16 _version,
        uint16 _chainId,
        uint256 _configType,
        bytes calldata _config
    ) external;

    // @notice set the send() LayerZero messaging library version to _version
    // @param _version - new messaging library version
    function setSendVersion(uint16 _version) external;

    // @notice set the lzReceive() LayerZero messaging library version to _version
    // @param _version - new messaging library version
    function setReceiveVersion(uint16 _version) external;

    // @notice Only when the UA needs to resume the message flow in blocking mode and clear the stored payload
    // @param _srcChainId - the chainId of the source chain
    // @param _srcAddress - the contract address of the source contract at the source chain
    function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress)
        external;
}

pragma solidity >=0.5.0;

interface ILayerZeroEndpoint is ILayerZeroUserApplicationConfig {
    // @notice send a LayerZero message to the specified address at a LayerZero endpoint.
    // @param _dstChainId - the destination chain identifier
    // @param _destination - the address on destination chain (in bytes). address length/format may vary by chains
    // @param _payload - a custom bytes payload to send to the destination contract
    // @param _refundAddress - if the source transaction is cheaper than the amount of value passed, refund the additional amount to this address
    // @param _zroPaymentAddress - the address of the ZRO token holder who would pay for the transaction
    // @param _adapterParams - parameters for custom functionality. e.g. receive airdropped native gas from the relayer on destination
    function send(
        uint16 _dstChainId,
        bytes calldata _destination,
        bytes calldata _payload,
        address payable _refundAddress,
        address _zroPaymentAddress,
        bytes calldata _adapterParams
    ) external payable;

    // @notice used by the messaging library to publish verified payload
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source contract (as bytes) at the source chain
    // @param _dstAddress - the address on destination chain
    // @param _nonce - the unbound message ordering nonce
    // @param _gasLimit - the gas limit for external contract execution
    // @param _payload - verified payload to send to the destination contract
    function receivePayload(
        uint16 _srcChainId,
        bytes calldata _srcAddress,
        address _dstAddress,
        uint64 _nonce,
        uint256 _gasLimit,
        bytes calldata _payload
    ) external;

    // @notice get the inboundNonce of a receiver from a source chain which could be EVM or non-EVM chain
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source chain contract address
    function getInboundNonce(uint16 _srcChainId, bytes calldata _srcAddress)
        external
        view
        returns (uint64);

    // @notice get the outboundNonce from this source chain which, consequently, is always an EVM
    // @param _srcAddress - the source chain contract address
    function getOutboundNonce(uint16 _dstChainId, address _srcAddress)
        external
        view
        returns (uint64);

    // @notice gets a quote in source native gas, for the amount that send() requires to pay for message delivery
    // @param _dstChainId - the destination chain identifier
    // @param _userApplication - the user app address on this EVM chain
    // @param _payload - the custom message to send over LayerZero
    // @param _payInZRO - if false, user app pays the protocol fee in native token
    // @param _adapterParam - parameters for the adapter service, e.g. send some dust native token to dstChain
    function estimateFees(
        uint16 _dstChainId,
        address _userApplication,
        bytes calldata _payload,
        bool _payInZRO,
        bytes calldata _adapterParam
    ) external view returns (uint256 nativeFee, uint256 zroFee);

    // @notice get this Endpoint's immutable source identifier
    function getChainId() external view returns (uint16);

    // @notice the interface to retry failed message on this Endpoint destination
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source chain contract address
    // @param _payload - the payload to be retried
    function retryPayload(
        uint16 _srcChainId,
        bytes calldata _srcAddress,
        bytes calldata _payload
    ) external;

    // @notice query if any STORED payload (message blocking) at the endpoint.
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source chain contract address
    function hasStoredPayload(uint16 _srcChainId, bytes calldata _srcAddress)
        external
        view
        returns (bool);

    // @notice query if the _libraryAddress is valid for sending msgs.
    // @param _userApplication - the user app address on this EVM chain
    function getSendLibraryAddress(address _userApplication)
        external
        view
        returns (address);

    // @notice query if the _libraryAddress is valid for receiving msgs.
    // @param _userApplication - the user app address on this EVM chain
    function getReceiveLibraryAddress(address _userApplication)
        external
        view
        returns (address);

    // @notice query if the non-reentrancy guard for send() is on
    // @return true if the guard is on. false otherwise
    function isSendingPayload() external view returns (bool);

    // @notice query if the non-reentrancy guard for receive() is on
    // @return true if the guard is on. false otherwise
    function isReceivingPayload() external view returns (bool);

    // @notice get the configuration of the LayerZero messaging library of the specified version
    // @param _version - messaging library version
    // @param _chainId - the chainId for the pending config change
    // @param _userApplication - the contract address of the user application
    // @param _configType - type of configuration. every messaging library has its own convention.
    function getConfig(
        uint16 _version,
        uint16 _chainId,
        address _userApplication,
        uint256 _configType
    ) external view returns (bytes memory);

    // @notice get the send() LayerZero messaging library version
    // @param _userApplication - the contract address of the user application
    function getSendVersion(address _userApplication)
        external
        view
        returns (uint16);

    // @notice get the lzReceive() LayerZero messaging library version
    // @param _userApplication - the contract address of the user application
    function getReceiveVersion(address _userApplication)
        external
        view
        returns (uint16);
}

pragma solidity >=0.5.0;

interface ILayerZeroReceiver {
    // @notice LayerZero endpoint will invoke this function to deliver the message on the destination
    // @param _srcChainId - the source endpoint identifier
    // @param _srcAddress - the source sending contract address from the source chain
    // @param _nonce - the ordered message nonce
    // @param _payload - the signed payload is the UA bytes has encoded to be sent
    function lzReceive(
        uint16 _srcChainId,
        bytes calldata _srcAddress,
        uint64 _nonce,
        bytes calldata _payload
    ) external;
}


pragma solidity ^0.8.0;

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length)
        internal
        pure
        returns (string memory)
    {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

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
    );

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

pragma solidity ^0.8.0;

library Address {
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

interface IERC165 {

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

pragma solidity ^0.8.0;

abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        returns (bool)
    {
        return interfaceId == type(IERC165).interfaceId;
    }
}

pragma solidity ^0.8.0;

interface IERC721 is IERC165 {

    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
    ) external;

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

    function approve(address to, uint256 tokenId) external;

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

    function setApprovalForAll(address operator, bool _approved) external;

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

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

pragma solidity ^0.8.0;

interface IERC721Metadata is IERC721 {

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

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

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

pragma solidity ^0.8.0;

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

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

    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC165, IERC165)
        returns (bool)
    {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    function balanceOf(address owner)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            owner != address(0),
            "ERC721: balance query for the zero address"
        );
        return _balances[owner];
    }

    function ownerOf(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        address owner = _owners[tokenId];
        require(
            owner != address(0),
            "ERC721: owner query for nonexistent token"
        );
        return owner;
    }

    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)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

        string memory baseURI = _baseURI();
        return
            bytes(baseURI).length > 0
                ? string(abi.encodePacked(baseURI, tokenId.toString()))
                : "";
    }

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

    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    function getApproved(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        require(
            _exists(tokenId),
            "ERC721: approved query for nonexistent token"
        );

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: transfer caller is not owner nor approved"
        );

        _transfer(from, to, tokenId);
    }

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

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: transfer caller is not owner nor approved"
        );
        _safeTransfer(from, to, tokenId, _data);
    }

    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    function _isApprovedOrOwner(address spender, uint256 tokenId)
        internal
        view
        virtual
        returns (bool)
    {
        require(
            _exists(tokenId),
            "ERC721: operator query for nonexistent token"
        );
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner ||
            getApproved(tokenId) == spender ||
            isApprovedForAll(owner, spender));
    }

    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(
            ERC721.ownerOf(tokenId) == from,
            "ERC721: transfer of token that is not own"
        );
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try
                IERC721Receiver(to).onERC721Received(
                    _msgSender(),
                    from,
                    tokenId,
                    _data
                )
            returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

pragma solidity ^0.8.6;

abstract contract NonblockingReceiver is Ownable, ILayerZeroReceiver {
    ILayerZeroEndpoint internal endpoint;

    struct FailedMessages {
        uint256 payloadLength;
        bytes32 payloadHash;
    }

    mapping(uint16 => mapping(bytes => mapping(uint256 => FailedMessages)))
        public failedMessages;
    mapping(uint16 => bytes) public trustedRemoteLookup;

    event MessageFailed(
        uint16 _srcChainId,
        bytes _srcAddress,
        uint64 _nonce,
        bytes _payload
    );

    function lzReceive(
        uint16 _srcChainId,
        bytes memory _srcAddress,
        uint64 _nonce,
        bytes memory _payload
    ) external override {
        require(msg.sender == address(endpoint)); // boilerplate! lzReceive must be called by the endpoint for security
        require(
            _srcAddress.length == trustedRemoteLookup[_srcChainId].length &&
                keccak256(_srcAddress) ==
                keccak256(trustedRemoteLookup[_srcChainId]),
            "NonblockingReceiver: invalid source sending contract"
        );

        // try-catch all errors/exceptions
        // having failed messages does not block messages passing
        try this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload) {
            // do nothing
        } catch {
            // error / exception
            failedMessages[_srcChainId][_srcAddress][_nonce] = FailedMessages(
                _payload.length,
                keccak256(_payload)
            );
            emit MessageFailed(_srcChainId, _srcAddress, _nonce, _payload);
        }
    }

    function onLzReceive(
        uint16 _srcChainId,
        bytes memory _srcAddress,
        uint64 _nonce,
        bytes memory _payload
    ) public {
        // only internal transaction
        require(
            msg.sender == address(this),
            "NonblockingReceiver: caller must be Bridge."
        );

        // handle incoming message
        _LzReceive(_srcChainId, _srcAddress, _nonce, _payload);
    }

    // abstract function
    function _LzReceive(
        uint16 _srcChainId,
        bytes memory _srcAddress,
        uint64 _nonce,
        bytes memory _payload
    ) internal virtual;

    function _lzSend(
        uint16 _dstChainId,
        bytes memory _payload,
        address payable _refundAddress,
        address _zroPaymentAddress,
        bytes memory _txParam
    ) internal {
        endpoint.send{value: msg.value}(
            _dstChainId,
            trustedRemoteLookup[_dstChainId],
            _payload,
            _refundAddress,
            _zroPaymentAddress,
            _txParam
        );
    }

    function retryMessage(
        uint16 _srcChainId,
        bytes memory _srcAddress,
        uint64 _nonce,
        bytes calldata _payload
    ) external payable {
        // assert there is message to retry
        FailedMessages storage failedMsg = failedMessages[_srcChainId][
            _srcAddress
        ][_nonce];
        require(
            failedMsg.payloadHash != bytes32(0),
            "NonblockingReceiver: no stored message"
        );
        require(
            _payload.length == failedMsg.payloadLength &&
                keccak256(_payload) == failedMsg.payloadHash,
            "LayerZero: invalid payload"
        );
        // clear the stored message
        failedMsg.payloadLength = 0;
        failedMsg.payloadHash = bytes32(0);
        // execute the message. revert if it fails again
        this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload);
    }

    function setTrustedRemote(uint16 _chainId, bytes calldata _trustedRemote)
        external
        onlyOwner
    {
        trustedRemoteLookup[_chainId] = _trustedRemote;
    }
}

pragma solidity ^0.8.7;

contract OMNIDOORS is Ownable, ERC721, NonblockingReceiver {
    address public _owner;
    string private baseURI;
    uint256 nextTokenId = 5900;
    uint256 MAX_NETWORK_MINT = 9300;

    uint256 gasForDestinationLzReceive = 350000;

    constructor(string memory baseURI_, address _layerZeroEndpoint)
        ERC721("Omni Doors", "odoors")
    {
        _owner = msg.sender;
        endpoint = ILayerZeroEndpoint(_layerZeroEndpoint);
        baseURI = baseURI_;
        for (uint256 i = 0; i < 330; i++) {
            _safeMint(_owner, ++nextTokenId);
        }
    }

    function mint(uint8 numTokens) external payable {
        require(numTokens < 2, "OMNI DOORS: Max 1 NFTs per transaction");
        require(
            nextTokenId + numTokens <= MAX_NETWORK_MINT,
            "OMNI DOORS: Mint exceeds supply for this network"
        );
	for (uint8 i = 0; i < numTokens; i++) {
            _safeMint(msg.sender, ++nextTokenId);
	}
    }

    function traverseChains(uint16 _chainId, uint256 tokenId) public payable {
        require(
            msg.sender == ownerOf(tokenId),
            "You must own the token to traverse"
        );
        require(
            trustedRemoteLookup[_chainId].length > 0,
            "This chain is currently unavailable for travel"
        );

        // burn NFT, eliminating it from circulation on src chain
        _burn(tokenId);

        // abi.encode() the payload with the values to send
        bytes memory payload = abi.encode(msg.sender, tokenId);

        // encode adapterParams to specify more gas for the destination
        uint16 version = 1;
        bytes memory adapterParams = abi.encodePacked(
            version,
            gasForDestinationLzReceive
        );

        // get the fees we need to pay to LayerZero + Relayer to cover message delivery
        // you will be refunded for extra gas paid
        (uint256 messageFee, ) = endpoint.estimateFees(
            _chainId,
            address(this),
            payload,
            false,
            adapterParams
        );

        require(
            msg.value >= messageFee,
            "OMNI DOORS: msg.value not enough to cover messageFee. Send gas for message fees"
        );

        endpoint.send{value: msg.value}(
            _chainId, // destination chainId
            trustedRemoteLookup[_chainId], // destination address of nft contract
            payload, // abi.encoded()'ed bytes
            payable(msg.sender), // refund address
            address(0x0), // 'zroPaymentAddress' unused for this
            adapterParams // txParameters
        );
    }

    function setBaseURI(string memory URI) external onlyOwner {
        baseURI = URI;
    }

    function donate() external payable {
    }

    function withdraw(uint256 amt) external onlyOwner {
        (bool sent, ) = payable(_owner).call{value: amt}("");
        require(sent, "OMNI DOORS: Failed to withdraw funds");
    }

    function setGasForDestinationLzReceive(uint256 newVal) external onlyOwner {
        gasForDestinationLzReceive = newVal;
    }

    function _LzReceive(
        uint16 _srcChainId,
        bytes memory _srcAddress,
        uint64 _nonce,
        bytes memory _payload
    ) internal override {
        // decode
        (address toAddr, uint256 tokenId) = abi.decode(
            _payload,
            (address, uint256)
        );

        // mint the tokens back into existence on destination chain
        _safeMint(toAddr, tokenId);
    }

    function _baseURI() internal view override returns (string memory) {
        return baseURI;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"},{"internalType":"address","name":"_layerZeroEndpoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"},{"indexed":false,"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"MessageFailed","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":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"donate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"failedMessages","outputs":[{"internalType":"uint256","name":"payloadLength","type":"uint256"},{"internalType":"bytes32","name":"payloadHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"numTokens","type":"uint8"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"onLzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"retryMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"setGasForDestinationLzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"bytes","name":"_trustedRemote","type":"bytes"}],"name":"setTrustedRemote","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":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"traverseChains","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"trustedRemoteLookup","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405261170c600c55612454600d5562055730600e553480156200002457600080fd5b5060405162005af538038062005af583398181016040528101906200004a91906200086e565b6040518060400160405280600a81526020017f4f6d6e6920446f6f7273000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f6f646f6f72730000000000000000000000000000000000000000000000000000815250620000d6620000ca6200021c60201b60201c565b6200022460201b60201c565b8160019080519060200190620000ee929190620006e0565b50806002908051906020019062000107929190620006e0565b50505033600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600b9080519060200190620001a4929190620006e0565b5060005b61014a8110156200021357620001fd600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c60008154620001eb9062000c12565b919050819055620002e860201b60201c565b80806200020a9062000c12565b915050620001a8565b50505062000dbe565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200030a8282604051806020016040528060008152506200030e60201b60201c565b5050565b6200032083836200037c60201b60201c565b6200033560008484846200050e60201b60201c565b62000377576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200036e90620009d9565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620003ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003e690620009fb565b60405180910390fd5b6200040360008383620006c860201b60201c565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000455919062000aa9565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006200053c8473ffffffffffffffffffffffffffffffffffffffff16620006cd60201b62001c0d1760201c565b15620006bb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200056e6200021c60201b60201c565b8786866040518563ffffffff1660e01b815260040162000592949392919062000985565b602060405180830381600087803b158015620005ad57600080fd5b505af1925050508015620005e157506040513d601f19601f82011682018060405250810190620005de91906200083c565b60015b6200066a573d806000811462000614576040519150601f19603f3d011682016040523d82523d6000602084013e62000619565b606091505b5060008151141562000662576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200065990620009d9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620006c0565b600190505b949350505050565b505050565b600080823b905060008111915050919050565b828054620006ee9062000ba6565b90600052602060002090601f0160209004810192826200071257600085556200075e565b82601f106200072d57805160ff19168380011785556200075e565b828001600101855582156200075e579182015b828111156200075d57825182559160200191906001019062000740565b5b5090506200076d919062000771565b5090565b5b808211156200078c57600081600090555060010162000772565b5090565b6000620007a7620007a18462000a46565b62000a1d565b905082815260208101848484011115620007c657620007c562000cf2565b5b620007d384828562000b70565b509392505050565b600081519050620007ec8162000d8a565b92915050565b600081519050620008038162000da4565b92915050565b600082601f83011262000821576200082062000ced565b5b81516200083384826020860162000790565b91505092915050565b60006020828403121562000855576200085462000cfc565b5b60006200086584828501620007f2565b91505092915050565b6000806040838503121562000888576200088762000cfc565b5b600083015167ffffffffffffffff811115620008a957620008a862000cf7565b5b620008b78582860162000809565b9250506020620008ca85828601620007db565b9150509250929050565b620008df8162000b06565b82525050565b6000620008f28262000a7c565b620008fe818562000a87565b93506200091081856020860162000b70565b6200091b8162000d01565b840191505092915050565b60006200093560328362000a98565b9150620009428262000d12565b604082019050919050565b60006200095c60208362000a98565b9150620009698262000d61565b602082019050919050565b6200097f8162000b66565b82525050565b60006080820190506200099c6000830187620008d4565b620009ab6020830186620008d4565b620009ba604083018562000974565b8181036060830152620009ce8184620008e5565b905095945050505050565b60006020820190508181036000830152620009f48162000926565b9050919050565b6000602082019050818103600083015262000a16816200094d565b9050919050565b600062000a2962000a3c565b905062000a37828262000bdc565b919050565b6000604051905090565b600067ffffffffffffffff82111562000a645762000a6362000cbe565b5b62000a6f8262000d01565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000ab68262000b66565b915062000ac38362000b66565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000afb5762000afa62000c60565b5b828201905092915050565b600062000b138262000b46565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000b9057808201518184015260208101905062000b73565b8381111562000ba0576000848401525b50505050565b6000600282049050600182168062000bbf57607f821691505b6020821081141562000bd65762000bd562000c8f565b5b50919050565b62000be78262000d01565b810181811067ffffffffffffffff8211171562000c095762000c0862000cbe565b5b80604052505050565b600062000c1f8262000b66565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000c555762000c5462000c60565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b62000d958162000b06565b811462000da157600080fd5b50565b62000daf8162000b1a565b811462000dbb57600080fd5b50565b614d278062000dce6000396000f3fe6080604052600436106101c15760003560e01c80637533d788116100f7578063b88d4fde11610095578063e985e9c511610064578063e985e9c514610623578063eb8d72b714610660578063ed88c68e14610689578063f2fde38b14610693576101c1565b8063b88d4fde14610585578063c87b56dd146105ae578063cf89fa03146105eb578063d1deba1f14610607576101c1565b8063943fb872116100d1578063943fb872146104dd57806395d89b4114610506578063a22cb46514610531578063b2bdfa7b1461055a576101c1565b80637533d788146104375780638da5cb5b146104745780638ee749121461049f576101c1565b80632e1a7d4d116101645780636352211e1161013e5780636352211e1461038a5780636ecd2306146103c757806370a08231146103e3578063715018a614610420576101c1565b80632e1a7d4d1461030f57806342842e0e1461033857806355f804b314610361576101c1565b8063081812fc116101a0578063081812fc14610257578063095ea7b3146102945780631c37a822146102bd57806323b872dd146102e6576101c1565b80621d3567146101c657806301ffc9a7146101ef57806306fdde031461022c575b600080fd5b3480156101d257600080fd5b506101ed60048036038101906101e891906131c0565b6106bc565b005b3480156101fb57600080fd5b5061021660048036038101906102119190612f7d565b6108fe565b6040516102239190613abf565b60405180910390f35b34801561023857600080fd5b506102416109e0565b60405161024e9190613afc565b60405180910390f35b34801561026357600080fd5b5061027e6004803603810190610279919061329f565b610a72565b60405161028b9190613a2f565b60405180910390f35b3480156102a057600080fd5b506102bb60048036038101906102b69190612f3d565b610af7565b005b3480156102c957600080fd5b506102e460048036038101906102df91906131c0565b610c0f565b005b3480156102f257600080fd5b5061030d60048036038101906103089190612e27565b610c8f565b005b34801561031b57600080fd5b506103366004803603810190610331919061329f565b610cef565b005b34801561034457600080fd5b5061035f600480360381019061035a9190612e27565b610e3d565b005b34801561036d57600080fd5b5061038860048036038101906103839190612fd7565b610e5d565b005b34801561039657600080fd5b506103b160048036038101906103ac919061329f565b610ef3565b6040516103be9190613a2f565b60405180910390f35b6103e160048036038101906103dc919061330c565b610fa5565b005b3480156103ef57600080fd5b5061040a60048036038101906104059190612d7a565b611086565b6040516104179190613fbd565b60405180910390f35b34801561042c57600080fd5b5061043561113e565b005b34801561044357600080fd5b5061045e60048036038101906104599190613020565b6111c6565b60405161046b9190613ada565b60405180910390f35b34801561048057600080fd5b50610489611266565b6040516104969190613a2f565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c191906130ad565b61128f565b6040516104d4929190613fd8565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff919061329f565b6112e3565b005b34801561051257600080fd5b5061051b611369565b6040516105289190613afc565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190612efd565b6113fb565b005b34801561056657600080fd5b5061056f611411565b60405161057c9190613a2f565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190612e7a565b611437565b005b3480156105ba57600080fd5b506105d560048036038101906105d0919061329f565b611499565b6040516105e29190613afc565b60405180910390f35b6106056004803603810190610600919061325f565b611540565b005b610621600480360381019061061c919061311c565b611833565b005b34801561062f57600080fd5b5061064a60048036038101906106459190612de7565b6119d3565b6040516106579190613abf565b60405180910390f35b34801561066c57600080fd5b506106876004803603810190610682919061304d565b611a67565b005b610691611b13565b005b34801561069f57600080fd5b506106ba60048036038101906106b59190612d7a565b611b15565b005b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461071657600080fd5b600960008561ffff1661ffff168152602001908152602001600020805461073c906142a7565b905083511480156107825750600960008561ffff1661ffff16815260200190815260200160002060405161077091906139b3565b60405180910390208380519060200120145b6107c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b890613d3e565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16631c37a822858585856040518563ffffffff1660e01b81526004016108009493929190613ef4565b600060405180830381600087803b15801561081a57600080fd5b505af192505050801561082b575060015b6108f7576040518060400160405280825181526020018280519060200120815250600860008661ffff1661ffff16815260200190815260200160002084604051610875919061399c565b908152602001604051809103902060008467ffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050507fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d848484846040516108ea9493929190613ef4565b60405180910390a16108f8565b5b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d957506109d882611c20565b5b9050919050565b6060600180546109ef906142a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1b906142a7565b8015610a685780601f10610a3d57610100808354040283529160200191610a68565b820191906000526020600020905b815481529060010190602001808311610a4b57829003601f168201915b5050505050905090565b6000610a7d82611c8a565b610abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab390613cfe565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b0282610ef3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6a90613dbe565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b92611cf6565b73ffffffffffffffffffffffffffffffffffffffff161480610bc15750610bc081610bbb611cf6565b6119d3565b5b610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf790613c3e565b60405180910390fd5b610c0a8383611cfe565b505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490613cbe565b60405180910390fd5b610c8984848484611db7565b50505050565b610ca0610c9a611cf6565b82611de4565b610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd690613dde565b60405180910390fd5b610cea838383611ec2565b505050565b610cf7611cf6565b73ffffffffffffffffffffffffffffffffffffffff16610d15611266565b73ffffffffffffffffffffffffffffffffffffffff1614610d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6290613d1e565b60405180910390fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610db3906139ee565b60006040518083038185875af1925050503d8060008114610df0576040519150601f19603f3d011682016040523d82523d6000602084013e610df5565b606091505b5050905080610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3090613d9e565b60405180910390fd5b5050565b610e5883838360405180602001604052806000815250611437565b505050565b610e65611cf6565b73ffffffffffffffffffffffffffffffffffffffff16610e83611266565b73ffffffffffffffffffffffffffffffffffffffff1614610ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed090613d1e565b60405180910390fd5b80600b9080519060200190610eef929190612a49565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9390613c7e565b60405180910390fd5b80915050919050565b60028160ff1610610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290613b1e565b60405180910390fd5b600d548160ff16600c54610fff91906140eb565b1115611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103790613e1e565b60405180910390fd5b60005b8160ff168160ff1610156110825761106f33600c600081546110649061430a565b91905081905561211e565b808061107a90614353565b915050611043565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ee90613c5e565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611146611cf6565b73ffffffffffffffffffffffffffffffffffffffff16611164611266565b73ffffffffffffffffffffffffffffffffffffffff16146111ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b190613d1e565b60405180910390fd5b6111c4600061213c565b565b600960205280600052604060002060009150905080546111e5906142a7565b80601f0160208091040260200160405190810160405280929190818152602001828054611211906142a7565b801561125e5780601f106112335761010080835404028352916020019161125e565b820191906000526020600020905b81548152906001019060200180831161124157829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60086020528260005260406000208280516020810182018051848252602083016020850120818352809550505050505060205280600052604060002060009250925050508060000154908060010154905082565b6112eb611cf6565b73ffffffffffffffffffffffffffffffffffffffff16611309611266565b73ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690613d1e565b60405180910390fd5b80600e8190555050565b606060028054611378906142a7565b80601f01602080910402602001604051908101604052809291908181526020018280546113a4906142a7565b80156113f15780601f106113c6576101008083540402835291602001916113f1565b820191906000526020600020905b8154815290600101906020018083116113d457829003601f168201915b5050505050905090565b61140d611406611cf6565b8383612200565b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611448611442611cf6565b83611de4565b611487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147e90613dde565b60405180910390fd5b6114938484848461236d565b50505050565b60606114a482611c8a565b6114e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114da90613d7e565b60405180910390fd5b60006114ed6123c9565b9050600081511161150d5760405180602001604052806000815250611538565b806115178461245b565b6040516020016115289291906139ca565b6040516020818303038152906040525b915050919050565b61154981610ef3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ad90613bfe565b60405180910390fd5b6000600960008461ffff1661ffff16815260200190815260200160002080546115de906142a7565b905011611620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161790613bbe565b60405180910390fd5b611629816125bc565b6000338260405160200161163e929190613a96565b6040516020818303038152906040529050600060019050600081600e5460405160200161166c929190613a03565b60405160208183030381529060405290506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108730876000876040518663ffffffff1660e01b81526004016116e3959493929190613e3e565b604080518083038186803b1580156116fa57600080fd5b505afa15801561170e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173291906132cc565b50905080341015611778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176f90613c9e565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c58031003488600960008b61ffff1661ffff16815260200190815260200160002088336000896040518863ffffffff1660e01b81526004016117f996959493929190613f47565b6000604051808303818588803b15801561181257600080fd5b505af1158015611826573d6000803e3d6000fd5b5050505050505050505050565b6000600860008761ffff1661ffff1681526020019081526020016000208560405161185e919061399c565b908152602001604051809103902060008567ffffffffffffffff16815260200190815260200160002090506000801b816001015414156118d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ca90613dfe565b60405180910390fd5b8060000154838390501480156119035750806001015483836040516118f9929190613983565b6040518091039020145b611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193990613bde565b60405180910390fd5b600081600001819055506000801b81600101819055503073ffffffffffffffffffffffffffffffffffffffff16631c37a82287878787876040518663ffffffff1660e01b8152600401611999959493929190613e9f565b600060405180830381600087803b1580156119b357600080fd5b505af11580156119c7573d6000803e3d6000fd5b50505050505050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a6f611cf6565b73ffffffffffffffffffffffffffffffffffffffff16611a8d611266565b73ffffffffffffffffffffffffffffffffffffffff1614611ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ada90613d1e565b60405180910390fd5b8181600960008661ffff1661ffff1681526020019081526020016000209190611b0d929190612acf565b50505050565b565b611b1d611cf6565b73ffffffffffffffffffffffffffffffffffffffff16611b3b611266565b73ffffffffffffffffffffffffffffffffffffffff1614611b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8890613d1e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf890613b5e565b60405180910390fd5b611c0a8161213c565b50565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d7183610ef3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008082806020019051810190611dce9190612da7565b91509150611ddc828261211e565b505050505050565b6000611def82611c8a565b611e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2590613c1e565b60405180910390fd5b6000611e3983610ef3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ea857508373ffffffffffffffffffffffffffffffffffffffff16611e9084610a72565b73ffffffffffffffffffffffffffffffffffffffff16145b80611eb95750611eb881856119d3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ee282610ef3565b73ffffffffffffffffffffffffffffffffffffffff1614611f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2f90613d5e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9f90613b7e565b60405180910390fd5b611fb38383836126cd565b611fbe600082611cfe565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461200e9190614172565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461206591906140eb565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6121388282604051806020016040528060008152506126d2565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561226f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226690613b9e565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123609190613abf565b60405180910390a3505050565b612378848484611ec2565b6123848484848461272d565b6123c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ba90613b3e565b60405180910390fd5b50505050565b6060600b80546123d8906142a7565b80601f0160208091040260200160405190810160405280929190818152602001828054612404906142a7565b80156124515780601f1061242657610100808354040283529160200191612451565b820191906000526020600020905b81548152906001019060200180831161243457829003601f168201915b5050505050905090565b606060008214156124a3576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125b7565b600082905060005b600082146124d55780806124be9061430a565b915050600a826124ce9190614141565b91506124ab565b60008167ffffffffffffffff8111156124f1576124f0614486565b5b6040519080825280601f01601f1916602001820160405280156125235781602001600182028036833780820191505090505b5090505b600085146125b05760018261253c9190614172565b9150600a8561254b9190614399565b603061255791906140eb565b60f81b81838151811061256d5761256c614457565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125a99190614141565b9450612527565b8093505050505b919050565b60006125c782610ef3565b90506125d5816000846126cd565b6125e0600083611cfe565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126309190614172565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6126dc83836128c4565b6126e9600084848461272d565b612728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271f90613b3e565b60405180910390fd5b505050565b600061274e8473ffffffffffffffffffffffffffffffffffffffff16611c0d565b156128b7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612777611cf6565b8786866040518563ffffffff1660e01b81526004016127999493929190613a4a565b602060405180830381600087803b1580156127b357600080fd5b505af19250505080156127e457506040513d601f19601f820116820180604052508101906127e19190612faa565b60015b612867573d8060008114612814576040519150601f19603f3d011682016040523d82523d6000602084013e612819565b606091505b5060008151141561285f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285690613b3e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128bc565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292b90613cde565b60405180910390fd5b612940600083836126cd565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461299091906140eb565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612a55906142a7565b90600052602060002090601f016020900481019282612a775760008555612abe565b82601f10612a9057805160ff1916838001178555612abe565b82800160010185558215612abe579182015b82811115612abd578251825591602001919060010190612aa2565b5b509050612acb9190612b55565b5090565b828054612adb906142a7565b90600052602060002090601f016020900481019282612afd5760008555612b44565b82601f10612b1657803560ff1916838001178555612b44565b82800160010185558215612b44579182015b82811115612b43578235825591602001919060010190612b28565b5b509050612b519190612b55565b5090565b5b80821115612b6e576000816000905550600101612b56565b5090565b6000612b85612b8084614026565b614001565b905082815260208101848484011115612ba157612ba06144c4565b5b612bac848285614265565b509392505050565b6000612bc7612bc284614057565b614001565b905082815260208101848484011115612be357612be26144c4565b5b612bee848285614265565b509392505050565b600081359050612c0581614c39565b92915050565b600081519050612c1a81614c50565b92915050565b600081359050612c2f81614c67565b92915050565b600081359050612c4481614c7e565b92915050565b600081519050612c5981614c7e565b92915050565b60008083601f840112612c7557612c746144ba565b5b8235905067ffffffffffffffff811115612c9257612c916144b5565b5b602083019150836001820283011115612cae57612cad6144bf565b5b9250929050565b600082601f830112612cca57612cc96144ba565b5b8135612cda848260208601612b72565b91505092915050565b600082601f830112612cf857612cf76144ba565b5b8135612d08848260208601612bb4565b91505092915050565b600081359050612d2081614c95565b92915050565b600081359050612d3581614cac565b92915050565b600081519050612d4a81614cac565b92915050565b600081359050612d5f81614cc3565b92915050565b600081359050612d7481614cda565b92915050565b600060208284031215612d9057612d8f6144ce565b5b6000612d9e84828501612bf6565b91505092915050565b60008060408385031215612dbe57612dbd6144ce565b5b6000612dcc85828601612c0b565b9250506020612ddd85828601612d3b565b9150509250929050565b60008060408385031215612dfe57612dfd6144ce565b5b6000612e0c85828601612bf6565b9250506020612e1d85828601612bf6565b9150509250929050565b600080600060608486031215612e4057612e3f6144ce565b5b6000612e4e86828701612bf6565b9350506020612e5f86828701612bf6565b9250506040612e7086828701612d26565b9150509250925092565b60008060008060808587031215612e9457612e936144ce565b5b6000612ea287828801612bf6565b9450506020612eb387828801612bf6565b9350506040612ec487828801612d26565b925050606085013567ffffffffffffffff811115612ee557612ee46144c9565b5b612ef187828801612cb5565b91505092959194509250565b60008060408385031215612f1457612f136144ce565b5b6000612f2285828601612bf6565b9250506020612f3385828601612c20565b9150509250929050565b60008060408385031215612f5457612f536144ce565b5b6000612f6285828601612bf6565b9250506020612f7385828601612d26565b9150509250929050565b600060208284031215612f9357612f926144ce565b5b6000612fa184828501612c35565b91505092915050565b600060208284031215612fc057612fbf6144ce565b5b6000612fce84828501612c4a565b91505092915050565b600060208284031215612fed57612fec6144ce565b5b600082013567ffffffffffffffff81111561300b5761300a6144c9565b5b61301784828501612ce3565b91505092915050565b600060208284031215613036576130356144ce565b5b600061304484828501612d11565b91505092915050565b600080600060408486031215613066576130656144ce565b5b600061307486828701612d11565b935050602084013567ffffffffffffffff811115613095576130946144c9565b5b6130a186828701612c5f565b92509250509250925092565b6000806000606084860312156130c6576130c56144ce565b5b60006130d486828701612d11565b935050602084013567ffffffffffffffff8111156130f5576130f46144c9565b5b61310186828701612cb5565b925050604061311286828701612d26565b9150509250925092565b600080600080600060808688031215613138576131376144ce565b5b600061314688828901612d11565b955050602086013567ffffffffffffffff811115613167576131666144c9565b5b61317388828901612cb5565b945050604061318488828901612d50565b935050606086013567ffffffffffffffff8111156131a5576131a46144c9565b5b6131b188828901612c5f565b92509250509295509295909350565b600080600080608085870312156131da576131d96144ce565b5b60006131e887828801612d11565b945050602085013567ffffffffffffffff811115613209576132086144c9565b5b61321587828801612cb5565b935050604061322687828801612d50565b925050606085013567ffffffffffffffff811115613247576132466144c9565b5b61325387828801612cb5565b91505092959194509250565b60008060408385031215613276576132756144ce565b5b600061328485828601612d11565b925050602061329585828601612d26565b9150509250929050565b6000602082840312156132b5576132b46144ce565b5b60006132c384828501612d26565b91505092915050565b600080604083850312156132e3576132e26144ce565b5b60006132f185828601612d3b565b925050602061330285828601612d3b565b9150509250929050565b600060208284031215613322576133216144ce565b5b600061333084828501612d65565b91505092915050565b613342816141b8565b82525050565b613351816141a6565b82525050565b613360816141ca565b82525050565b61336f816141d6565b82525050565b600061338183856140b3565b935061338e838584614265565b613397836144d3565b840190509392505050565b60006133ae83856140c4565b93506133bb838584614265565b82840190509392505050565b60006133d28261409d565b6133dc81856140b3565b93506133ec818560208601614274565b6133f5816144d3565b840191505092915050565b600061340b8261409d565b61341581856140c4565b9350613425818560208601614274565b80840191505092915050565b6000815461343e816142a7565b61344881866140b3565b945060018216600081146134635760018114613475576134a8565b60ff19831686526020860193506134a8565b61347e85614088565b60005b838110156134a057815481890152600182019150602081019050613481565b808801955050505b50505092915050565b600081546134be816142a7565b6134c881866140c4565b945060018216600081146134e357600181146134f457613527565b60ff19831686528186019350613527565b6134fd85614088565b60005b8381101561351f57815481890152600182019150602081019050613500565b838801955050505b50505092915050565b600061353b826140a8565b61354581856140cf565b9350613555818560208601614274565b61355e816144d3565b840191505092915050565b6000613574826140a8565b61357e81856140e0565b935061358e818560208601614274565b80840191505092915050565b60006135a76026836140cf565b91506135b2826144f1565b604082019050919050565b60006135ca6032836140cf565b91506135d582614540565b604082019050919050565b60006135ed6026836140cf565b91506135f88261458f565b604082019050919050565b60006136106024836140cf565b915061361b826145de565b604082019050919050565b60006136336019836140cf565b915061363e8261462d565b602082019050919050565b6000613656602e836140cf565b915061366182614656565b604082019050919050565b6000613679601a836140cf565b9150613684826146a5565b602082019050919050565b600061369c6022836140cf565b91506136a7826146ce565b604082019050919050565b60006136bf602c836140cf565b91506136ca8261471d565b604082019050919050565b60006136e26038836140cf565b91506136ed8261476c565b604082019050919050565b6000613705602a836140cf565b9150613710826147bb565b604082019050919050565b60006137286029836140cf565b91506137338261480a565b604082019050919050565b600061374b604f836140cf565b915061375682614859565b606082019050919050565b600061376e602b836140cf565b9150613779826148ce565b604082019050919050565b60006137916020836140cf565b915061379c8261491d565b602082019050919050565b60006137b4602c836140cf565b91506137bf82614946565b604082019050919050565b60006137d76020836140cf565b91506137e282614995565b602082019050919050565b60006137fa6034836140cf565b9150613805826149be565b604082019050919050565b600061381d6029836140cf565b915061382882614a0d565b604082019050919050565b6000613840602f836140cf565b915061384b82614a5c565b604082019050919050565b60006138636024836140cf565b915061386e82614aab565b604082019050919050565b60006138866021836140cf565b915061389182614afa565b604082019050919050565b60006138a96000836140c4565b91506138b482614b49565b600082019050919050565b60006138cc6031836140cf565b91506138d782614b4c565b604082019050919050565b60006138ef6026836140cf565b91506138fa82614b9b565b604082019050919050565b60006139126030836140cf565b915061391d82614bea565b604082019050919050565b6139318161420c565b82525050565b6139486139438261420c565b61437d565b82525050565b6139578161423a565b82525050565b61396e6139698261423a565b61438f565b82525050565b61397d81614244565b82525050565b60006139908284866133a2565b91508190509392505050565b60006139a88284613400565b915081905092915050565b60006139bf82846134b1565b915081905092915050565b60006139d68285613569565b91506139e28284613569565b91508190509392505050565b60006139f98261389c565b9150819050919050565b6000613a0f8285613937565b600282019150613a1f828461395d565b6020820191508190509392505050565b6000602082019050613a446000830184613348565b92915050565b6000608082019050613a5f6000830187613348565b613a6c6020830186613348565b613a79604083018561394e565b8181036060830152613a8b81846133c7565b905095945050505050565b6000604082019050613aab6000830185613348565b613ab8602083018461394e565b9392505050565b6000602082019050613ad46000830184613357565b92915050565b60006020820190508181036000830152613af481846133c7565b905092915050565b60006020820190508181036000830152613b168184613530565b905092915050565b60006020820190508181036000830152613b378161359a565b9050919050565b60006020820190508181036000830152613b57816135bd565b9050919050565b60006020820190508181036000830152613b77816135e0565b9050919050565b60006020820190508181036000830152613b9781613603565b9050919050565b60006020820190508181036000830152613bb781613626565b9050919050565b60006020820190508181036000830152613bd781613649565b9050919050565b60006020820190508181036000830152613bf78161366c565b9050919050565b60006020820190508181036000830152613c178161368f565b9050919050565b60006020820190508181036000830152613c37816136b2565b9050919050565b60006020820190508181036000830152613c57816136d5565b9050919050565b60006020820190508181036000830152613c77816136f8565b9050919050565b60006020820190508181036000830152613c978161371b565b9050919050565b60006020820190508181036000830152613cb78161373e565b9050919050565b60006020820190508181036000830152613cd781613761565b9050919050565b60006020820190508181036000830152613cf781613784565b9050919050565b60006020820190508181036000830152613d17816137a7565b9050919050565b60006020820190508181036000830152613d37816137ca565b9050919050565b60006020820190508181036000830152613d57816137ed565b9050919050565b60006020820190508181036000830152613d7781613810565b9050919050565b60006020820190508181036000830152613d9781613833565b9050919050565b60006020820190508181036000830152613db781613856565b9050919050565b60006020820190508181036000830152613dd781613879565b9050919050565b60006020820190508181036000830152613df7816138bf565b9050919050565b60006020820190508181036000830152613e17816138e2565b9050919050565b60006020820190508181036000830152613e3781613905565b9050919050565b600060a082019050613e536000830188613928565b613e606020830187613348565b8181036040830152613e7281866133c7565b9050613e816060830185613357565b8181036080830152613e9381846133c7565b90509695505050505050565b6000608082019050613eb46000830188613928565b8181036020830152613ec681876133c7565b9050613ed56040830186613974565b8181036060830152613ee8818486613375565b90509695505050505050565b6000608082019050613f096000830187613928565b8181036020830152613f1b81866133c7565b9050613f2a6040830185613974565b8181036060830152613f3c81846133c7565b905095945050505050565b600060c082019050613f5c6000830189613928565b8181036020830152613f6e8188613431565b90508181036040830152613f8281876133c7565b9050613f916060830186613339565b613f9e6080830185613348565b81810360a0830152613fb081846133c7565b9050979650505050505050565b6000602082019050613fd2600083018461394e565b92915050565b6000604082019050613fed600083018561394e565b613ffa6020830184613366565b9392505050565b600061400b61401c565b905061401782826142d9565b919050565b6000604051905090565b600067ffffffffffffffff82111561404157614040614486565b5b61404a826144d3565b9050602081019050919050565b600067ffffffffffffffff82111561407257614071614486565b5b61407b826144d3565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006140f68261423a565b91506141018361423a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614136576141356143ca565b5b828201905092915050565b600061414c8261423a565b91506141578361423a565b925082614167576141666143f9565b5b828204905092915050565b600061417d8261423a565b91506141888361423a565b92508282101561419b5761419a6143ca565b5b828203905092915050565b60006141b18261421a565b9050919050565b60006141c38261421a565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614292578082015181840152602081019050614277565b838111156142a1576000848401525b50505050565b600060028204905060018216806142bf57607f821691505b602082108114156142d3576142d2614428565b5b50919050565b6142e2826144d3565b810181811067ffffffffffffffff8211171561430157614300614486565b5b80604052505050565b60006143158261423a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614348576143476143ca565b5b600182019050919050565b600061435e82614258565b915060ff821415614372576143716143ca565b5b600182019050919050565b6000614388826144e4565b9050919050565b6000819050919050565b60006143a48261423a565b91506143af8361423a565b9250826143bf576143be6143f9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160f01b9050919050565b7f4f4d4e4920444f4f52533a204d61782031204e46547320706572207472616e7360008201527f616374696f6e0000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5468697320636861696e2069732063757272656e746c7920756e617661696c6160008201527f626c6520666f722074726176656c000000000000000000000000000000000000602082015250565b7f4c617965725a65726f3a20696e76616c6964207061796c6f6164000000000000600082015250565b7f596f75206d757374206f776e2074686520746f6b656e20746f2074726176657260008201527f7365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4f4d4e4920444f4f52533a206d73672e76616c7565206e6f7420656e6f75676860008201527f20746f20636f766572206d6573736167654665652e2053656e6420676173206660208201527f6f72206d65737361676520666565730000000000000000000000000000000000604082015250565b7f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460008201527f206265204272696467652e000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f7560008201527f7263652073656e64696e6720636f6e7472616374000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4f4d4e4920444f4f52533a204661696c656420746f207769746864726177206660008201527f756e647300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60008201527f6573736167650000000000000000000000000000000000000000000000000000602082015250565b7f4f4d4e4920444f4f52533a204d696e74206578636565647320737570706c792060008201527f666f722074686973206e6574776f726b00000000000000000000000000000000602082015250565b614c42816141a6565b8114614c4d57600080fd5b50565b614c59816141b8565b8114614c6457600080fd5b50565b614c70816141ca565b8114614c7b57600080fd5b50565b614c87816141e0565b8114614c9257600080fd5b50565b614c9e8161420c565b8114614ca957600080fd5b50565b614cb58161423a565b8114614cc057600080fd5b50565b614ccc81614244565b8114614cd757600080fd5b50565b614ce381614258565b8114614cee57600080fd5b5056fea2646970667358221220a494376b9beaf312473b96b5ab941d57f7a1af6622ff3b3d8580fb32e4dc5fa364736f6c63430008070033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f64346c6462746d7766733969692e636c6f756466726f6e742e6e65742f000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101c15760003560e01c80637533d788116100f7578063b88d4fde11610095578063e985e9c511610064578063e985e9c514610623578063eb8d72b714610660578063ed88c68e14610689578063f2fde38b14610693576101c1565b8063b88d4fde14610585578063c87b56dd146105ae578063cf89fa03146105eb578063d1deba1f14610607576101c1565b8063943fb872116100d1578063943fb872146104dd57806395d89b4114610506578063a22cb46514610531578063b2bdfa7b1461055a576101c1565b80637533d788146104375780638da5cb5b146104745780638ee749121461049f576101c1565b80632e1a7d4d116101645780636352211e1161013e5780636352211e1461038a5780636ecd2306146103c757806370a08231146103e3578063715018a614610420576101c1565b80632e1a7d4d1461030f57806342842e0e1461033857806355f804b314610361576101c1565b8063081812fc116101a0578063081812fc14610257578063095ea7b3146102945780631c37a822146102bd57806323b872dd146102e6576101c1565b80621d3567146101c657806301ffc9a7146101ef57806306fdde031461022c575b600080fd5b3480156101d257600080fd5b506101ed60048036038101906101e891906131c0565b6106bc565b005b3480156101fb57600080fd5b5061021660048036038101906102119190612f7d565b6108fe565b6040516102239190613abf565b60405180910390f35b34801561023857600080fd5b506102416109e0565b60405161024e9190613afc565b60405180910390f35b34801561026357600080fd5b5061027e6004803603810190610279919061329f565b610a72565b60405161028b9190613a2f565b60405180910390f35b3480156102a057600080fd5b506102bb60048036038101906102b69190612f3d565b610af7565b005b3480156102c957600080fd5b506102e460048036038101906102df91906131c0565b610c0f565b005b3480156102f257600080fd5b5061030d60048036038101906103089190612e27565b610c8f565b005b34801561031b57600080fd5b506103366004803603810190610331919061329f565b610cef565b005b34801561034457600080fd5b5061035f600480360381019061035a9190612e27565b610e3d565b005b34801561036d57600080fd5b5061038860048036038101906103839190612fd7565b610e5d565b005b34801561039657600080fd5b506103b160048036038101906103ac919061329f565b610ef3565b6040516103be9190613a2f565b60405180910390f35b6103e160048036038101906103dc919061330c565b610fa5565b005b3480156103ef57600080fd5b5061040a60048036038101906104059190612d7a565b611086565b6040516104179190613fbd565b60405180910390f35b34801561042c57600080fd5b5061043561113e565b005b34801561044357600080fd5b5061045e60048036038101906104599190613020565b6111c6565b60405161046b9190613ada565b60405180910390f35b34801561048057600080fd5b50610489611266565b6040516104969190613a2f565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c191906130ad565b61128f565b6040516104d4929190613fd8565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff919061329f565b6112e3565b005b34801561051257600080fd5b5061051b611369565b6040516105289190613afc565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190612efd565b6113fb565b005b34801561056657600080fd5b5061056f611411565b60405161057c9190613a2f565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190612e7a565b611437565b005b3480156105ba57600080fd5b506105d560048036038101906105d0919061329f565b611499565b6040516105e29190613afc565b60405180910390f35b6106056004803603810190610600919061325f565b611540565b005b610621600480360381019061061c919061311c565b611833565b005b34801561062f57600080fd5b5061064a60048036038101906106459190612de7565b6119d3565b6040516106579190613abf565b60405180910390f35b34801561066c57600080fd5b506106876004803603810190610682919061304d565b611a67565b005b610691611b13565b005b34801561069f57600080fd5b506106ba60048036038101906106b59190612d7a565b611b15565b005b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461071657600080fd5b600960008561ffff1661ffff168152602001908152602001600020805461073c906142a7565b905083511480156107825750600960008561ffff1661ffff16815260200190815260200160002060405161077091906139b3565b60405180910390208380519060200120145b6107c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b890613d3e565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16631c37a822858585856040518563ffffffff1660e01b81526004016108009493929190613ef4565b600060405180830381600087803b15801561081a57600080fd5b505af192505050801561082b575060015b6108f7576040518060400160405280825181526020018280519060200120815250600860008661ffff1661ffff16815260200190815260200160002084604051610875919061399c565b908152602001604051809103902060008467ffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050507fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d848484846040516108ea9493929190613ef4565b60405180910390a16108f8565b5b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d957506109d882611c20565b5b9050919050565b6060600180546109ef906142a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1b906142a7565b8015610a685780601f10610a3d57610100808354040283529160200191610a68565b820191906000526020600020905b815481529060010190602001808311610a4b57829003601f168201915b5050505050905090565b6000610a7d82611c8a565b610abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab390613cfe565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b0282610ef3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6a90613dbe565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b92611cf6565b73ffffffffffffffffffffffffffffffffffffffff161480610bc15750610bc081610bbb611cf6565b6119d3565b5b610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf790613c3e565b60405180910390fd5b610c0a8383611cfe565b505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490613cbe565b60405180910390fd5b610c8984848484611db7565b50505050565b610ca0610c9a611cf6565b82611de4565b610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd690613dde565b60405180910390fd5b610cea838383611ec2565b505050565b610cf7611cf6565b73ffffffffffffffffffffffffffffffffffffffff16610d15611266565b73ffffffffffffffffffffffffffffffffffffffff1614610d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6290613d1e565b60405180910390fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610db3906139ee565b60006040518083038185875af1925050503d8060008114610df0576040519150601f19603f3d011682016040523d82523d6000602084013e610df5565b606091505b5050905080610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3090613d9e565b60405180910390fd5b5050565b610e5883838360405180602001604052806000815250611437565b505050565b610e65611cf6565b73ffffffffffffffffffffffffffffffffffffffff16610e83611266565b73ffffffffffffffffffffffffffffffffffffffff1614610ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed090613d1e565b60405180910390fd5b80600b9080519060200190610eef929190612a49565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9390613c7e565b60405180910390fd5b80915050919050565b60028160ff1610610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290613b1e565b60405180910390fd5b600d548160ff16600c54610fff91906140eb565b1115611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103790613e1e565b60405180910390fd5b60005b8160ff168160ff1610156110825761106f33600c600081546110649061430a565b91905081905561211e565b808061107a90614353565b915050611043565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ee90613c5e565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611146611cf6565b73ffffffffffffffffffffffffffffffffffffffff16611164611266565b73ffffffffffffffffffffffffffffffffffffffff16146111ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b190613d1e565b60405180910390fd5b6111c4600061213c565b565b600960205280600052604060002060009150905080546111e5906142a7565b80601f0160208091040260200160405190810160405280929190818152602001828054611211906142a7565b801561125e5780601f106112335761010080835404028352916020019161125e565b820191906000526020600020905b81548152906001019060200180831161124157829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60086020528260005260406000208280516020810182018051848252602083016020850120818352809550505050505060205280600052604060002060009250925050508060000154908060010154905082565b6112eb611cf6565b73ffffffffffffffffffffffffffffffffffffffff16611309611266565b73ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690613d1e565b60405180910390fd5b80600e8190555050565b606060028054611378906142a7565b80601f01602080910402602001604051908101604052809291908181526020018280546113a4906142a7565b80156113f15780601f106113c6576101008083540402835291602001916113f1565b820191906000526020600020905b8154815290600101906020018083116113d457829003601f168201915b5050505050905090565b61140d611406611cf6565b8383612200565b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611448611442611cf6565b83611de4565b611487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147e90613dde565b60405180910390fd5b6114938484848461236d565b50505050565b60606114a482611c8a565b6114e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114da90613d7e565b60405180910390fd5b60006114ed6123c9565b9050600081511161150d5760405180602001604052806000815250611538565b806115178461245b565b6040516020016115289291906139ca565b6040516020818303038152906040525b915050919050565b61154981610ef3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ad90613bfe565b60405180910390fd5b6000600960008461ffff1661ffff16815260200190815260200160002080546115de906142a7565b905011611620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161790613bbe565b60405180910390fd5b611629816125bc565b6000338260405160200161163e929190613a96565b6040516020818303038152906040529050600060019050600081600e5460405160200161166c929190613a03565b60405160208183030381529060405290506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108730876000876040518663ffffffff1660e01b81526004016116e3959493929190613e3e565b604080518083038186803b1580156116fa57600080fd5b505afa15801561170e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173291906132cc565b50905080341015611778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176f90613c9e565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c58031003488600960008b61ffff1661ffff16815260200190815260200160002088336000896040518863ffffffff1660e01b81526004016117f996959493929190613f47565b6000604051808303818588803b15801561181257600080fd5b505af1158015611826573d6000803e3d6000fd5b5050505050505050505050565b6000600860008761ffff1661ffff1681526020019081526020016000208560405161185e919061399c565b908152602001604051809103902060008567ffffffffffffffff16815260200190815260200160002090506000801b816001015414156118d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ca90613dfe565b60405180910390fd5b8060000154838390501480156119035750806001015483836040516118f9929190613983565b6040518091039020145b611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193990613bde565b60405180910390fd5b600081600001819055506000801b81600101819055503073ffffffffffffffffffffffffffffffffffffffff16631c37a82287878787876040518663ffffffff1660e01b8152600401611999959493929190613e9f565b600060405180830381600087803b1580156119b357600080fd5b505af11580156119c7573d6000803e3d6000fd5b50505050505050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a6f611cf6565b73ffffffffffffffffffffffffffffffffffffffff16611a8d611266565b73ffffffffffffffffffffffffffffffffffffffff1614611ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ada90613d1e565b60405180910390fd5b8181600960008661ffff1661ffff1681526020019081526020016000209190611b0d929190612acf565b50505050565b565b611b1d611cf6565b73ffffffffffffffffffffffffffffffffffffffff16611b3b611266565b73ffffffffffffffffffffffffffffffffffffffff1614611b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8890613d1e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf890613b5e565b60405180910390fd5b611c0a8161213c565b50565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d7183610ef3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008082806020019051810190611dce9190612da7565b91509150611ddc828261211e565b505050505050565b6000611def82611c8a565b611e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2590613c1e565b60405180910390fd5b6000611e3983610ef3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ea857508373ffffffffffffffffffffffffffffffffffffffff16611e9084610a72565b73ffffffffffffffffffffffffffffffffffffffff16145b80611eb95750611eb881856119d3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ee282610ef3565b73ffffffffffffffffffffffffffffffffffffffff1614611f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2f90613d5e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9f90613b7e565b60405180910390fd5b611fb38383836126cd565b611fbe600082611cfe565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461200e9190614172565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461206591906140eb565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6121388282604051806020016040528060008152506126d2565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561226f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226690613b9e565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123609190613abf565b60405180910390a3505050565b612378848484611ec2565b6123848484848461272d565b6123c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ba90613b3e565b60405180910390fd5b50505050565b6060600b80546123d8906142a7565b80601f0160208091040260200160405190810160405280929190818152602001828054612404906142a7565b80156124515780601f1061242657610100808354040283529160200191612451565b820191906000526020600020905b81548152906001019060200180831161243457829003601f168201915b5050505050905090565b606060008214156124a3576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125b7565b600082905060005b600082146124d55780806124be9061430a565b915050600a826124ce9190614141565b91506124ab565b60008167ffffffffffffffff8111156124f1576124f0614486565b5b6040519080825280601f01601f1916602001820160405280156125235781602001600182028036833780820191505090505b5090505b600085146125b05760018261253c9190614172565b9150600a8561254b9190614399565b603061255791906140eb565b60f81b81838151811061256d5761256c614457565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125a99190614141565b9450612527565b8093505050505b919050565b60006125c782610ef3565b90506125d5816000846126cd565b6125e0600083611cfe565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126309190614172565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6126dc83836128c4565b6126e9600084848461272d565b612728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271f90613b3e565b60405180910390fd5b505050565b600061274e8473ffffffffffffffffffffffffffffffffffffffff16611c0d565b156128b7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612777611cf6565b8786866040518563ffffffff1660e01b81526004016127999493929190613a4a565b602060405180830381600087803b1580156127b357600080fd5b505af19250505080156127e457506040513d601f19601f820116820180604052508101906127e19190612faa565b60015b612867573d8060008114612814576040519150601f19603f3d011682016040523d82523d6000602084013e612819565b606091505b5060008151141561285f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285690613b3e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128bc565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292b90613cde565b60405180910390fd5b612940600083836126cd565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461299091906140eb565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612a55906142a7565b90600052602060002090601f016020900481019282612a775760008555612abe565b82601f10612a9057805160ff1916838001178555612abe565b82800160010185558215612abe579182015b82811115612abd578251825591602001919060010190612aa2565b5b509050612acb9190612b55565b5090565b828054612adb906142a7565b90600052602060002090601f016020900481019282612afd5760008555612b44565b82601f10612b1657803560ff1916838001178555612b44565b82800160010185558215612b44579182015b82811115612b43578235825591602001919060010190612b28565b5b509050612b519190612b55565b5090565b5b80821115612b6e576000816000905550600101612b56565b5090565b6000612b85612b8084614026565b614001565b905082815260208101848484011115612ba157612ba06144c4565b5b612bac848285614265565b509392505050565b6000612bc7612bc284614057565b614001565b905082815260208101848484011115612be357612be26144c4565b5b612bee848285614265565b509392505050565b600081359050612c0581614c39565b92915050565b600081519050612c1a81614c50565b92915050565b600081359050612c2f81614c67565b92915050565b600081359050612c4481614c7e565b92915050565b600081519050612c5981614c7e565b92915050565b60008083601f840112612c7557612c746144ba565b5b8235905067ffffffffffffffff811115612c9257612c916144b5565b5b602083019150836001820283011115612cae57612cad6144bf565b5b9250929050565b600082601f830112612cca57612cc96144ba565b5b8135612cda848260208601612b72565b91505092915050565b600082601f830112612cf857612cf76144ba565b5b8135612d08848260208601612bb4565b91505092915050565b600081359050612d2081614c95565b92915050565b600081359050612d3581614cac565b92915050565b600081519050612d4a81614cac565b92915050565b600081359050612d5f81614cc3565b92915050565b600081359050612d7481614cda565b92915050565b600060208284031215612d9057612d8f6144ce565b5b6000612d9e84828501612bf6565b91505092915050565b60008060408385031215612dbe57612dbd6144ce565b5b6000612dcc85828601612c0b565b9250506020612ddd85828601612d3b565b9150509250929050565b60008060408385031215612dfe57612dfd6144ce565b5b6000612e0c85828601612bf6565b9250506020612e1d85828601612bf6565b9150509250929050565b600080600060608486031215612e4057612e3f6144ce565b5b6000612e4e86828701612bf6565b9350506020612e5f86828701612bf6565b9250506040612e7086828701612d26565b9150509250925092565b60008060008060808587031215612e9457612e936144ce565b5b6000612ea287828801612bf6565b9450506020612eb387828801612bf6565b9350506040612ec487828801612d26565b925050606085013567ffffffffffffffff811115612ee557612ee46144c9565b5b612ef187828801612cb5565b91505092959194509250565b60008060408385031215612f1457612f136144ce565b5b6000612f2285828601612bf6565b9250506020612f3385828601612c20565b9150509250929050565b60008060408385031215612f5457612f536144ce565b5b6000612f6285828601612bf6565b9250506020612f7385828601612d26565b9150509250929050565b600060208284031215612f9357612f926144ce565b5b6000612fa184828501612c35565b91505092915050565b600060208284031215612fc057612fbf6144ce565b5b6000612fce84828501612c4a565b91505092915050565b600060208284031215612fed57612fec6144ce565b5b600082013567ffffffffffffffff81111561300b5761300a6144c9565b5b61301784828501612ce3565b91505092915050565b600060208284031215613036576130356144ce565b5b600061304484828501612d11565b91505092915050565b600080600060408486031215613066576130656144ce565b5b600061307486828701612d11565b935050602084013567ffffffffffffffff811115613095576130946144c9565b5b6130a186828701612c5f565b92509250509250925092565b6000806000606084860312156130c6576130c56144ce565b5b60006130d486828701612d11565b935050602084013567ffffffffffffffff8111156130f5576130f46144c9565b5b61310186828701612cb5565b925050604061311286828701612d26565b9150509250925092565b600080600080600060808688031215613138576131376144ce565b5b600061314688828901612d11565b955050602086013567ffffffffffffffff811115613167576131666144c9565b5b61317388828901612cb5565b945050604061318488828901612d50565b935050606086013567ffffffffffffffff8111156131a5576131a46144c9565b5b6131b188828901612c5f565b92509250509295509295909350565b600080600080608085870312156131da576131d96144ce565b5b60006131e887828801612d11565b945050602085013567ffffffffffffffff811115613209576132086144c9565b5b61321587828801612cb5565b935050604061322687828801612d50565b925050606085013567ffffffffffffffff811115613247576132466144c9565b5b61325387828801612cb5565b91505092959194509250565b60008060408385031215613276576132756144ce565b5b600061328485828601612d11565b925050602061329585828601612d26565b9150509250929050565b6000602082840312156132b5576132b46144ce565b5b60006132c384828501612d26565b91505092915050565b600080604083850312156132e3576132e26144ce565b5b60006132f185828601612d3b565b925050602061330285828601612d3b565b9150509250929050565b600060208284031215613322576133216144ce565b5b600061333084828501612d65565b91505092915050565b613342816141b8565b82525050565b613351816141a6565b82525050565b613360816141ca565b82525050565b61336f816141d6565b82525050565b600061338183856140b3565b935061338e838584614265565b613397836144d3565b840190509392505050565b60006133ae83856140c4565b93506133bb838584614265565b82840190509392505050565b60006133d28261409d565b6133dc81856140b3565b93506133ec818560208601614274565b6133f5816144d3565b840191505092915050565b600061340b8261409d565b61341581856140c4565b9350613425818560208601614274565b80840191505092915050565b6000815461343e816142a7565b61344881866140b3565b945060018216600081146134635760018114613475576134a8565b60ff19831686526020860193506134a8565b61347e85614088565b60005b838110156134a057815481890152600182019150602081019050613481565b808801955050505b50505092915050565b600081546134be816142a7565b6134c881866140c4565b945060018216600081146134e357600181146134f457613527565b60ff19831686528186019350613527565b6134fd85614088565b60005b8381101561351f57815481890152600182019150602081019050613500565b838801955050505b50505092915050565b600061353b826140a8565b61354581856140cf565b9350613555818560208601614274565b61355e816144d3565b840191505092915050565b6000613574826140a8565b61357e81856140e0565b935061358e818560208601614274565b80840191505092915050565b60006135a76026836140cf565b91506135b2826144f1565b604082019050919050565b60006135ca6032836140cf565b91506135d582614540565b604082019050919050565b60006135ed6026836140cf565b91506135f88261458f565b604082019050919050565b60006136106024836140cf565b915061361b826145de565b604082019050919050565b60006136336019836140cf565b915061363e8261462d565b602082019050919050565b6000613656602e836140cf565b915061366182614656565b604082019050919050565b6000613679601a836140cf565b9150613684826146a5565b602082019050919050565b600061369c6022836140cf565b91506136a7826146ce565b604082019050919050565b60006136bf602c836140cf565b91506136ca8261471d565b604082019050919050565b60006136e26038836140cf565b91506136ed8261476c565b604082019050919050565b6000613705602a836140cf565b9150613710826147bb565b604082019050919050565b60006137286029836140cf565b91506137338261480a565b604082019050919050565b600061374b604f836140cf565b915061375682614859565b606082019050919050565b600061376e602b836140cf565b9150613779826148ce565b604082019050919050565b60006137916020836140cf565b915061379c8261491d565b602082019050919050565b60006137b4602c836140cf565b91506137bf82614946565b604082019050919050565b60006137d76020836140cf565b91506137e282614995565b602082019050919050565b60006137fa6034836140cf565b9150613805826149be565b604082019050919050565b600061381d6029836140cf565b915061382882614a0d565b604082019050919050565b6000613840602f836140cf565b915061384b82614a5c565b604082019050919050565b60006138636024836140cf565b915061386e82614aab565b604082019050919050565b60006138866021836140cf565b915061389182614afa565b604082019050919050565b60006138a96000836140c4565b91506138b482614b49565b600082019050919050565b60006138cc6031836140cf565b91506138d782614b4c565b604082019050919050565b60006138ef6026836140cf565b91506138fa82614b9b565b604082019050919050565b60006139126030836140cf565b915061391d82614bea565b604082019050919050565b6139318161420c565b82525050565b6139486139438261420c565b61437d565b82525050565b6139578161423a565b82525050565b61396e6139698261423a565b61438f565b82525050565b61397d81614244565b82525050565b60006139908284866133a2565b91508190509392505050565b60006139a88284613400565b915081905092915050565b60006139bf82846134b1565b915081905092915050565b60006139d68285613569565b91506139e28284613569565b91508190509392505050565b60006139f98261389c565b9150819050919050565b6000613a0f8285613937565b600282019150613a1f828461395d565b6020820191508190509392505050565b6000602082019050613a446000830184613348565b92915050565b6000608082019050613a5f6000830187613348565b613a6c6020830186613348565b613a79604083018561394e565b8181036060830152613a8b81846133c7565b905095945050505050565b6000604082019050613aab6000830185613348565b613ab8602083018461394e565b9392505050565b6000602082019050613ad46000830184613357565b92915050565b60006020820190508181036000830152613af481846133c7565b905092915050565b60006020820190508181036000830152613b168184613530565b905092915050565b60006020820190508181036000830152613b378161359a565b9050919050565b60006020820190508181036000830152613b57816135bd565b9050919050565b60006020820190508181036000830152613b77816135e0565b9050919050565b60006020820190508181036000830152613b9781613603565b9050919050565b60006020820190508181036000830152613bb781613626565b9050919050565b60006020820190508181036000830152613bd781613649565b9050919050565b60006020820190508181036000830152613bf78161366c565b9050919050565b60006020820190508181036000830152613c178161368f565b9050919050565b60006020820190508181036000830152613c37816136b2565b9050919050565b60006020820190508181036000830152613c57816136d5565b9050919050565b60006020820190508181036000830152613c77816136f8565b9050919050565b60006020820190508181036000830152613c978161371b565b9050919050565b60006020820190508181036000830152613cb78161373e565b9050919050565b60006020820190508181036000830152613cd781613761565b9050919050565b60006020820190508181036000830152613cf781613784565b9050919050565b60006020820190508181036000830152613d17816137a7565b9050919050565b60006020820190508181036000830152613d37816137ca565b9050919050565b60006020820190508181036000830152613d57816137ed565b9050919050565b60006020820190508181036000830152613d7781613810565b9050919050565b60006020820190508181036000830152613d9781613833565b9050919050565b60006020820190508181036000830152613db781613856565b9050919050565b60006020820190508181036000830152613dd781613879565b9050919050565b60006020820190508181036000830152613df7816138bf565b9050919050565b60006020820190508181036000830152613e17816138e2565b9050919050565b60006020820190508181036000830152613e3781613905565b9050919050565b600060a082019050613e536000830188613928565b613e606020830187613348565b8181036040830152613e7281866133c7565b9050613e816060830185613357565b8181036080830152613e9381846133c7565b90509695505050505050565b6000608082019050613eb46000830188613928565b8181036020830152613ec681876133c7565b9050613ed56040830186613974565b8181036060830152613ee8818486613375565b90509695505050505050565b6000608082019050613f096000830187613928565b8181036020830152613f1b81866133c7565b9050613f2a6040830185613974565b8181036060830152613f3c81846133c7565b905095945050505050565b600060c082019050613f5c6000830189613928565b8181036020830152613f6e8188613431565b90508181036040830152613f8281876133c7565b9050613f916060830186613339565b613f9e6080830185613348565b81810360a0830152613fb081846133c7565b9050979650505050505050565b6000602082019050613fd2600083018461394e565b92915050565b6000604082019050613fed600083018561394e565b613ffa6020830184613366565b9392505050565b600061400b61401c565b905061401782826142d9565b919050565b6000604051905090565b600067ffffffffffffffff82111561404157614040614486565b5b61404a826144d3565b9050602081019050919050565b600067ffffffffffffffff82111561407257614071614486565b5b61407b826144d3565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006140f68261423a565b91506141018361423a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614136576141356143ca565b5b828201905092915050565b600061414c8261423a565b91506141578361423a565b925082614167576141666143f9565b5b828204905092915050565b600061417d8261423a565b91506141888361423a565b92508282101561419b5761419a6143ca565b5b828203905092915050565b60006141b18261421a565b9050919050565b60006141c38261421a565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614292578082015181840152602081019050614277565b838111156142a1576000848401525b50505050565b600060028204905060018216806142bf57607f821691505b602082108114156142d3576142d2614428565b5b50919050565b6142e2826144d3565b810181811067ffffffffffffffff8211171561430157614300614486565b5b80604052505050565b60006143158261423a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614348576143476143ca565b5b600182019050919050565b600061435e82614258565b915060ff821415614372576143716143ca565b5b600182019050919050565b6000614388826144e4565b9050919050565b6000819050919050565b60006143a48261423a565b91506143af8361423a565b9250826143bf576143be6143f9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160f01b9050919050565b7f4f4d4e4920444f4f52533a204d61782031204e46547320706572207472616e7360008201527f616374696f6e0000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5468697320636861696e2069732063757272656e746c7920756e617661696c6160008201527f626c6520666f722074726176656c000000000000000000000000000000000000602082015250565b7f4c617965725a65726f3a20696e76616c6964207061796c6f6164000000000000600082015250565b7f596f75206d757374206f776e2074686520746f6b656e20746f2074726176657260008201527f7365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4f4d4e4920444f4f52533a206d73672e76616c7565206e6f7420656e6f75676860008201527f20746f20636f766572206d6573736167654665652e2053656e6420676173206660208201527f6f72206d65737361676520666565730000000000000000000000000000000000604082015250565b7f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460008201527f206265204272696467652e000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f7560008201527f7263652073656e64696e6720636f6e7472616374000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4f4d4e4920444f4f52533a204661696c656420746f207769746864726177206660008201527f756e647300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60008201527f6573736167650000000000000000000000000000000000000000000000000000602082015250565b7f4f4d4e4920444f4f52533a204d696e74206578636565647320737570706c792060008201527f666f722074686973206e6574776f726b00000000000000000000000000000000602082015250565b614c42816141a6565b8114614c4d57600080fd5b50565b614c59816141b8565b8114614c6457600080fd5b50565b614c70816141ca565b8114614c7b57600080fd5b50565b614c87816141e0565b8114614c9257600080fd5b50565b614c9e8161420c565b8114614ca957600080fd5b50565b614cb58161423a565b8114614cc057600080fd5b50565b614ccc81614244565b8114614cd757600080fd5b50565b614ce381614258565b8114614cee57600080fd5b5056fea2646970667358221220a494376b9beaf312473b96b5ab941d57f7a1af6622ff3b3d8580fb32e4dc5fa364736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f64346c6462746d7766733969692e636c6f756466726f6e742e6e65742f000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI_ (string): https://d4ldbtmwfs9ii.cloudfront.net/
Arg [1] : _layerZeroEndpoint (address): 0x66A71Dcef29A0fFBDBE3c6a460a3B5BC225Cd675

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000025
Arg [3] : 68747470733a2f2f64346c6462746d7766733969692e636c6f756466726f6e74
Arg [4] : 2e6e65742f000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

32110:3704:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28770:1098;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19972:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20972:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22189:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21770:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29876:435;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22922:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34950:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34801:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20638:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32705:380;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20335:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11608:103;;;;;;;;;;;;;:::i;:::-;;28569:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10957:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28460:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;35143:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21080:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22505:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32176:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23499:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21192:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33093:1700;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30971:916;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22700:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31895:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34899:43;;;:::i;:::-;;11866:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28770:1098;28975:8;;;;;;;;;;;28953:31;;:10;:31;;;28945:40;;;;;;29110:19;:32;29130:11;29110:32;;;;;;;;;;;;;;;:39;;;;;:::i;:::-;;;29088:11;:18;:61;:168;;;;;29223:19;:32;29243:11;29223:32;;;;;;;;;;;;;;;29213:43;;;;;;:::i;:::-;;;;;;;;29180:11;29170:22;;;;;;:86;29088:168;29066:270;;;;;;;;;;;;:::i;:::-;;;;;;;;;29464:4;:16;;;29481:11;29494;29507:6;29515:8;29464:60;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29460:401;;29671:101;;;;;;;;29704:8;:15;29671:101;;;;29748:8;29738:19;;;;;;29671:101;;;29620:14;:27;29635:11;29620:27;;;;;;;;;;;;;;;29648:11;29620:40;;;;;;:::i;:::-;;;;;;;;;;;;;:48;29661:6;29620:48;;;;;;;;;;;;;:152;;;;;;;;;;;;;;;;;;;29792:57;29806:11;29819;29832:6;29840:8;29792:57;;;;;;;;;:::i;:::-;;;;;;;;29460:401;;;;28770:1098;;;;:::o;19972:355::-;20119:4;20176:25;20161:40;;;:11;:40;;;;:105;;;;20233:33;20218:48;;;:11;:48;;;;20161:105;:158;;;;20283:36;20307:11;20283:23;:36::i;:::-;20161:158;20141:178;;19972:355;;;:::o;20972:100::-;21026:13;21059:5;21052:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20972:100;:::o;22189:308::-;22310:7;22357:16;22365:7;22357;:16::i;:::-;22335:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;22465:15;:24;22481:7;22465:24;;;;;;;;;;;;;;;;;;;;;22458:31;;22189:308;;;:::o;21770:411::-;21851:13;21867:23;21882:7;21867:14;:23::i;:::-;21851:39;;21915:5;21909:11;;:2;:11;;;;21901:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22009:5;21993:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22018:37;22035:5;22042:12;:10;:12::i;:::-;22018:16;:37::i;:::-;21993:62;21971:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22152:21;22161:2;22165:7;22152:8;:21::i;:::-;21840:341;21770:411;;:::o;29876:435::-;30124:4;30102:27;;:10;:27;;;30080:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;30249:54;30260:11;30273;30286:6;30294:8;30249:10;:54::i;:::-;29876:435;;;;:::o;22922:376::-;23131:41;23150:12;:10;:12::i;:::-;23164:7;23131:18;:41::i;:::-;23109:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;23262:28;23272:4;23278:2;23282:7;23262:9;:28::i;:::-;22922:376;;;:::o;34950:185::-;11188:12;:10;:12::i;:::-;11177:23;;:7;:5;:7::i;:::-;:23;;;11169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35012:9:::1;35035:6;;;;;;;;;;;35027:20;;35055:3;35027:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35011:52;;;35082:4;35074:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;35000:135;34950:185:::0;:::o;23306:::-;23444:39;23461:4;23467:2;23471:7;23444:39;;;;;;;;;;;;:16;:39::i;:::-;23306:185;;;:::o;34801:90::-;11188:12;:10;:12::i;:::-;11177:23;;:7;:5;:7::i;:::-;:23;;;11169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34880:3:::1;34870:7;:13;;;;;;;;;;;;:::i;:::-;;34801:90:::0;:::o;20638:326::-;20755:7;20780:13;20796:7;:16;20804:7;20796:16;;;;;;;;;;;;;;;;;;;;;20780:32;;20862:1;20845:19;;:5;:19;;;;20823:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;20951:5;20944:12;;;20638:326;;;:::o;32705:380::-;32784:1;32772:9;:13;;;32764:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32888:16;;32875:9;32861:23;;:11;;:23;;;;:::i;:::-;:43;;32839:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;32989:7;32984:94;33006:9;33002:13;;:1;:13;;;32984:94;;;33037:36;33047:10;33061:11;;33059:13;;;;;:::i;:::-;;;;;;;33037:9;:36::i;:::-;33017:3;;;;;:::i;:::-;;;;32984:94;;;;32705:380;:::o;20335:295::-;20452:7;20516:1;20499:19;;:5;:19;;;;20477:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;20606:9;:16;20616:5;20606:16;;;;;;;;;;;;;;;;20599:23;;20335:295;;;:::o;11608:103::-;11188:12;:10;:12::i;:::-;11177:23;;:7;:5;:7::i;:::-;:23;;;11169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11673:30:::1;11700:1;11673:18;:30::i;:::-;11608:103::o:0;28569:51::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10957:87::-;11003:7;11030:6;;;;;;;;;;;11023:13;;10957:87;:::o;28460:102::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35143:128::-;11188:12;:10;:12::i;:::-;11177:23;;:7;:5;:7::i;:::-;:23;;;11169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35257:6:::1;35228:26;:35;;;;35143:128:::0;:::o;21080:104::-;21136:13;21169:7;21162:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21080:104;:::o;22505:187::-;22632:52;22651:12;:10;:12::i;:::-;22665:8;22675;22632:18;:52::i;:::-;22505:187;;:::o;32176:21::-;;;;;;;;;;;;;:::o;23499:365::-;23688:41;23707:12;:10;:12::i;:::-;23721:7;23688:18;:41::i;:::-;23666:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;23817:39;23831:4;23837:2;23841:7;23850:5;23817:13;:39::i;:::-;23499:365;;;;:::o;21192:468::-;21310:13;21363:16;21371:7;21363;:16::i;:::-;21341:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;21467:21;21491:10;:8;:10::i;:::-;21467:34;;21556:1;21538:7;21532:21;:25;:120;;;;;;;;;;;;;;;;;21601:7;21610:18;:7;:16;:18::i;:::-;21584:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21532:120;21512:140;;;21192:468;;;:::o;33093:1700::-;33213:16;33221:7;33213;:16::i;:::-;33199:30;;:10;:30;;;33177:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;33363:1;33324:19;:29;33344:8;33324:29;;;;;;;;;;;;;;;:36;;;;;:::i;:::-;;;:40;33302:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;33518:14;33524:7;33518:5;:14::i;:::-;33606:20;33640:10;33652:7;33629:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33606:54;;33746:14;33763:1;33746:18;;33775:26;33835:7;33857:26;;33804:90;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33775:119;;34049:18;34073:8;;;;;;;;;;;:21;;;34109:8;34140:4;34160:7;34182:5;34202:13;34073:153;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34048:178;;;34274:10;34261:9;:23;;34239:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;34404:8;;;;;;;;;;;:13;;;34425:9;34450:8;34496:19;:29;34516:8;34496:29;;;;;;;;;;;;;;;34579:7;34635:10;34687:3;34745:13;34404:381;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33166:1627;;;;33093:1700;;:::o;30971:916::-;31195:32;31230:14;:27;31245:11;31230:27;;;;;;;;;;;;;;;31272:11;31230:64;;;;;;:::i;:::-;;;;;;;;;;;;;:72;31295:6;31230:72;;;;;;;;;;;;;31195:107;;31368:1;31360:10;;31335:9;:21;;;:35;;31313:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;31488:9;:23;;;31469:8;;:15;;:42;:107;;;;;31555:9;:21;;;31542:8;;31532:19;;;;;;;:::i;:::-;;;;;;;;:44;31469:107;31447:183;;;;;;;;;;;;:::i;:::-;;;;;;;;;31704:1;31678:9;:23;;:27;;;;31748:1;31740:10;;31716:9;:21;;:34;;;;31819:4;:16;;;31836:11;31849;31862:6;31870:8;;31819:60;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31139:748;30971:916;;;;;:::o;22700:214::-;22842:4;22871:18;:25;22890:5;22871:25;;;;;;;;;;;;;;;:35;22897:8;22871:35;;;;;;;;;;;;;;;;;;;;;;;;;22864:42;;22700:214;;;;:::o;31895:181::-;11188:12;:10;:12::i;:::-;11177:23;;:7;:5;:7::i;:::-;:23;;;11169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32054:14:::1;;32022:19;:29;32042:8;32022:29;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;31895:181:::0;;;:::o;34899:43::-;:::o;11866:238::-;11188:12;:10;:12::i;:::-;11177:23;;:7;:5;:7::i;:::-;:23;;;11169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11989:1:::1;11969:22;;:8;:22;;;;11947:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;12068:28;12087:8;12068:18;:28::i;:::-;11866:238:::0;:::o;12512:387::-;12572:4;12780:12;12847:7;12835:20;12827:28;;12890:1;12883:4;:8;12876:15;;;12512:387;;;:::o;17285:207::-;17415:4;17459:25;17444:40;;;:11;:40;;;;17437:47;;17285:207;;;:::o;24232:127::-;24297:4;24349:1;24321:30;;:7;:16;24329:7;24321:16;;;;;;;;;;;;;;;;;;;;;:30;;;;24314:37;;24232:127;;;:::o;10279:98::-;10332:7;10359:10;10352:17;;10279:98;:::o;26586:174::-;26688:2;26661:15;:24;26677:7;26661:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;26744:7;26740:2;26706:46;;26715:23;26730:7;26715:14;:23::i;:::-;26706:46;;;;;;;;;;;;26586:174;;:::o;35279:424::-;35475:14;35491:15;35535:8;35510:77;;;;;;;;;;;;:::i;:::-;35474:113;;;;35669:26;35679:6;35687:7;35669:9;:26::i;:::-;35444:259;;35279:424;;;;:::o;24367:452::-;24496:4;24540:16;24548:7;24540;:16::i;:::-;24518:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;24639:13;24655:23;24670:7;24655:14;:23::i;:::-;24639:39;;24708:5;24697:16;;:7;:16;;;:64;;;;24754:7;24730:31;;:20;24742:7;24730:11;:20::i;:::-;:31;;;24697:64;:113;;;;24778:32;24795:5;24802:7;24778:16;:32::i;:::-;24697:113;24689:122;;;24367:452;;;;:::o;25963:615::-;26136:4;26109:31;;:23;26124:7;26109:14;:23::i;:::-;:31;;;26087:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;26242:1;26228:16;;:2;:16;;;;26220:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;26298:39;26319:4;26325:2;26329:7;26298:20;:39::i;:::-;26402:29;26419:1;26423:7;26402:8;:29::i;:::-;26463:1;26444:9;:15;26454:4;26444:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;26492:1;26475:9;:13;26485:2;26475:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;26523:2;26504:7;:16;26512:7;26504:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;26562:7;26558:2;26543:27;;26552:4;26543:27;;;;;;;;;;;;25963:615;;;:::o;24827:110::-;24903:26;24913:2;24917:7;24903:26;;;;;;;;;;;;:9;:26::i;:::-;24827:110;;:::o;12264:191::-;12338:16;12357:6;;;;;;;;;;;12338:25;;12383:8;12374:6;;:17;;;;;;;;;;;;;;;;;;12438:8;12407:40;;12428:8;12407:40;;;;;;;;;;;;12327:128;12264:191;:::o;26768:315::-;26923:8;26914:17;;:5;:17;;;;26906:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;27010:8;26972:18;:25;26991:5;26972:25;;;;;;;;;;;;;;;:35;26998:8;26972:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;27056:8;27034:41;;27049:5;27034:41;;;27066:8;27034:41;;;;;;:::i;:::-;;;;;;;;26768:315;;;:::o;23872:352::-;24029:28;24039:4;24045:2;24049:7;24029:9;:28::i;:::-;24090:48;24113:4;24119:2;24123:7;24132:5;24090:22;:48::i;:::-;24068:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;23872:352;;;;:::o;35711:100::-;35763:13;35796:7;35789:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35711:100;:::o;8428:723::-;8484:13;8714:1;8705:5;:10;8701:53;;;8732:10;;;;;;;;;;;;;;;;;;;;;8701:53;8764:12;8779:5;8764:20;;8795:14;8820:78;8835:1;8827:4;:9;8820:78;;8853:8;;;;;:::i;:::-;;;;8884:2;8876:10;;;;;:::i;:::-;;;8820:78;;;8908:19;8940:6;8930:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8908:39;;8958:154;8974:1;8965:5;:10;8958:154;;9002:1;8992:11;;;;;:::i;:::-;;;9069:2;9061:5;:10;;;;:::i;:::-;9048:2;:24;;;;:::i;:::-;9035:39;;9018:6;9025;9018:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;9098:2;9089:11;;;;;:::i;:::-;;;8958:154;;;9136:6;9122:21;;;;;8428:723;;;;:::o;25595:360::-;25655:13;25671:23;25686:7;25671:14;:23::i;:::-;25655:39;;25707:48;25728:5;25743:1;25747:7;25707:20;:48::i;:::-;25796:29;25813:1;25817:7;25796:8;:29::i;:::-;25858:1;25838:9;:16;25848:5;25838:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;25877:7;:16;25885:7;25877:16;;;;;;;;;;;;25870:23;;;;;;;;;;;25939:7;25935:1;25911:36;;25920:5;25911:36;;;;;;;;;;;;25644:311;25595:360;:::o;28079:126::-;;;;:::o;24945:321::-;25075:18;25081:2;25085:7;25075:5;:18::i;:::-;25126:54;25157:1;25161:2;25165:7;25174:5;25126:22;:54::i;:::-;25104:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;24945:321;;;:::o;27091:980::-;27246:4;27267:15;:2;:13;;;:15::i;:::-;27263:801;;;27336:2;27320:36;;;27379:12;:10;:12::i;:::-;27414:4;27441:7;27471:5;27320:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;27299:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27695:1;27678:6;:13;:18;27674:320;;;27721:108;;;;;;;;;;:::i;:::-;;;;;;;;27674:320;27944:6;27938:13;27929:6;27925:2;27921:15;27914:38;27299:710;27569:41;;;27559:51;;;:6;:51;;;;27552:58;;;;;27263:801;28048:4;28041:11;;27091:980;;;;;;;:::o;25274:313::-;25368:1;25354:16;;:2;:16;;;;25346:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;25420:45;25449:1;25453:2;25457:7;25420:20;:45::i;:::-;25495:1;25478:9;:13;25488:2;25478:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;25526:2;25507:7;:16;25515:7;25507:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;25571:7;25567:2;25546:33;;25563:1;25546:33;;;;;;;;;;;;25274:313;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:159::-;1051:5;1082:6;1076:13;1067:22;;1098:41;1133:5;1098:41;:::i;:::-;986:159;;;;:::o;1151:133::-;1194:5;1232:6;1219:20;1210:29;;1248:30;1272:5;1248:30;:::i;:::-;1151:133;;;;:::o;1290:137::-;1335:5;1373:6;1360:20;1351:29;;1389:32;1415:5;1389:32;:::i;:::-;1290:137;;;;:::o;1433:141::-;1489:5;1520:6;1514:13;1505:22;;1536:32;1562:5;1536:32;:::i;:::-;1433:141;;;;:::o;1593:552::-;1650:8;1660:6;1710:3;1703:4;1695:6;1691:17;1687:27;1677:122;;1718:79;;:::i;:::-;1677:122;1831:6;1818:20;1808:30;;1861:18;1853:6;1850:30;1847:117;;;1883:79;;:::i;:::-;1847:117;1997:4;1989:6;1985:17;1973:29;;2051:3;2043:4;2035:6;2031:17;2021:8;2017:32;2014:41;2011:128;;;2058:79;;:::i;:::-;2011:128;1593:552;;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:137::-;2913:5;2951:6;2938:20;2929:29;;2967:32;2993:5;2967:32;:::i;:::-;2868:137;;;;:::o;3011:139::-;3057:5;3095:6;3082:20;3073:29;;3111:33;3138:5;3111:33;:::i;:::-;3011:139;;;;:::o;3156:143::-;3213:5;3244:6;3238:13;3229:22;;3260:33;3287:5;3260:33;:::i;:::-;3156:143;;;;:::o;3305:137::-;3350:5;3388:6;3375:20;3366:29;;3404:32;3430:5;3404:32;:::i;:::-;3305:137;;;;:::o;3448:135::-;3492:5;3530:6;3517:20;3508:29;;3546:31;3571:5;3546:31;:::i;:::-;3448:135;;;;:::o;3589:329::-;3648:6;3697:2;3685:9;3676:7;3672:23;3668:32;3665:119;;;3703:79;;:::i;:::-;3665:119;3823:1;3848:53;3893:7;3884:6;3873:9;3869:22;3848:53;:::i;:::-;3838:63;;3794:117;3589:329;;;;:::o;3924:523::-;4011:6;4019;4068:2;4056:9;4047:7;4043:23;4039:32;4036:119;;;4074:79;;:::i;:::-;4036:119;4194:1;4219:72;4283:7;4274:6;4263:9;4259:22;4219:72;:::i;:::-;4209:82;;4165:136;4340:2;4366:64;4422:7;4413:6;4402:9;4398:22;4366:64;:::i;:::-;4356:74;;4311:129;3924:523;;;;;:::o;4453:474::-;4521:6;4529;4578:2;4566:9;4557:7;4553:23;4549:32;4546:119;;;4584:79;;:::i;:::-;4546:119;4704:1;4729:53;4774:7;4765:6;4754:9;4750:22;4729:53;:::i;:::-;4719:63;;4675:117;4831:2;4857:53;4902:7;4893:6;4882:9;4878:22;4857:53;:::i;:::-;4847:63;;4802:118;4453:474;;;;;:::o;4933:619::-;5010:6;5018;5026;5075:2;5063:9;5054:7;5050:23;5046:32;5043:119;;;5081:79;;:::i;:::-;5043:119;5201:1;5226:53;5271:7;5262:6;5251:9;5247:22;5226:53;:::i;:::-;5216:63;;5172:117;5328:2;5354:53;5399:7;5390:6;5379:9;5375:22;5354:53;:::i;:::-;5344:63;;5299:118;5456:2;5482:53;5527:7;5518:6;5507:9;5503:22;5482:53;:::i;:::-;5472:63;;5427:118;4933:619;;;;;:::o;5558:943::-;5653:6;5661;5669;5677;5726:3;5714:9;5705:7;5701:23;5697:33;5694:120;;;5733:79;;:::i;:::-;5694:120;5853:1;5878:53;5923:7;5914:6;5903:9;5899:22;5878:53;:::i;:::-;5868:63;;5824:117;5980:2;6006:53;6051:7;6042:6;6031:9;6027:22;6006:53;:::i;:::-;5996:63;;5951:118;6108:2;6134:53;6179:7;6170:6;6159:9;6155:22;6134:53;:::i;:::-;6124:63;;6079:118;6264:2;6253:9;6249:18;6236:32;6295:18;6287:6;6284:30;6281:117;;;6317:79;;:::i;:::-;6281:117;6422:62;6476:7;6467:6;6456:9;6452:22;6422:62;:::i;:::-;6412:72;;6207:287;5558:943;;;;;;;:::o;6507:468::-;6572:6;6580;6629:2;6617:9;6608:7;6604:23;6600:32;6597:119;;;6635:79;;:::i;:::-;6597:119;6755:1;6780:53;6825:7;6816:6;6805:9;6801:22;6780:53;:::i;:::-;6770:63;;6726:117;6882:2;6908:50;6950:7;6941:6;6930:9;6926:22;6908:50;:::i;:::-;6898:60;;6853:115;6507:468;;;;;:::o;6981:474::-;7049:6;7057;7106:2;7094:9;7085:7;7081:23;7077:32;7074:119;;;7112:79;;:::i;:::-;7074:119;7232:1;7257:53;7302:7;7293:6;7282:9;7278:22;7257:53;:::i;:::-;7247:63;;7203:117;7359:2;7385:53;7430:7;7421:6;7410:9;7406:22;7385:53;:::i;:::-;7375:63;;7330:118;6981:474;;;;;:::o;7461:327::-;7519:6;7568:2;7556:9;7547:7;7543:23;7539:32;7536:119;;;7574:79;;:::i;:::-;7536:119;7694:1;7719:52;7763:7;7754:6;7743:9;7739:22;7719:52;:::i;:::-;7709:62;;7665:116;7461:327;;;;:::o;7794:349::-;7863:6;7912:2;7900:9;7891:7;7887:23;7883:32;7880:119;;;7918:79;;:::i;:::-;7880:119;8038:1;8063:63;8118:7;8109:6;8098:9;8094:22;8063:63;:::i;:::-;8053:73;;8009:127;7794:349;;;;:::o;8149:509::-;8218:6;8267:2;8255:9;8246:7;8242:23;8238:32;8235:119;;;8273:79;;:::i;:::-;8235:119;8421:1;8410:9;8406:17;8393:31;8451:18;8443:6;8440:30;8437:117;;;8473:79;;:::i;:::-;8437:117;8578:63;8633:7;8624:6;8613:9;8609:22;8578:63;:::i;:::-;8568:73;;8364:287;8149:509;;;;:::o;8664:327::-;8722:6;8771:2;8759:9;8750:7;8746:23;8742:32;8739:119;;;8777:79;;:::i;:::-;8739:119;8897:1;8922:52;8966:7;8957:6;8946:9;8942:22;8922:52;:::i;:::-;8912:62;;8868:116;8664:327;;;;:::o;8997:670::-;9075:6;9083;9091;9140:2;9128:9;9119:7;9115:23;9111:32;9108:119;;;9146:79;;:::i;:::-;9108:119;9266:1;9291:52;9335:7;9326:6;9315:9;9311:22;9291:52;:::i;:::-;9281:62;;9237:116;9420:2;9409:9;9405:18;9392:32;9451:18;9443:6;9440:30;9437:117;;;9473:79;;:::i;:::-;9437:117;9586:64;9642:7;9633:6;9622:9;9618:22;9586:64;:::i;:::-;9568:82;;;;9363:297;8997:670;;;;;:::o;9673:795::-;9758:6;9766;9774;9823:2;9811:9;9802:7;9798:23;9794:32;9791:119;;;9829:79;;:::i;:::-;9791:119;9949:1;9974:52;10018:7;10009:6;9998:9;9994:22;9974:52;:::i;:::-;9964:62;;9920:116;10103:2;10092:9;10088:18;10075:32;10134:18;10126:6;10123:30;10120:117;;;10156:79;;:::i;:::-;10120:117;10261:62;10315:7;10306:6;10295:9;10291:22;10261:62;:::i;:::-;10251:72;;10046:287;10372:2;10398:53;10443:7;10434:6;10423:9;10419:22;10398:53;:::i;:::-;10388:63;;10343:118;9673:795;;;;;:::o;10474:1137::-;10578:6;10586;10594;10602;10610;10659:3;10647:9;10638:7;10634:23;10630:33;10627:120;;;10666:79;;:::i;:::-;10627:120;10786:1;10811:52;10855:7;10846:6;10835:9;10831:22;10811:52;:::i;:::-;10801:62;;10757:116;10940:2;10929:9;10925:18;10912:32;10971:18;10963:6;10960:30;10957:117;;;10993:79;;:::i;:::-;10957:117;11098:62;11152:7;11143:6;11132:9;11128:22;11098:62;:::i;:::-;11088:72;;10883:287;11209:2;11235:52;11279:7;11270:6;11259:9;11255:22;11235:52;:::i;:::-;11225:62;;11180:117;11364:2;11353:9;11349:18;11336:32;11395:18;11387:6;11384:30;11381:117;;;11417:79;;:::i;:::-;11381:117;11530:64;11586:7;11577:6;11566:9;11562:22;11530:64;:::i;:::-;11512:82;;;;11307:297;10474:1137;;;;;;;;:::o;11617:1117::-;11719:6;11727;11735;11743;11792:3;11780:9;11771:7;11767:23;11763:33;11760:120;;;11799:79;;:::i;:::-;11760:120;11919:1;11944:52;11988:7;11979:6;11968:9;11964:22;11944:52;:::i;:::-;11934:62;;11890:116;12073:2;12062:9;12058:18;12045:32;12104:18;12096:6;12093:30;12090:117;;;12126:79;;:::i;:::-;12090:117;12231:62;12285:7;12276:6;12265:9;12261:22;12231:62;:::i;:::-;12221:72;;12016:287;12342:2;12368:52;12412:7;12403:6;12392:9;12388:22;12368:52;:::i;:::-;12358:62;;12313:117;12497:2;12486:9;12482:18;12469:32;12528:18;12520:6;12517:30;12514:117;;;12550:79;;:::i;:::-;12514:117;12655:62;12709:7;12700:6;12689:9;12685:22;12655:62;:::i;:::-;12645:72;;12440:287;11617:1117;;;;;;;:::o;12740:472::-;12807:6;12815;12864:2;12852:9;12843:7;12839:23;12835:32;12832:119;;;12870:79;;:::i;:::-;12832:119;12990:1;13015:52;13059:7;13050:6;13039:9;13035:22;13015:52;:::i;:::-;13005:62;;12961:116;13116:2;13142:53;13187:7;13178:6;13167:9;13163:22;13142:53;:::i;:::-;13132:63;;13087:118;12740:472;;;;;:::o;13218:329::-;13277:6;13326:2;13314:9;13305:7;13301:23;13297:32;13294:119;;;13332:79;;:::i;:::-;13294:119;13452:1;13477:53;13522:7;13513:6;13502:9;13498:22;13477:53;:::i;:::-;13467:63;;13423:117;13218:329;;;;:::o;13553:507::-;13632:6;13640;13689:2;13677:9;13668:7;13664:23;13660:32;13657:119;;;13695:79;;:::i;:::-;13657:119;13815:1;13840:64;13896:7;13887:6;13876:9;13872:22;13840:64;:::i;:::-;13830:74;;13786:128;13953:2;13979:64;14035:7;14026:6;14015:9;14011:22;13979:64;:::i;:::-;13969:74;;13924:129;13553:507;;;;;:::o;14066:325::-;14123:6;14172:2;14160:9;14151:7;14147:23;14143:32;14140:119;;;14178:79;;:::i;:::-;14140:119;14298:1;14323:51;14366:7;14357:6;14346:9;14342:22;14323:51;:::i;:::-;14313:61;;14269:115;14066:325;;;;:::o;14397:142::-;14500:32;14526:5;14500:32;:::i;:::-;14495:3;14488:45;14397:142;;:::o;14545:118::-;14632:24;14650:5;14632:24;:::i;:::-;14627:3;14620:37;14545:118;;:::o;14669:109::-;14750:21;14765:5;14750:21;:::i;:::-;14745:3;14738:34;14669:109;;:::o;14784:118::-;14871:24;14889:5;14871:24;:::i;:::-;14866:3;14859:37;14784:118;;:::o;14930:301::-;15026:3;15047:70;15110:6;15105:3;15047:70;:::i;:::-;15040:77;;15127:43;15163:6;15158:3;15151:5;15127:43;:::i;:::-;15195:29;15217:6;15195:29;:::i;:::-;15190:3;15186:39;15179:46;;14930:301;;;;;:::o;15259:314::-;15373:3;15394:88;15475:6;15470:3;15394:88;:::i;:::-;15387:95;;15492:43;15528:6;15523:3;15516:5;15492:43;:::i;:::-;15560:6;15555:3;15551:16;15544:23;;15259:314;;;;;:::o;15579:360::-;15665:3;15693:38;15725:5;15693:38;:::i;:::-;15747:70;15810:6;15805:3;15747:70;:::i;:::-;15740:77;;15826:52;15871:6;15866:3;15859:4;15852:5;15848:16;15826:52;:::i;:::-;15903:29;15925:6;15903:29;:::i;:::-;15898:3;15894:39;15887:46;;15669:270;15579:360;;;;:::o;15945:373::-;16049:3;16077:38;16109:5;16077:38;:::i;:::-;16131:88;16212:6;16207:3;16131:88;:::i;:::-;16124:95;;16228:52;16273:6;16268:3;16261:4;16254:5;16250:16;16228:52;:::i;:::-;16305:6;16300:3;16296:16;16289:23;;16053:265;15945:373;;;;:::o;16346:798::-;16429:3;16466:5;16460:12;16495:36;16521:9;16495:36;:::i;:::-;16547:70;16610:6;16605:3;16547:70;:::i;:::-;16540:77;;16648:1;16637:9;16633:17;16664:1;16659:135;;;;16808:1;16803:335;;;;16626:512;;16659:135;16743:4;16739:9;16728;16724:25;16719:3;16712:38;16779:4;16774:3;16770:14;16763:21;;16659:135;;16803:335;16870:37;16901:5;16870:37;:::i;:::-;16929:1;16943:154;16957:6;16954:1;16951:13;16943:154;;;17031:7;17025:14;17021:1;17016:3;17012:11;17005:35;17081:1;17072:7;17068:15;17057:26;;16979:4;16976:1;16972:12;16967:17;;16943:154;;;17126:1;17121:3;17117:11;17110:18;;16810:328;;16626:512;;16433:711;;16346:798;;;;:::o;17172:841::-;17273:3;17310:5;17304:12;17339:36;17365:9;17339:36;:::i;:::-;17391:88;17472:6;17467:3;17391:88;:::i;:::-;17384:95;;17510:1;17499:9;17495:17;17526:1;17521:137;;;;17672:1;17667:340;;;;17488:519;;17521:137;17605:4;17601:9;17590;17586:25;17581:3;17574:38;17641:6;17636:3;17632:16;17625:23;;17521:137;;17667:340;17734:37;17765:5;17734:37;:::i;:::-;17793:1;17807:154;17821:6;17818:1;17815:13;17807:154;;;17895:7;17889:14;17885:1;17880:3;17876:11;17869:35;17945:1;17936:7;17932:15;17921:26;;17843:4;17840:1;17836:12;17831:17;;17807:154;;;17990:6;17985:3;17981:16;17974:23;;17674:333;;17488:519;;17277:736;;17172:841;;;;:::o;18019:364::-;18107:3;18135:39;18168:5;18135:39;:::i;:::-;18190:71;18254:6;18249:3;18190:71;:::i;:::-;18183:78;;18270:52;18315:6;18310:3;18303:4;18296:5;18292:16;18270:52;:::i;:::-;18347:29;18369:6;18347:29;:::i;:::-;18342:3;18338:39;18331:46;;18111:272;18019:364;;;;:::o;18389:377::-;18495:3;18523:39;18556:5;18523:39;:::i;:::-;18578:89;18660:6;18655:3;18578:89;:::i;:::-;18571:96;;18676:52;18721:6;18716:3;18709:4;18702:5;18698:16;18676:52;:::i;:::-;18753:6;18748:3;18744:16;18737:23;;18499:267;18389:377;;;;:::o;18772:366::-;18914:3;18935:67;18999:2;18994:3;18935:67;:::i;:::-;18928:74;;19011:93;19100:3;19011:93;:::i;:::-;19129:2;19124:3;19120:12;19113:19;;18772:366;;;:::o;19144:::-;19286:3;19307:67;19371:2;19366:3;19307:67;:::i;:::-;19300:74;;19383:93;19472:3;19383:93;:::i;:::-;19501:2;19496:3;19492:12;19485:19;;19144:366;;;:::o;19516:::-;19658:3;19679:67;19743:2;19738:3;19679:67;:::i;:::-;19672:74;;19755:93;19844:3;19755:93;:::i;:::-;19873:2;19868:3;19864:12;19857:19;;19516:366;;;:::o;19888:::-;20030:3;20051:67;20115:2;20110:3;20051:67;:::i;:::-;20044:74;;20127:93;20216:3;20127:93;:::i;:::-;20245:2;20240:3;20236:12;20229:19;;19888:366;;;:::o;20260:::-;20402:3;20423:67;20487:2;20482:3;20423:67;:::i;:::-;20416:74;;20499:93;20588:3;20499:93;:::i;:::-;20617:2;20612:3;20608:12;20601:19;;20260:366;;;:::o;20632:::-;20774:3;20795:67;20859:2;20854:3;20795:67;:::i;:::-;20788:74;;20871:93;20960:3;20871:93;:::i;:::-;20989:2;20984:3;20980:12;20973:19;;20632:366;;;:::o;21004:::-;21146:3;21167:67;21231:2;21226:3;21167:67;:::i;:::-;21160:74;;21243:93;21332:3;21243:93;:::i;:::-;21361:2;21356:3;21352:12;21345:19;;21004:366;;;:::o;21376:::-;21518:3;21539:67;21603:2;21598:3;21539:67;:::i;:::-;21532:74;;21615:93;21704:3;21615:93;:::i;:::-;21733:2;21728:3;21724:12;21717:19;;21376:366;;;:::o;21748:::-;21890:3;21911:67;21975:2;21970:3;21911:67;:::i;:::-;21904:74;;21987:93;22076:3;21987:93;:::i;:::-;22105:2;22100:3;22096:12;22089:19;;21748:366;;;:::o;22120:::-;22262:3;22283:67;22347:2;22342:3;22283:67;:::i;:::-;22276:74;;22359:93;22448:3;22359:93;:::i;:::-;22477:2;22472:3;22468:12;22461:19;;22120:366;;;:::o;22492:::-;22634:3;22655:67;22719:2;22714:3;22655:67;:::i;:::-;22648:74;;22731:93;22820:3;22731:93;:::i;:::-;22849:2;22844:3;22840:12;22833:19;;22492:366;;;:::o;22864:::-;23006:3;23027:67;23091:2;23086:3;23027:67;:::i;:::-;23020:74;;23103:93;23192:3;23103:93;:::i;:::-;23221:2;23216:3;23212:12;23205:19;;22864:366;;;:::o;23236:::-;23378:3;23399:67;23463:2;23458:3;23399:67;:::i;:::-;23392:74;;23475:93;23564:3;23475:93;:::i;:::-;23593:2;23588:3;23584:12;23577:19;;23236:366;;;:::o;23608:::-;23750:3;23771:67;23835:2;23830:3;23771:67;:::i;:::-;23764:74;;23847:93;23936:3;23847:93;:::i;:::-;23965:2;23960:3;23956:12;23949:19;;23608:366;;;:::o;23980:::-;24122:3;24143:67;24207:2;24202:3;24143:67;:::i;:::-;24136:74;;24219:93;24308:3;24219:93;:::i;:::-;24337:2;24332:3;24328:12;24321:19;;23980:366;;;:::o;24352:::-;24494:3;24515:67;24579:2;24574:3;24515:67;:::i;:::-;24508:74;;24591:93;24680:3;24591:93;:::i;:::-;24709:2;24704:3;24700:12;24693:19;;24352:366;;;:::o;24724:::-;24866:3;24887:67;24951:2;24946:3;24887:67;:::i;:::-;24880:74;;24963:93;25052:3;24963:93;:::i;:::-;25081:2;25076:3;25072:12;25065:19;;24724:366;;;:::o;25096:::-;25238:3;25259:67;25323:2;25318:3;25259:67;:::i;:::-;25252:74;;25335:93;25424:3;25335:93;:::i;:::-;25453:2;25448:3;25444:12;25437:19;;25096:366;;;:::o;25468:::-;25610:3;25631:67;25695:2;25690:3;25631:67;:::i;:::-;25624:74;;25707:93;25796:3;25707:93;:::i;:::-;25825:2;25820:3;25816:12;25809:19;;25468:366;;;:::o;25840:::-;25982:3;26003:67;26067:2;26062:3;26003:67;:::i;:::-;25996:74;;26079:93;26168:3;26079:93;:::i;:::-;26197:2;26192:3;26188:12;26181:19;;25840:366;;;:::o;26212:::-;26354:3;26375:67;26439:2;26434:3;26375:67;:::i;:::-;26368:74;;26451:93;26540:3;26451:93;:::i;:::-;26569:2;26564:3;26560:12;26553:19;;26212:366;;;:::o;26584:::-;26726:3;26747:67;26811:2;26806:3;26747:67;:::i;:::-;26740:74;;26823:93;26912:3;26823:93;:::i;:::-;26941:2;26936:3;26932:12;26925:19;;26584:366;;;:::o;26956:398::-;27115:3;27136:83;27217:1;27212:3;27136:83;:::i;:::-;27129:90;;27228:93;27317:3;27228:93;:::i;:::-;27346:1;27341:3;27337:11;27330:18;;26956:398;;;:::o;27360:366::-;27502:3;27523:67;27587:2;27582:3;27523:67;:::i;:::-;27516:74;;27599:93;27688:3;27599:93;:::i;:::-;27717:2;27712:3;27708:12;27701:19;;27360:366;;;:::o;27732:::-;27874:3;27895:67;27959:2;27954:3;27895:67;:::i;:::-;27888:74;;27971:93;28060:3;27971:93;:::i;:::-;28089:2;28084:3;28080:12;28073:19;;27732:366;;;:::o;28104:::-;28246:3;28267:67;28331:2;28326:3;28267:67;:::i;:::-;28260:74;;28343:93;28432:3;28343:93;:::i;:::-;28461:2;28456:3;28452:12;28445:19;;28104:366;;;:::o;28476:115::-;28561:23;28578:5;28561:23;:::i;:::-;28556:3;28549:36;28476:115;;:::o;28597:153::-;28700:43;28719:23;28736:5;28719:23;:::i;:::-;28700:43;:::i;:::-;28695:3;28688:56;28597:153;;:::o;28756:118::-;28843:24;28861:5;28843:24;:::i;:::-;28838:3;28831:37;28756:118;;:::o;28880:157::-;28985:45;29005:24;29023:5;29005:24;:::i;:::-;28985:45;:::i;:::-;28980:3;28973:58;28880:157;;:::o;29043:115::-;29128:23;29145:5;29128:23;:::i;:::-;29123:3;29116:36;29043:115;;:::o;29164:291::-;29304:3;29326:103;29425:3;29416:6;29408;29326:103;:::i;:::-;29319:110;;29446:3;29439:10;;29164:291;;;;;:::o;29461:271::-;29591:3;29613:93;29702:3;29693:6;29613:93;:::i;:::-;29606:100;;29723:3;29716:10;;29461:271;;;;:::o;29738:265::-;29865:3;29887:90;29973:3;29964:6;29887:90;:::i;:::-;29880:97;;29994:3;29987:10;;29738:265;;;;:::o;30009:435::-;30189:3;30211:95;30302:3;30293:6;30211:95;:::i;:::-;30204:102;;30323:95;30414:3;30405:6;30323:95;:::i;:::-;30316:102;;30435:3;30428:10;;30009:435;;;;;:::o;30450:379::-;30634:3;30656:147;30799:3;30656:147;:::i;:::-;30649:154;;30820:3;30813:10;;30450:379;;;:::o;30835:392::-;30973:3;30988:73;31057:3;31048:6;30988:73;:::i;:::-;31086:1;31081:3;31077:11;31070:18;;31098:75;31169:3;31160:6;31098:75;:::i;:::-;31198:2;31193:3;31189:12;31182:19;;31218:3;31211:10;;30835:392;;;;;:::o;31233:222::-;31326:4;31364:2;31353:9;31349:18;31341:26;;31377:71;31445:1;31434:9;31430:17;31421:6;31377:71;:::i;:::-;31233:222;;;;:::o;31461:640::-;31656:4;31694:3;31683:9;31679:19;31671:27;;31708:71;31776:1;31765:9;31761:17;31752:6;31708:71;:::i;:::-;31789:72;31857:2;31846:9;31842:18;31833:6;31789:72;:::i;:::-;31871;31939:2;31928:9;31924:18;31915:6;31871:72;:::i;:::-;31990:9;31984:4;31980:20;31975:2;31964:9;31960:18;31953:48;32018:76;32089:4;32080:6;32018:76;:::i;:::-;32010:84;;31461:640;;;;;;;:::o;32107:332::-;32228:4;32266:2;32255:9;32251:18;32243:26;;32279:71;32347:1;32336:9;32332:17;32323:6;32279:71;:::i;:::-;32360:72;32428:2;32417:9;32413:18;32404:6;32360:72;:::i;:::-;32107:332;;;;;:::o;32445:210::-;32532:4;32570:2;32559:9;32555:18;32547:26;;32583:65;32645:1;32634:9;32630:17;32621:6;32583:65;:::i;:::-;32445:210;;;;:::o;32661:309::-;32772:4;32810:2;32799:9;32795:18;32787:26;;32859:9;32853:4;32849:20;32845:1;32834:9;32830:17;32823:47;32887:76;32958:4;32949:6;32887:76;:::i;:::-;32879:84;;32661:309;;;;:::o;32976:313::-;33089:4;33127:2;33116:9;33112:18;33104:26;;33176:9;33170:4;33166:20;33162:1;33151:9;33147:17;33140:47;33204:78;33277:4;33268:6;33204:78;:::i;:::-;33196:86;;32976:313;;;;:::o;33295:419::-;33461:4;33499:2;33488:9;33484:18;33476:26;;33548:9;33542:4;33538:20;33534:1;33523:9;33519:17;33512:47;33576:131;33702:4;33576:131;:::i;:::-;33568:139;;33295:419;;;:::o;33720:::-;33886:4;33924:2;33913:9;33909:18;33901:26;;33973:9;33967:4;33963:20;33959:1;33948:9;33944:17;33937:47;34001:131;34127:4;34001:131;:::i;:::-;33993:139;;33720:419;;;:::o;34145:::-;34311:4;34349:2;34338:9;34334:18;34326:26;;34398:9;34392:4;34388:20;34384:1;34373:9;34369:17;34362:47;34426:131;34552:4;34426:131;:::i;:::-;34418:139;;34145:419;;;:::o;34570:::-;34736:4;34774:2;34763:9;34759:18;34751:26;;34823:9;34817:4;34813:20;34809:1;34798:9;34794:17;34787:47;34851:131;34977:4;34851:131;:::i;:::-;34843:139;;34570:419;;;:::o;34995:::-;35161:4;35199:2;35188:9;35184:18;35176:26;;35248:9;35242:4;35238:20;35234:1;35223:9;35219:17;35212:47;35276:131;35402:4;35276:131;:::i;:::-;35268:139;;34995:419;;;:::o;35420:::-;35586:4;35624:2;35613:9;35609:18;35601:26;;35673:9;35667:4;35663:20;35659:1;35648:9;35644:17;35637:47;35701:131;35827:4;35701:131;:::i;:::-;35693:139;;35420:419;;;:::o;35845:::-;36011:4;36049:2;36038:9;36034:18;36026:26;;36098:9;36092:4;36088:20;36084:1;36073:9;36069:17;36062:47;36126:131;36252:4;36126:131;:::i;:::-;36118:139;;35845:419;;;:::o;36270:::-;36436:4;36474:2;36463:9;36459:18;36451:26;;36523:9;36517:4;36513:20;36509:1;36498:9;36494:17;36487:47;36551:131;36677:4;36551:131;:::i;:::-;36543:139;;36270:419;;;:::o;36695:::-;36861:4;36899:2;36888:9;36884:18;36876:26;;36948:9;36942:4;36938:20;36934:1;36923:9;36919:17;36912:47;36976:131;37102:4;36976:131;:::i;:::-;36968:139;;36695:419;;;:::o;37120:::-;37286:4;37324:2;37313:9;37309:18;37301:26;;37373:9;37367:4;37363:20;37359:1;37348:9;37344:17;37337:47;37401:131;37527:4;37401:131;:::i;:::-;37393:139;;37120:419;;;:::o;37545:::-;37711:4;37749:2;37738:9;37734:18;37726:26;;37798:9;37792:4;37788:20;37784:1;37773:9;37769:17;37762:47;37826:131;37952:4;37826:131;:::i;:::-;37818:139;;37545:419;;;:::o;37970:::-;38136:4;38174:2;38163:9;38159:18;38151:26;;38223:9;38217:4;38213:20;38209:1;38198:9;38194:17;38187:47;38251:131;38377:4;38251:131;:::i;:::-;38243:139;;37970:419;;;:::o;38395:::-;38561:4;38599:2;38588:9;38584:18;38576:26;;38648:9;38642:4;38638:20;38634:1;38623:9;38619:17;38612:47;38676:131;38802:4;38676:131;:::i;:::-;38668:139;;38395:419;;;:::o;38820:::-;38986:4;39024:2;39013:9;39009:18;39001:26;;39073:9;39067:4;39063:20;39059:1;39048:9;39044:17;39037:47;39101:131;39227:4;39101:131;:::i;:::-;39093:139;;38820:419;;;:::o;39245:::-;39411:4;39449:2;39438:9;39434:18;39426:26;;39498:9;39492:4;39488:20;39484:1;39473:9;39469:17;39462:47;39526:131;39652:4;39526:131;:::i;:::-;39518:139;;39245:419;;;:::o;39670:::-;39836:4;39874:2;39863:9;39859:18;39851:26;;39923:9;39917:4;39913:20;39909:1;39898:9;39894:17;39887:47;39951:131;40077:4;39951:131;:::i;:::-;39943:139;;39670:419;;;:::o;40095:::-;40261:4;40299:2;40288:9;40284:18;40276:26;;40348:9;40342:4;40338:20;40334:1;40323:9;40319:17;40312:47;40376:131;40502:4;40376:131;:::i;:::-;40368:139;;40095:419;;;:::o;40520:::-;40686:4;40724:2;40713:9;40709:18;40701:26;;40773:9;40767:4;40763:20;40759:1;40748:9;40744:17;40737:47;40801:131;40927:4;40801:131;:::i;:::-;40793:139;;40520:419;;;:::o;40945:::-;41111:4;41149:2;41138:9;41134:18;41126:26;;41198:9;41192:4;41188:20;41184:1;41173:9;41169:17;41162:47;41226:131;41352:4;41226:131;:::i;:::-;41218:139;;40945:419;;;:::o;41370:::-;41536:4;41574:2;41563:9;41559:18;41551:26;;41623:9;41617:4;41613:20;41609:1;41598:9;41594:17;41587:47;41651:131;41777:4;41651:131;:::i;:::-;41643:139;;41370:419;;;:::o;41795:::-;41961:4;41999:2;41988:9;41984:18;41976:26;;42048:9;42042:4;42038:20;42034:1;42023:9;42019:17;42012:47;42076:131;42202:4;42076:131;:::i;:::-;42068:139;;41795:419;;;:::o;42220:::-;42386:4;42424:2;42413:9;42409:18;42401:26;;42473:9;42467:4;42463:20;42459:1;42448:9;42444:17;42437:47;42501:131;42627:4;42501:131;:::i;:::-;42493:139;;42220:419;;;:::o;42645:::-;42811:4;42849:2;42838:9;42834:18;42826:26;;42898:9;42892:4;42888:20;42884:1;42873:9;42869:17;42862:47;42926:131;43052:4;42926:131;:::i;:::-;42918:139;;42645:419;;;:::o;43070:::-;43236:4;43274:2;43263:9;43259:18;43251:26;;43323:9;43317:4;43313:20;43309:1;43298:9;43294:17;43287:47;43351:131;43477:4;43351:131;:::i;:::-;43343:139;;43070:419;;;:::o;43495:::-;43661:4;43699:2;43688:9;43684:18;43676:26;;43748:9;43742:4;43738:20;43734:1;43723:9;43719:17;43712:47;43776:131;43902:4;43776:131;:::i;:::-;43768:139;;43495:419;;;:::o;43920:822::-;44153:4;44191:3;44180:9;44176:19;44168:27;;44205:69;44271:1;44260:9;44256:17;44247:6;44205:69;:::i;:::-;44284:72;44352:2;44341:9;44337:18;44328:6;44284:72;:::i;:::-;44403:9;44397:4;44393:20;44388:2;44377:9;44373:18;44366:48;44431:76;44502:4;44493:6;44431:76;:::i;:::-;44423:84;;44517:66;44579:2;44568:9;44564:18;44555:6;44517:66;:::i;:::-;44631:9;44625:4;44621:20;44615:3;44604:9;44600:19;44593:49;44659:76;44730:4;44721:6;44659:76;:::i;:::-;44651:84;;43920:822;;;;;;;;:::o;44748:739::-;44967:4;45005:3;44994:9;44990:19;44982:27;;45019:69;45085:1;45074:9;45070:17;45061:6;45019:69;:::i;:::-;45135:9;45129:4;45125:20;45120:2;45109:9;45105:18;45098:48;45163:76;45234:4;45225:6;45163:76;:::i;:::-;45155:84;;45249:70;45315:2;45304:9;45300:18;45291:6;45249:70;:::i;:::-;45366:9;45360:4;45356:20;45351:2;45340:9;45336:18;45329:48;45394:86;45475:4;45466:6;45458;45394:86;:::i;:::-;45386:94;;44748:739;;;;;;;;:::o;45493:719::-;45702:4;45740:3;45729:9;45725:19;45717:27;;45754:69;45820:1;45809:9;45805:17;45796:6;45754:69;:::i;:::-;45870:9;45864:4;45860:20;45855:2;45844:9;45840:18;45833:48;45898:76;45969:4;45960:6;45898:76;:::i;:::-;45890:84;;45984:70;46050:2;46039:9;46035:18;46026:6;45984:70;:::i;:::-;46101:9;46095:4;46091:20;46086:2;46075:9;46071:18;46064:48;46129:76;46200:4;46191:6;46129:76;:::i;:::-;46121:84;;45493:719;;;;;;;:::o;46218:1058::-;46516:4;46554:3;46543:9;46539:19;46531:27;;46568:69;46634:1;46623:9;46619:17;46610:6;46568:69;:::i;:::-;46684:9;46678:4;46674:20;46669:2;46658:9;46654:18;46647:48;46712:73;46780:4;46771:6;46712:73;:::i;:::-;46704:81;;46832:9;46826:4;46822:20;46817:2;46806:9;46802:18;46795:48;46860:76;46931:4;46922:6;46860:76;:::i;:::-;46852:84;;46946:88;47030:2;47019:9;47015:18;47006:6;46946:88;:::i;:::-;47044:73;47112:3;47101:9;47097:19;47088:6;47044:73;:::i;:::-;47165:9;47159:4;47155:20;47149:3;47138:9;47134:19;47127:49;47193:76;47264:4;47255:6;47193:76;:::i;:::-;47185:84;;46218:1058;;;;;;;;;:::o;47282:222::-;47375:4;47413:2;47402:9;47398:18;47390:26;;47426:71;47494:1;47483:9;47479:17;47470:6;47426:71;:::i;:::-;47282:222;;;;:::o;47510:332::-;47631:4;47669:2;47658:9;47654:18;47646:26;;47682:71;47750:1;47739:9;47735:17;47726:6;47682:71;:::i;:::-;47763:72;47831:2;47820:9;47816:18;47807:6;47763:72;:::i;:::-;47510:332;;;;;:::o;47848:129::-;47882:6;47909:20;;:::i;:::-;47899:30;;47938:33;47966:4;47958:6;47938:33;:::i;:::-;47848:129;;;:::o;47983:75::-;48016:6;48049:2;48043:9;48033:19;;47983:75;:::o;48064:307::-;48125:4;48215:18;48207:6;48204:30;48201:56;;;48237:18;;:::i;:::-;48201:56;48275:29;48297:6;48275:29;:::i;:::-;48267:37;;48359:4;48353;48349:15;48341:23;;48064:307;;;:::o;48377:308::-;48439:4;48529:18;48521:6;48518:30;48515:56;;;48551:18;;:::i;:::-;48515:56;48589:29;48611:6;48589:29;:::i;:::-;48581:37;;48673:4;48667;48663:15;48655:23;;48377:308;;;:::o;48691:140::-;48739:4;48762:3;48754:11;;48785:3;48782:1;48775:14;48819:4;48816:1;48806:18;48798:26;;48691:140;;;:::o;48837:98::-;48888:6;48922:5;48916:12;48906:22;;48837:98;;;:::o;48941:99::-;48993:6;49027:5;49021:12;49011:22;;48941:99;;;:::o;49046:168::-;49129:11;49163:6;49158:3;49151:19;49203:4;49198:3;49194:14;49179:29;;49046:168;;;;:::o;49220:147::-;49321:11;49358:3;49343:18;;49220:147;;;;:::o;49373:169::-;49457:11;49491:6;49486:3;49479:19;49531:4;49526:3;49522:14;49507:29;;49373:169;;;;:::o;49548:148::-;49650:11;49687:3;49672:18;;49548:148;;;;:::o;49702:305::-;49742:3;49761:20;49779:1;49761:20;:::i;:::-;49756:25;;49795:20;49813:1;49795:20;:::i;:::-;49790:25;;49949:1;49881:66;49877:74;49874:1;49871:81;49868:107;;;49955:18;;:::i;:::-;49868:107;49999:1;49996;49992:9;49985:16;;49702:305;;;;:::o;50013:185::-;50053:1;50070:20;50088:1;50070:20;:::i;:::-;50065:25;;50104:20;50122:1;50104:20;:::i;:::-;50099:25;;50143:1;50133:35;;50148:18;;:::i;:::-;50133:35;50190:1;50187;50183:9;50178:14;;50013:185;;;;:::o;50204:191::-;50244:4;50264:20;50282:1;50264:20;:::i;:::-;50259:25;;50298:20;50316:1;50298:20;:::i;:::-;50293:25;;50337:1;50334;50331:8;50328:34;;;50342:18;;:::i;:::-;50328:34;50387:1;50384;50380:9;50372:17;;50204:191;;;;:::o;50401:96::-;50438:7;50467:24;50485:5;50467:24;:::i;:::-;50456:35;;50401:96;;;:::o;50503:104::-;50548:7;50577:24;50595:5;50577:24;:::i;:::-;50566:35;;50503:104;;;:::o;50613:90::-;50647:7;50690:5;50683:13;50676:21;50665:32;;50613:90;;;:::o;50709:77::-;50746:7;50775:5;50764:16;;50709:77;;;:::o;50792:149::-;50828:7;50868:66;50861:5;50857:78;50846:89;;50792:149;;;:::o;50947:89::-;50983:7;51023:6;51016:5;51012:18;51001:29;;50947:89;;;:::o;51042:126::-;51079:7;51119:42;51112:5;51108:54;51097:65;;51042:126;;;:::o;51174:77::-;51211:7;51240:5;51229:16;;51174:77;;;:::o;51257:101::-;51293:7;51333:18;51326:5;51322:30;51311:41;;51257:101;;;:::o;51364:86::-;51399:7;51439:4;51432:5;51428:16;51417:27;;51364:86;;;:::o;51456:154::-;51540:6;51535:3;51530;51517:30;51602:1;51593:6;51588:3;51584:16;51577:27;51456:154;;;:::o;51616:307::-;51684:1;51694:113;51708:6;51705:1;51702:13;51694:113;;;51793:1;51788:3;51784:11;51778:18;51774:1;51769:3;51765:11;51758:39;51730:2;51727:1;51723:10;51718:15;;51694:113;;;51825:6;51822:1;51819:13;51816:101;;;51905:1;51896:6;51891:3;51887:16;51880:27;51816:101;51665:258;51616:307;;;:::o;51929:320::-;51973:6;52010:1;52004:4;52000:12;51990:22;;52057:1;52051:4;52047:12;52078:18;52068:81;;52134:4;52126:6;52122:17;52112:27;;52068:81;52196:2;52188:6;52185:14;52165:18;52162:38;52159:84;;;52215:18;;:::i;:::-;52159:84;51980:269;51929:320;;;:::o;52255:281::-;52338:27;52360:4;52338:27;:::i;:::-;52330:6;52326:40;52468:6;52456:10;52453:22;52432:18;52420:10;52417:34;52414:62;52411:88;;;52479:18;;:::i;:::-;52411:88;52519:10;52515:2;52508:22;52298:238;52255:281;;:::o;52542:233::-;52581:3;52604:24;52622:5;52604:24;:::i;:::-;52595:33;;52650:66;52643:5;52640:77;52637:103;;;52720:18;;:::i;:::-;52637:103;52767:1;52760:5;52756:13;52749:20;;52542:233;;;:::o;52781:167::-;52818:3;52841:22;52857:5;52841:22;:::i;:::-;52832:31;;52885:4;52878:5;52875:15;52872:41;;;52893:18;;:::i;:::-;52872:41;52940:1;52933:5;52929:13;52922:20;;52781:167;;;:::o;52954:94::-;52992:7;53021:21;53036:5;53021:21;:::i;:::-;53010:32;;52954:94;;;:::o;53054:79::-;53093:7;53122:5;53111:16;;53054:79;;;:::o;53139:176::-;53171:1;53188:20;53206:1;53188:20;:::i;:::-;53183:25;;53222:20;53240:1;53222:20;:::i;:::-;53217:25;;53261:1;53251:35;;53266:18;;:::i;:::-;53251:35;53307:1;53304;53300:9;53295:14;;53139:176;;;;:::o;53321:180::-;53369:77;53366:1;53359:88;53466:4;53463:1;53456:15;53490:4;53487:1;53480:15;53507:180;53555:77;53552:1;53545:88;53652:4;53649:1;53642:15;53676:4;53673:1;53666:15;53693:180;53741:77;53738:1;53731:88;53838:4;53835:1;53828:15;53862:4;53859:1;53852:15;53879:180;53927:77;53924:1;53917:88;54024:4;54021:1;54014:15;54048:4;54045:1;54038:15;54065:180;54113:77;54110:1;54103:88;54210:4;54207:1;54200:15;54234:4;54231:1;54224:15;54251:117;54360:1;54357;54350:12;54374:117;54483:1;54480;54473:12;54497:117;54606:1;54603;54596:12;54620:117;54729:1;54726;54719:12;54743:117;54852:1;54849;54842:12;54866:117;54975:1;54972;54965:12;54989:102;55030:6;55081:2;55077:7;55072:2;55065:5;55061:14;55057:28;55047:38;;54989:102;;;:::o;55097:96::-;55131:8;55180:5;55175:3;55171:15;55150:36;;55097:96;;;:::o;55199:225::-;55339:34;55335:1;55327:6;55323:14;55316:58;55408:8;55403:2;55395:6;55391:15;55384:33;55199:225;:::o;55430:237::-;55570:34;55566:1;55558:6;55554:14;55547:58;55639:20;55634:2;55626:6;55622:15;55615:45;55430:237;:::o;55673:225::-;55813:34;55809:1;55801:6;55797:14;55790:58;55882:8;55877:2;55869:6;55865:15;55858:33;55673:225;:::o;55904:223::-;56044:34;56040:1;56032:6;56028:14;56021:58;56113:6;56108:2;56100:6;56096:15;56089:31;55904:223;:::o;56133:175::-;56273:27;56269:1;56261:6;56257:14;56250:51;56133:175;:::o;56314:233::-;56454:34;56450:1;56442:6;56438:14;56431:58;56523:16;56518:2;56510:6;56506:15;56499:41;56314:233;:::o;56553:176::-;56693:28;56689:1;56681:6;56677:14;56670:52;56553:176;:::o;56735:221::-;56875:34;56871:1;56863:6;56859:14;56852:58;56944:4;56939:2;56931:6;56927:15;56920:29;56735:221;:::o;56962:231::-;57102:34;57098:1;57090:6;57086:14;57079:58;57171:14;57166:2;57158:6;57154:15;57147:39;56962:231;:::o;57199:243::-;57339:34;57335:1;57327:6;57323:14;57316:58;57408:26;57403:2;57395:6;57391:15;57384:51;57199:243;:::o;57448:229::-;57588:34;57584:1;57576:6;57572:14;57565:58;57657:12;57652:2;57644:6;57640:15;57633:37;57448:229;:::o;57683:228::-;57823:34;57819:1;57811:6;57807:14;57800:58;57892:11;57887:2;57879:6;57875:15;57868:36;57683:228;:::o;57917:303::-;58057:34;58053:1;58045:6;58041:14;58034:58;58126:34;58121:2;58113:6;58109:15;58102:59;58195:17;58190:2;58182:6;58178:15;58171:42;57917:303;:::o;58226:230::-;58366:34;58362:1;58354:6;58350:14;58343:58;58435:13;58430:2;58422:6;58418:15;58411:38;58226:230;:::o;58462:182::-;58602:34;58598:1;58590:6;58586:14;58579:58;58462:182;:::o;58650:231::-;58790:34;58786:1;58778:6;58774:14;58767:58;58859:14;58854:2;58846:6;58842:15;58835:39;58650:231;:::o;58887:182::-;59027:34;59023:1;59015:6;59011:14;59004:58;58887:182;:::o;59075:239::-;59215:34;59211:1;59203:6;59199:14;59192:58;59284:22;59279:2;59271:6;59267:15;59260:47;59075:239;:::o;59320:228::-;59460:34;59456:1;59448:6;59444:14;59437:58;59529:11;59524:2;59516:6;59512:15;59505:36;59320:228;:::o;59554:234::-;59694:34;59690:1;59682:6;59678:14;59671:58;59763:17;59758:2;59750:6;59746:15;59739:42;59554:234;:::o;59794:223::-;59934:34;59930:1;59922:6;59918:14;59911:58;60003:6;59998:2;59990:6;59986:15;59979:31;59794:223;:::o;60023:220::-;60163:34;60159:1;60151:6;60147:14;60140:58;60232:3;60227:2;60219:6;60215:15;60208:28;60023:220;:::o;60249:114::-;;:::o;60369:236::-;60509:34;60505:1;60497:6;60493:14;60486:58;60578:19;60573:2;60565:6;60561:15;60554:44;60369:236;:::o;60611:225::-;60751:34;60747:1;60739:6;60735:14;60728:58;60820:8;60815:2;60807:6;60803:15;60796:33;60611:225;:::o;60842:235::-;60982:34;60978:1;60970:6;60966:14;60959:58;61051:18;61046:2;61038:6;61034:15;61027:43;60842:235;:::o;61083:122::-;61156:24;61174:5;61156:24;:::i;:::-;61149:5;61146:35;61136:63;;61195:1;61192;61185:12;61136:63;61083:122;:::o;61211:138::-;61292:32;61318:5;61292:32;:::i;:::-;61285:5;61282:43;61272:71;;61339:1;61336;61329:12;61272:71;61211:138;:::o;61355:116::-;61425:21;61440:5;61425:21;:::i;:::-;61418:5;61415:32;61405:60;;61461:1;61458;61451:12;61405:60;61355:116;:::o;61477:120::-;61549:23;61566:5;61549:23;:::i;:::-;61542:5;61539:34;61529:62;;61587:1;61584;61577:12;61529:62;61477:120;:::o;61603:::-;61675:23;61692:5;61675:23;:::i;:::-;61668:5;61665:34;61655:62;;61713:1;61710;61703:12;61655:62;61603:120;:::o;61729:122::-;61802:24;61820:5;61802:24;:::i;:::-;61795:5;61792:35;61782:63;;61841:1;61838;61831:12;61782:63;61729:122;:::o;61857:120::-;61929:23;61946:5;61929:23;:::i;:::-;61922:5;61919:34;61909:62;;61967:1;61964;61957:12;61909:62;61857:120;:::o;61983:118::-;62054:22;62070:5;62054:22;:::i;:::-;62047:5;62044:33;62034:61;;62091:1;62088;62081:12;62034:61;61983:118;:::o

Swarm Source

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