diff --git a/Directory.Build.props b/Directory.Build.props
index 6c1e1f6d247a51eca5371da3464937d03a52dfa2..4a668d62634678f5f3ec5eae03185ad7be8765ea 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -2,14 +2,14 @@
   <PropertyGroup>
      
     <!-- For a Release-Candidate uncomment the following line: -->
-    <!--<DefineConstants>RELEASE_CANDIDATE</DefineConstants>--> 
+    <DefineConstants>RELEASE_CANDIDATE</DefineConstants> 
 
     <!-- For a Release uncomment the following line: -->
-    <DefineConstants>CERTIFICATION_RELEASE</DefineConstants>
+    <!--<DefineConstants>CERTIFICATION_RELEASE</DefineConstants>-->
 
     <!-- Global VECTO Version -->
-    <MainProductVersion>4.2.1</MainProductVersion>
-    <!--<VersionSuffix>RC</VersionSuffix>--> 
+    <MainProductVersion>4.2.2</MainProductVersion>
+    <VersionSuffix>RC</VersionSuffix> 
 
     <!-- The following settings are used as default values for ALL projects -->
     <Days>$([System.DateTime]::UtcNow.Subtract($([System.DateTime]::new(2015,1,1))).Days)</Days>
diff --git a/Documentation/User Manual Source/Release Notes Vecto4.x.pptx b/Documentation/User Manual Source/Release Notes Vecto4.x.pptx
index 3e647fea72e37f4828dd27acb9548571677f1b70..8087c4f787ae8cfa2ffdad858ccc4faee46a666d 100644
Binary files a/Documentation/User Manual Source/Release Notes Vecto4.x.pptx and b/Documentation/User Manual Source/Release Notes Vecto4.x.pptx differ
diff --git a/Documentation/User Manual Source/release notes vecto4.x.pdf b/Documentation/User Manual Source/release notes vecto4.x.pdf
index c2147510e8188c8703f0ca33b2954cc6ce60c7f0..f4a1350608a293ae17d77cce361f97d83c780c1d 100644
Binary files a/Documentation/User Manual Source/release notes vecto4.x.pdf and b/Documentation/User Manual Source/release notes vecto4.x.pdf differ
diff --git a/Documentation/User Manual/6-changelog/changelog.md b/Documentation/User Manual/6-changelog/changelog.md
index be80d27558caabc4db21633080bf4b4d75410dce..bb642e21164b85b5c95edbefac52fc055428283e 100644
--- a/Documentation/User Manual/6-changelog/changelog.md	
+++ b/Documentation/User Manual/6-changelog/changelog.md	
@@ -1,5 +1,21 @@
 # Changelog
 
+**VECTO-4.2.2-RC**
+
+**Build 3539 (2024-09-09)**
+
+- Bugfixes
+   * CodeEU-710: Hashing tool check fail with VECTO version 3330
+   * CodeEU-711: Hashing tool check fail with VECTO 4.1.3.3415
+   * CodeEU-712: VECTO VTP error
+   * CodeEU-754: "Failed to find operating point"; "Failed to find mechanic power for given electric power" in E2 vehicle
+   * CodeEU-727: Failure in simulating HEV in different VECTO versions
+   * CodeEU-749: Double summary for electric vehicles
+   * CodeEU-542: IVECO confidential : BUG REPORT : CRW LE T7D VOITH NXT 5.63
+   * CodeEU-663: IHPC: Failed to find operating point 
+   * CodeEU-634: Article 10(2) issue - VIN YS2G6X20002202570
+   * CodeEU-671: IHPC: simulation abort due to unexpected response 
+   
 **VECTO-4.2.1**
 
 **Build 3469 (2024-07-01)**
diff --git a/Documentation/User Manual/help.html b/Documentation/User Manual/help.html
index f57b77a27006e4a45be30cbd2e9190b572c33b44..a5950fb955911a4d38ccb7ede340c9c3c4c0f0eb 100644
--- a/Documentation/User Manual/help.html	
+++ b/Documentation/User Manual/help.html	
@@ -10928,6 +10928,26 @@ stored as LOG_backup.txt.</p>
 </section>
 <section id="changelog" class="level1">
 <h1>Changelog</h1>
