{
    "Function": "_msgSender",
    "File": "contracts/openzeppelin-solidity/contracts/metatx/ERC2771Context.sol",
    "Parent Contracts": [
        "contracts/openzeppelin-solidity/contracts/utils/Context.sol"
    ],
    "High-Level Calls": [],
    "Internal Calls": [
        "calldataload(uint256)",
        "calldatasize()",
        "_msgSender",
        "isTrustedForwarder"
    ],
    "Library Calls": [],
    "Low-Level Calls": [],
    "Code": "function _msgSender() internal view virtual override returns (address sender) {\n        if (isTrustedForwarder(msg.sender)) {\n            // The assembly code is more direct than the Solidity version using `abi.decode`.\n            assembly {\n                sender := shr(96, calldataload(sub(calldatasize(), 20)))\n            }\n        } else {\n            return super._msgSender();\n        }\n    }"
}