You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: proof_response.go
    path of file: ./repos/chainlink/core/services/vrf/proof
    
    the code of the file until where you have to start completion: package proof

// Contains logic/data for mandatorily mixing VRF seeds with the hash of the
// block in which a VRF request appeared

import (
	"math/big"

	"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/vrf_coordinator_v2"
	"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/vrf_coordinato
    
func GenerateProofResponseFromProofV2(p vrfkey.Proof, s PreSeedDataV2) (vrf_coordinator_v2.VRFProof, vrf_coordinator_v2.VRFCoordinatorV2RequestCommitment, error) {
	var proof vrf_coordinator_v2.VRFProof
	var rc vrf_coordinator_v2.VRFCoordinatorV2RequestCommitment
	solidityProof, err := SolidityPrecalculations(&p)
	if err != nil {
		return proof, rc, errors.Wrap(err,
			"while marshaling proof for VRFCoordinatorV2")
	}
	solidityProof.P.Seed = common.BytesToHash(s.PreSeed[:]).Big()
	x, y := secp256k1.Coordinates(solidityProof.P.PublicKey)
	gx, gy := secp256k1.Coordinates(solidityProof.P.Gamma)
	cgx, cgy := secp256k1.Coordinates(solidityProof.CGammaWitness)
	shx, shy := secp256k1.Coordinates(solidityProof.SHashWitness)
	return vrf_coordinator_v2.VRFProof{
			Pk:            [2]*big.Int{x, y},
			Gamma:         [2]*big.Int{gx, gy},
			C:             solidityProof.P.C,
			S:             solidityProof.P.S,
			Seed:          common.BytesToHash(s.PreSeed[:]).Big(),
			UWitness:      solidityProof.UWitness,
			CGammaWitness: [2]*big.Int{cgx, cgy},
			SHashWitness:  [2]*big.Int{shx, shy},
			ZInv:          solidityProof.ZInv,
		}, vrf_coordinator_v2.VRFCoordinatorV2RequestCommitment{
			BlockNum:         s.BlockNum,
			SubId:            s.SubId,
			CallbackGasLimit: s.CallbackGasLimit,
			NumWords:         s.NumWords,
			Sender:           s.Sender,
		}, nil
}