    cfg.main_pub_drained = True
  
  
  CONFIGS = [
    ProcessConfig(
      proc_name="controlsd",
      pubs=[
        "can", "deviceState", "pandaStates", "peripheralState", "liveCalibration", "driverMonitoringState",
        "longitudinalPlan", "lateralPlan", "liveLocationKalman", "liveParameters", "radarState",
 
</s> remove       "cameraOdometry", "accelerometer", "gyroscope", "gnssMeasurements",
      "liveCalibration", "carState", "carParams"
 </s> add       "cameraOdometry", "accelerometer", "gyroscope", "gpsLocationExternal",
      "liveCalibration", "carState", "carParams", "gpsLocation" </s> remove     if name == "gnssMeasurements":
      msg.gnssMeasurements.measTime = t
      msg.gnssMeasurements.positionECEF.value = [self.x , self.y, self.z]
      msg.gnssMeasurements.positionECEF.std = [0,0,0]
      msg.gnssMeasurements.positionECEF.valid = True
      msg.gnssMeasurements.velocityECEF.value = []
      msg.gnssMeasurements.velocityECEF.std = [0,0,0]
      msg.gnssMeasurements.velocityECEF.valid = True
 </s> add     if name == "gpsLocationExternal":
      msg.gpsLocationExternal.flags = 1
      msg.gpsLocationExternal.verticalAccuracy = 1.0
      msg.gpsLocationExternal.speedAccuracy = 1.0
      msg.gpsLocationExternal.bearingAccuracyDeg = 1.0
      msg.gpsLocationExternal.vNED = [0.0, 0.0, 0.0]
      msg.gpsLocationExternal.latitude = float(self.lat)
      msg.gpsLocationExternal.longitude = float(self.lon)
      msg.gpsLocationExternal.unixTimestampMillis = t * 1e6
      msg.gpsLocationExternal.altitude = float(self.alt)
    #if name == "gnssMeasurements":
    #  msg.gnssMeasurements.measTime = t
    #  msg.gnssMeasurements.positionECEF.value = [self.x , self.y, self.z]
    #  msg.gnssMeasurements.positionECEF.std = [0,0,0]
    #  msg.gnssMeasurements.positionECEF.valid = True
    #  msg.gnssMeasurements.velocityECEF.value = []
    #  msg.gnssMeasurements.velocityECEF.std = [0,0,0]
    #  msg.gnssMeasurements.velocityECEF.valid = True </s> remove   SubMaster sm(service_list, {}, nullptr, {"gnssMeasurements", "carParams"});
 </s> add   SubMaster sm(service_list, {}, nullptr, {gps_location_socket, "carParams"}); </s> remove   const std::initializer_list<const char *> service_list = {"gnssMeasurements", "cameraOdometry", "liveCalibration",
 </s> add   LocalizerGnssSource source;
  const char* gps_location_socket;
  if (Params().getBool("UbloxAvailable")) {
    source = LocalizerGnssSource::UBLOX;
    gps_location_socket = "gpsLocationExternal";
  } else {
    source = LocalizerGnssSource::QCOM;
    gps_location_socket = "gpsLocation";
  }

  this->configure_gnss_source(source);
  const std::initializer_list<const char *> service_list = {gps_location_socket, "cameraOdometry", "liveCalibration",
def locationd_config_pubsub_callback(params, cfg, lr):
  ublox = params.get_bool("UbloxAvailable")
  sub_keys = ({"gpsLocation", } if ublox else {"gpsLocationExternal", })

  cfg.pubs = set(cfg.pubs) - sub_keys


    cfg.main_pub_drained = True
  
  
def locationd_config_pubsub_callback(params, cfg, lr):
  ublox = params.get_bool("UbloxAvailable")
  sub_keys = ({"gpsLocation", } if ublox else {"gpsLocationExternal", })

  cfg.pubs = set(cfg.pubs) - sub_keys


  CONFIGS = [
    ProcessConfig(
      proc_name="controlsd",
      pubs=[
        "can", "deviceState", "pandaStates", "peripheralState", "liveCalibration", "driverMonitoringState",
        "longitudinalPlan", "lateralPlan", "liveLocationKalman", "liveParameters", "radarState",
keep keep add keep keep keep keep keep keep
 Revert laikad llk (#29535)

* Revert "bump laika (#29522)"

This reverts commit 3523bef732316b534de66dcb9e7d29e53e37e99f.

* Revert "Locationd: switch to laikad (#29278)"

This reverts commit fd3b8a3d7511ad3d7c5aa0b82a1e2c28505e5a7f. 
selfdrive/test/process_replay/process_replay.py