+<p><strong>VECTO-4.2.2-RC</strong></p>
+<p><strong>Build 3539 (2024-09-09)</strong></p>
+<ul>
+<li>Bugfixes
+<ul>
+<li>CodeEU-710: Hashing tool check fail with VECTO version 3330</li>
+<li>CodeEU-711: Hashing tool check fail with VECTO 4.1.3.3415</li>
+<li>CodeEU-712: VECTO VTP error</li>
+<li>CodeEU-754: “Failed to find operating point”; “Failed to find
+mechanic power for given electric power” in E2 vehicle</li>
+<li>CodeEU-727: Failure in simulating HEV in different VECTO
+versions</li>
+<li>CodeEU-749: Double summary for electric vehicles</li>
+<li>CodeEU-542: IVECO confidential : BUG REPORT : CRW LE T7D VOITH NXT
+5.63</li>
+<li>CodeEU-663: IHPC: Failed to find operating point</li>
+<li>CodeEU-634: Article 10(2) issue - VIN YS2G6X20002202570</li>
+<li>CodeEU-671: IHPC: simulation abort due to unexpected response</li>
+</ul></li>
+</ul>
 <p><strong>VECTO-4.2.1</strong></p>
 <p><strong>Build 3469 (2024-07-01)</strong></p>
 <ul>
diff --git a/VectoCommon/VectoHashing/VectoHash.cs b/VectoCommon/VectoHashing/VectoHash.cs
index 5ee74a01ecb33ec90647393a87b960848a0dcd17..f7f838f3a00fd9ed94adbe9ed3e657a0c96a19f8 100644
--- a/VectoCommon/VectoHashing/VectoHash.cs
+++ b/VectoCommon/VectoHashing/VectoHash.cs
@@ -110,7 +110,7 @@ namespace TUGraz.VectoHashing
 		public IList<VectoComponents> GetContainigComponents()
 		{
 			var retVal = new List<VectoComponents>();
-			var rootName = Document.FirstChild.NextSibling.LocalName;
+			var rootName = Document.FirstChild.NextSibling?.LocalName ?? Document.FirstChild.LocalName;
 
 			foreach (var component in EnumHelper.GetValues<VectoComponents>()) {
 				// special treatment for REESS: can be either supercap or multiple batteries where the component node may contain several sub-components
@@ -139,7 +139,7 @@ namespace TUGraz.VectoHashing
 
 		public string ComputeHash(IEnumerable<string> canonicalization = null, string digestMethod = null)
 		{
-			var isMultiStep = (Document.ChildNodes.Count > 0) 
+			var isMultiStep = (Document.ChildNodes.Count > 1) 
 				&& Document.ChildNodes[1].ChildNodes.Cast<XmlNode>().Any(x => x.LocalName == XMLNames.ManufacturingStep);
 			
 			var nodes = Document.SelectNodes(GetComponentQueryString(null, isMultiStep));
diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
index b3d03e81198bd07c72ee2701da5f7efc85bc0b72..c63cc33d23eba71f4b76e9aecc4a7969606401d5 100644
--- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
+++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
@@ -1865,6 +1865,10 @@ namespace TUGraz.VectoCore.Models.Declaration
 					(1 - D32_utilityFactor) * csResult.FuelConsumptionFinal(x.FuelType).TotalFuelConsumptionCorrected))
 				.ToDictionary(x => x.Item1, x => x.Item2);
 
+			var fcPerMeter = cdResult.FuelData.Select(f => Tuple.Create(f,
+				(cdResult.FuelConsumptionFinal(f.FuelType).TotalFuelConsumptionCorrected / cdResult.Distance) * cdResult.WeightingFactor))
+					.ToDictionary(x => x.Item1, x => x.Item2);
+
 			var retVal = new WeightedResult() {
 				Status = cdResult.Status == VectoRun.Status.PrimaryBusSimulationIgnore || csResult.Status == VectoRun.Status.PrimaryBusSimulationIgnore ? VectoRun.Status.PrimaryBusSimulationIgnore : VectoRun.Status.Success,
 				Distance = cdResult.Distance,
@@ -1879,6 +1883,7 @@ namespace TUGraz.VectoCore.Models.Declaration
 				UtilityFactor = D32_utilityFactor,
 				ElectricEnergyConsumption = D36_electricEnergyConsumptionWeighted,
 				FuelConsumption = D37_fuelConsumptionWeighted,
+				FuelConsumptionPerMeter = fcPerMeter,
 
 				CO2PerMeter = (D32_utilityFactor * (cdResult.CO2Total / cdResult.Distance)) + ((1 - D32_utilityFactor) * (csResult.CO2Total / csResult.Distance)),
 
@@ -2026,6 +2031,9 @@ namespace TUGraz.VectoCore.Models.Declaration
 						entries.Sum(e =>
 							e.Weighted.FuelConsumption[f] * e.ChargeDepletingResult.WeightingFactor)))
 					.ToDictionary(x => x.Item1, x => x.Item2),
