func: function forwardPayment(IERC20 src, uint256 srcAmount, IERC20 dest, address destAddress, uint256 minConversionRate, uint256 minDestAmount, bytes memory encodedFunctionCall) public nonReentrant payable returns(uint256) {
      if (address(src) != ETH_TOKEN_ADDRESS) {
        require(msg.value == 0);
        src.safeTransferFrom(msg.sender, address(this), srcAmount);
        src.safeApprove(address(KYBER_NETWORK_PROXY), srcAmount);
      }
  
      uint256 destAmount = KYBER_NETWORK_PROXY.trade.value((address(src) == ETH_TOKEN_ADDRESS) ? srcAmount : 0)(src, srcAmount, dest, address(this), ~uint256(0), minConversionRate, LAND_REGISTRY_PROXY.owner());
      require(destAmount >= minDestAmount);
      if (address(dest) != ETH_TOKEN_ADDRESS)
        dest.safeApprove(destAddress, destAmount);
  
      (bool success, ) = destAddress.call.value((address(dest) == ETH_TOKEN_ADDRESS) ? destAmount : 0)(encodedFunctionCall);
      require(success, "dest call failed");
  
      emit PaymentForwarded(src, srcAmount, dest, destAddress, destAmount);
      return destAmount;
    }