{
    "Function": "slitherConstructorConstantVariables",
    "File": "contracts/openzeppelin-solidity/contracts/mocks/ERC777SenderRecipientMock.sol",
    "Parent Contracts": [
        "contracts/openzeppelin-solidity/contracts/utils/introspection/ERC1820Implementer.sol",
        "contracts/openzeppelin-solidity/contracts/utils/introspection/IERC1820Implementer.sol",
        "contracts/openzeppelin-solidity/contracts/token/ERC777/IERC777Recipient.sol",
        "contracts/openzeppelin-solidity/contracts/token/ERC777/IERC777Sender.sol",
        "contracts/openzeppelin-solidity/contracts/utils/Context.sol"
    ],
    "High-Level Calls": [],
    "Internal Calls": [
        "keccak256(bytes)",
        "keccak256(bytes)"
    ],
    "Library Calls": [],
    "Low-Level Calls": [],
    "Code": "contract ERC777SenderRecipientMock is Context, IERC777Sender, IERC777Recipient, ERC1820Implementer {\n    event TokensToSendCalled(\n        address operator,\n        address from,\n        address to,\n        uint256 amount,\n        bytes data,\n        bytes operatorData,\n        address token,\n        uint256 fromBalance,\n        uint256 toBalance\n    );\n\n    event TokensReceivedCalled(\n        address operator,\n        address from,\n        address to,\n        uint256 amount,\n        bytes data,\n        bytes operatorData,\n        address token,\n        uint256 fromBalance,\n        uint256 toBalance\n    );\n\n    // Emitted in ERC777Mock. Here for easier decoding\n    event BeforeTokenTransfer();\n\n    bool private _shouldRevertSend;\n    bool private _shouldRevertReceive;\n\n    IERC1820Registry private _erc1820 = IERC1820Registry(0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24);\n\n    bytes32 private constant _TOKENS_SENDER_INTERFACE_HASH = keccak256(\"ERC777TokensSender\");\n    bytes32 private constant _TOKENS_RECIPIENT_INTERFACE_HASH = keccak256(\"ERC777TokensRecipient\");\n\n    function tokensToSend(\n        address operator,\n        address from,\n        address to,\n        uint256 amount,\n        bytes calldata userData,\n        bytes calldata operatorData\n    ) external override {\n        if (_shouldRevertSend) {\n            revert();\n        }\n\n        IERC777 token = IERC777(_msgSender());\n\n        uint256 fromBalance = token.balanceOf(from);\n        // when called due to burn, to will be the zero address, which will have a balance of 0\n        uint256 toBalance = token.balanceOf(to);\n\n        emit TokensToSendCalled(\n            operator,\n            from,\n            to,\n            amount,\n            userData,\n            operatorData,\n            address(token),\n            fromBalance,\n            toBalance\n        );\n    }\n\n    function tokensReceived(\n        address operator,\n        address from,\n        address to,\n        uint256 amount,\n        bytes calldata userData,\n        bytes calldata operatorData\n    ) external override {\n        if (_shouldRevertReceive) {\n            revert();\n        }\n\n        IERC777 token = IERC777(_msgSender());\n\n        uint256 fromBalance = token.balanceOf(from);\n        // when called due to burn, to will be the zero address, which will have a balance of 0\n        uint256 toBalance = token.balanceOf(to);\n\n        emit TokensReceivedCalled(\n            operator,\n            from,\n            to,\n            amount,\n            userData,\n            operatorData,\n            address(token),\n            fromBalance,\n            toBalance\n        );\n    }\n\n    function senderFor(address account) public {\n        _registerInterfaceForAddress(_TOKENS_SENDER_INTERFACE_HASH, account);\n\n        address self = address(this);\n        if (account == self) {\n            registerSender(self);\n        }\n    }\n\n    function registerSender(address sender) public {\n        _erc1820.setInterfaceImplementer(address(this), _TOKENS_SENDER_INTERFACE_HASH, sender);\n    }\n\n    function recipientFor(address account) public {\n        _registerInterfaceForAddress(_TOKENS_RECIPIENT_INTERFACE_HASH, account);\n\n        address self = address(this);\n        if (account == self) {\n            registerRecipient(self);\n        }\n    }\n\n    function registerRecipient(address recipient) public {\n        _erc1820.setInterfaceImplementer(address(this), _TOKENS_RECIPIENT_INTERFACE_HASH, recipient);\n    }\n\n    function setShouldRevertSend(bool shouldRevert) public {\n        _shouldRevertSend = shouldRevert;\n    }\n\n    function setShouldRevertReceive(bool shouldRevert) public {\n        _shouldRevertReceive = shouldRevert;\n    }\n\n    function send(\n        IERC777 token,\n        address to,\n        uint256 amount,\n        bytes memory data\n    ) public {\n        // This is 777's send function, not the Solidity send function\n        token.send(to, amount, data); // solhint-disable-line check-send-result\n    }\n\n    function burn(\n        IERC777 token,\n        uint256 amount,\n        bytes memory data\n    ) public {\n        token.burn(amount, data);\n    }\n}"
}