+				FuelConsumptionPerMeter = fuels.Select(f => Tuple.Create(f,
+						entries.Sum(e => e.Weighted.FuelConsumptionPerMeter[f] * e.ChargeDepletingResult.WeightingFactor)))
+						.ToDictionary(x => x.Item1, x => x.Item2),
 				ElectricEnergyConsumption = entries.Sum(e => e.Weighted.ElectricEnergyConsumption * e.ChargeDepletingResult.WeightingFactor),
 				CO2PerMeter = entries.All(e => e.Weighted.CO2PerMeter != null) ? entries.Sum(e => (e.Weighted.CO2PerMeter) * e.ChargeDepletingResult.WeightingFactor) : null,
 				ActualChargeDepletingRange = entries.Sum(e => e.Weighted.ActualChargeDepletingRange * e.ChargeDepletingResult.WeightingFactor),
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricComponents/ElectricMotor/EfficiencyMap.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricComponents/ElectricMotor/EfficiencyMap.cs
index 1382602db9435bcede67a7f0adc985e69babf54b..0c88bd112e543cf5c5f0ec2813c42045208fa7f3 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricComponents/ElectricMotor/EfficiencyMap.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricComponents/ElectricMotor/EfficiencyMap.cs
@@ -46,7 +46,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricMotor
 		public override string[] SerializedEntries {
 			get {
 				return _efficiencyMapMech2El.Entries.Select(
-						entry => $"{entry.Y.SI<PerSecond>().AsRPM} [rpm], {entry.X.SI<NewtonMeter>()}, {(entry.Z * entry.Y + entry.Y * entry.X).SI<Watt>()}")
+						entry => $"{entry.Y.SI<PerSecond>().AsRPM} [rpm], {entry.X.SI<NewtonMeter>()}, {(entry.Z * entry.Y + entry.Y * entry.X).SI<Watt>()} ({entry.Z.SI<NewtonMeter>()})")
 					.ToArray();
 			}
 		}
@@ -169,16 +169,26 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricMotor
 					// propelling
 					if (retVal.IsSmaller(maxEmTorque)) {
 						retVal = SearchTorqueForElectricPower(batPower, avgSpeed, maxEmTorque, elPowerMaxEM, 1e3, true);
+						if (retVal.IsSmaller(maxEmTorque)) {
+							// the line search does not yield a better solution, still 'above' max EM torque - battery power is sufficient
+							return null;
+						}
 					}
 				} else {
 					// recuperating
 					if (retVal.IsGreater(maxEmTorque)) {
 						retVal = SearchTorqueForElectricPower(batPower, avgSpeed, maxEmTorque, elPowerMaxEM, 1e3, true);
+						if (retVal.IsGreater(maxEmTorque)) {
+							// the line search does not yield a better solution, still 'above' max EM torque - battery power is sufficient
+							return null;
+						}
 					}
-				}
+                }
 				return retVal;
 			} catch (VectoSearchFailedException vsfe) {
+#if DEBUG
 				Log.Error("Failed to find mechanic power for given electric power! n_avg: {0} P_el: {1}; {2}", avgSpeed.AsRPM, batPower, vsfe.Message);
+#endif
 			}
 
 			return null;
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs
index 2741b7e1f8a1ea75dc558589d4b429ba95e96eee..bbdc853b6994f9118cf0bc5442fd99c02c71dff3 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs
@@ -1053,6 +1053,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			}
 
 			try {
+				var forceLineSearch = DataBus.GearboxInfo.GearboxType.AutomaticTransmission() && !DataBus.GearboxInfo.TCLocked;
 				DataBus.Brakes.BrakePower = SearchAlgorithm.Search(DataBus.Brakes.BrakePower, deltaPower,
 					deltaPower.Abs() * (DataBus.GearboxInfo.GearboxType.AutomaticTransmission() ? 0.5 : 1),
 					getYValue: result => {
@@ -1073,7 +1074,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					criterion: result => {
 						var response = (ResponseDryRun)result;
 						var delta = DataBus.ClutchInfo.ClutchClosed(absTime) && DataBus.GearboxInfo.GearEngaged(absTime)
-							? response.DeltaDragLoad
+							? response.DeltaDragLoad * (forceLineSearch ? 1.1 : 1.0) // in case LineSearch is used, increase criteria to force more precision on the solution
 							: response.Gearbox.PowerRequest;
 						return delta.Value();
 					},
@@ -1088,7 +1089,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 						return DataBus.GearboxInfo.GearboxType.AutomaticTransmission() && response.DeltaDragLoad.Value().IsSmallerOrEqual(-double.MaxValue / 20);
 					},
-					forceLineSearch: DataBus.GearboxInfo.GearboxType.AutomaticTransmission() && !DataBus.GearboxInfo.TCLocked,
+					forceLineSearch: forceLineSearch,
 					searcher: this);
 
 				return operatingPoint;
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs
index 25c0dc9e1cd87d2a4fd52e0536dddee7a8e2f2cb..54940db66bca88f8f867129661a145b2f8338ab4 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ElectricMotor.cs
@@ -486,9 +486,22 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				// has to be positive for recuperation - battery is full
 				return null;
 			}
