{
    "Function": "getProxyImplementation",
    "File": "contracts/openzeppelin-solidity/contracts/proxy/transparent/ProxyAdmin.sol",
    "Parent Contracts": [
        "contracts/openzeppelin-solidity/contracts/access/Ownable.sol",
        "contracts/openzeppelin-solidity/contracts/utils/Context.sol"
    ],
    "High-Level Calls": [],
    "Internal Calls": [
        "abi.decode()",
        "require(bool)"
    ],
    "Library Calls": [],
    "Low-Level Calls": [
        "staticcall"
    ],
    "Code": "function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n        // We need to manually run the static call since the getter cannot be flagged as view\n        // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n        (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n        require(success);\n        return abi.decode(returndata, (address));\n    }"
}