// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.6;
pragma experimental ABIEncoderV2;

contract FakeTaker {

    struct Result {
        bool success;
        bytes resultData;
        uint256 gasUsed;
    }

    receive() payable external {}

    function execute(address payable to, bytes calldata data)
        public
        payable
        returns (Result memory result)
    {
        uint256 gasBefore = gasleft();
        (
            result.success,
            result.resultData
        ) = to.call{ value: msg.value }(data);
        result.gasUsed = gasBefore - gasleft();
    }
}