-			var maxBatRecuperationTorque = maxBatPower.IsEqual(0, 1e-3)
-				? ModelData.DragCurveLookup(avgSpeed, gear)
-				: ModelData.EfficiencyData.EfficiencyMapLookupTorque(volt, maxBatPower, avgSpeed, maxEmTorque, gear);
+
+			NewtonMeter maxBatRecuperationTorque;
+			try {
+				maxBatRecuperationTorque = maxBatPower.IsEqual(0, 1e-3)
+					? ModelData.DragCurveLookup(avgSpeed, gear)
+					: ModelData.EfficiencyData.EfficiencyMapLookupTorque(volt, maxBatPower, avgSpeed, maxEmTorque,
+						gear);
+			} catch (VectoException e) {
+				var pwr = ModelData.EfficiencyData.LookupElectricPower(volt, avgSpeed, maxEmTorque, gear);
+				if (pwr.ElectricalPower.IsSmaller(maxBatPower)) {
+					maxBatRecuperationTorque = maxEmTorque;
+				} else {
+					throw new VectoException("Failed to get max. recuperation torque", e);
+				}
+			}
+
 			var maxTorqueRecuperate = VectoMath.Min(maxEmTorque, maxBatRecuperationTorque);
 			if (maxTorqueRecuperate < 0) {
 				return null;
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/HybridController.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/HybridController.cs
index 6d49783a4723a5d0b2150e717720d5f51bf4f784..203368fbc5b857115f4bb659c0a3740a0776bbbc 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/HybridController.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/HybridController.cs
@@ -155,6 +155,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 					return gearShiftResponse; 
                 }
 
+				if (retryAfterGearshift) {
+					retryCount++;
+				}
 				retry = retryAfterGearshift;
 
 				if (!dryRun /*&& DataBus.VehicleInfo.VehicleStopped*/) {
@@ -242,6 +245,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				_shiftStrategy.SetNextGear(strategySettings.NextGear);
 				SelectedGear = strategySettings.NextGear;
 
+				if (DataBus.GearboxInfo.GearboxType == GearboxType.IHPC) {
+					retry = true;
+					return null;
+				}
+
 				if (!DataBus.GearboxInfo.GearboxType.AutomaticTransmission()) {
 		
 					return new ResponseGearShift(this);
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Shiftstrategies/ATShiftStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Shiftstrategies/ATShiftStrategy.cs
index 59d60bc0c8d2963b696c1b5f226312bed149f8ba..3eb19d0788b763e63ebcddf319cac2f9b606b132 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Shiftstrategies/ATShiftStrategy.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Shiftstrategies/ATShiftStrategy.cs
@@ -199,7 +199,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl.Shiftstrategies
 
 			// 3) 1C -> 0: disengange when negative T_out and positive T_in
 			var gear1C = Gears.First().Equals(gear);
-			var disengageTOutNegativeAndTInPositive = DataBus.DriverInfo.DriverAcceleration <= 0 && gear1C && outTorque.IsSmaller(0) &&
+			var disengageTOutNegativeAndTInPositive = DataBus.DriverInfo.DriverAcceleration < 0 && gear1C && outTorque.IsSmaller(0) &&
 													inTorque.IsGreater(0);
 
 			var disengageTCEngineSpeedLowerIdle = braking && torqueNegative && gear1C &&
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs
index 0867bac831e0642a1cd26731a963287492928fca..33b31fd3de8bf011d8ed567ac5eba9543cf8342a 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Strategies/HybridStrategy.cs
@@ -55,9 +55,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Strategies
 			TestPowertrain.Gearbox.Disengaged = !useNextGear.Engaged;
 			TestPowertrain.Gearbox.DisengageGearbox = !useNextGear.Engaged;
 			TestPowertrain.Gearbox._nextGear = NextGear;
-			TestPowertrain.Container.VehiclePort.Initialize(DataBus.VehicleInfo.VehicleSpeed,
-				DataBus.DrivingCycleInfo.RoadGradient ?? 0.SI<Radian>());
-			
+			if (ModelData.GearboxData.TractionInterruption.IsGreater(0)) {
+				TestPowertrain.Container.VehiclePort.Initialize(DataBus.VehicleInfo.VehicleSpeed,
+					DataBus.DrivingCycleInfo.RoadGradient ?? 0.SI<Radian>());
+			}
+
 			if (TestPowertrain.CombustionEngine.EngineAux is BusAuxiliariesAdapter busAux) {
 				busAux.CurrentState.ExcessiveDragPower =
 					((DataBus.EngineInfo as CombustionEngine)?.EngineAux as BusAuxiliariesAdapter)?.CurrentState
diff --git a/VectoCore/VectoCore/Resources/Declaration/CO2Standards/MissionProfileWeights.csv b/VectoCore/VectoCore/Resources/Declaration/CO2Standards/MissionProfileWeights.csv
index 18307786e59b4a1bd3cfec7a7ee1bccecea96fcd..0eb39a06ce82d3dde77677453068fe248706c019 100644
--- a/VectoCore/VectoCore/Resources/Declaration/CO2Standards/MissionProfileWeights.csv
+++ b/VectoCore/VectoCore/Resources/Declaration/CO2Standards/MissionProfileWeights.csv
@@ -6,7 +6,7 @@ Weighting Group , LongHaul  , LongHaul EMS , Regional Delivery , Regional Delive
 4-UD            , 0/0       , 0/0          , 0/0               , 0/0                   , 0.5/0.5        , 0.25/0.25         , 0.25/0.25    , 0/0         , 0/0         , 0/0         , 0/0         , 0/0
 4-RD            , 0.05/0.05 , 0/0          , 0.45/0.45         , 0/0                   , 0/0            , 0.25/0.25         , 0.25/0.25    , 0/0         , 0/0         , 0/0         , 0/0         , 0/0
 4-LH            , 0.45/0.45 , 0/0          , 0.05/0.05         , 0/0                   , 0/0            , 0.25/0.25         , 0.25/0.25    , 0/0         , 0/0         , 0/0         , 0/0         , 0/0
-5-RD            , 0.03/0.07 , 0/0          , 0.27/0.63         , 0/0                   , 0/0            , 0/0               , 0/0          , 0/0         , 0/0         , 0/0         , 0/0         , 0/0
+5-RD            , 0.03/0.07 , 0/0          , 0.27/0.63         , 0/0                   , 0/0            , 0/0               , 0.5/0.5      , 0/0         , 0/0         , 0/0         , 0/0         , 0/0
 5-LH            , 0.27/0.63 , 0/0          , 0.03/0.07         , 0/0                   , 0/0            , 0/0               , 0.5/0.5      , 0/0         , 0/0         , 0/0         , 0/0         , 0/0
 9-RD            , 0.03/0.07 , 0/0          , 0.27/0.63         , 0/0                   , 0/0            , 0.25/0.25         , 0.25/0.25    , 0/0         , 0/0         , 0/0         , 0/0         , 0/0
 9-LH            , 0.27/0.63 , 0/0          , 0.03/0.07         , 0/0                   , 0/0            , 0.25/0.25         , 0.25/0.25    , 0/0         , 0/0         , 0/0         , 0/0         , 0/0
diff --git a/VectoCore/VectoCore/Utils/SearchAlgorithm.cs b/VectoCore/VectoCore/Utils/SearchAlgorithm.cs
index cdedbb4f0e93246fc6920ad073873c2e5cda071e..a9859c0e4675da96efe6095e201d338f7294cdc5 100644
--- a/VectoCore/VectoCore/Utils/SearchAlgorithm.cs
+++ b/VectoCore/VectoCore/Utils/SearchAlgorithm.cs
@@ -177,8 +177,9 @@ namespace TUGraz.VectoCore.Utils
 
 			//iterationCount += 100;
 			log.Debug("LineSearch could not find an operating point.");
+#if DEBUG
 			log.Error("Exceeded max iterations when searching for operating point!");
-
+#endif
 			WriteSearch(debug, "LineSearch.csv");
 			throw new VectoSearchFailedException("Failed to find operating point! points: {0}", debug.LocalData.Select(d => d.b).Join());
 		}