Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Input/Structures/StructuresClosureCalculationInput.cs =================================================================== diff -u -r1876b868ba6c8a7fc53ce3fad5ca54d47c073dd1 -r63ac397116210e4f1c7ac94c45459fffd1f3ec0a --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Input/Structures/StructuresClosureCalculationInput.cs (.../StructuresClosureCalculationInput.cs) (revision 1876b868ba6c8a7fc53ce3fad5ca54d47c073dd1) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Input/Structures/StructuresClosureCalculationInput.cs (.../StructuresClosureCalculationInput.cs) (revision 63ac397116210e4f1c7ac94c45459fffd1f3ec0a) @@ -149,7 +149,7 @@ { // Gravitational acceleration yield return new HydraRingVariable(58, HydraRingDistributionType.Deterministic, gravitationalAcceleration, - HydraRingDeviationType.Variation, double.NaN, double.NaN, double.NaN); + HydraRingDeviationType.Standard, double.NaN, double.NaN, double.NaN); // Factor storm duration open structure yield return new HydraRingVariable(63, HydraRingDistributionType.Deterministic, double.NaN, Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Input/Structures/StructuresClosureVerticalWallCalculationInput.cs =================================================================== diff -u --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Input/Structures/StructuresClosureVerticalWallCalculationInput.cs (revision 0) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Input/Structures/StructuresClosureVerticalWallCalculationInput.cs (revision 63ac397116210e4f1c7ac94c45459fffd1f3ec0a) @@ -0,0 +1,167 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Ringtoets.HydraRing.Calculation.Data.Input.Structures +{ + /// + /// Container of all data necessary for performing a vertical wall based structures closure calculation via Hydra-Ring. + /// + public class StructuresClosureVerticalWallCalculationInput : StructuresClosureCalculationInput + { + private readonly double modelFactorOvertoppingFlowMean; + private readonly double modelFactorOvertoppingFlowStandardDeviation; + private readonly double structureNormalOrientation; + private readonly double modelFactorOvertoppingSupercriticalFlowMean; + private readonly double modelFactorOvertoppingSupercriticalFlowStandardDeviation; + private readonly double levelCrestOfStructuresNotClosingMean; + private readonly double levelCrestOfStructuresNotClosingStandardDeviation; + private readonly double widthOfFlowAperturesMean; + private readonly double widthOfFlowAperturesVariation; + + /// + /// Creates a new instance of . + /// + /// The id of the hydraulic station to use during the calculation. + /// The section to use during the calculation. + /// The gravitational acceleration to use during the calculation. + /// The factor of the storm duration for an open structure to use during the calculation. + /// The failure probability for an open structure to use during the calculation. + /// The reparation failure probabilty to use during the calculation. + /// The identical aperture to use during the calculation. + /// The mean of the allowable increase of the level for the storage to use during the calculation. + /// The standard deviation of the allowable increase of the level for the storage to use during the calculation. + /// The mean of the model factor for the storage volume to use during the calculation. + /// The standard deviation of the model factor for the storage volume to use during the calculation. + /// The mean of the storage structure area to use during the calculation. + /// The variation of the storage structure area to use during the calculation. + /// The model factor for incoming flow volume to use during the calculation. + /// The mean of the flow width at bottom protection to use during the calculation. + /// The standard deviation of the flow width at bottom protection to use during the calculation. + /// The mean of the critical overtopping discharge to use during the calculation. + /// The variation of the critical overtopping discharge to use during the calculation. + /// The failure probability of structure given erosion to use during the calculation. + /// The mean of the storm duration to use during the calculation. + /// The variation of the storm duration to use during the calculation. + /// The propability of an open structure before flooding to use during the calculation. + /// The mean of the model factor overtopping flow to use during the calculation. + /// The standard deviation of the model factor overtopping flow to use during the calculation. + /// The orientation of the normal of the structure to use during the calculation. + /// The mean of the model factor overtopping supercritical flow to use during the calculation. + /// The standard deviation of the model factor overtopping supercritical flow to use during the calculation. + /// The mean of the level crest of structures not closing to use during the calculation. + /// The standard deviation of the level crest of structures not closing to use during the calculation. + /// The mean of the width of flow apertures to use during the calculation. + /// The variation of the width of flow apertures to use during the calculation. + public StructuresClosureVerticalWallCalculationInput(long hydraulicBoundaryLocationId, HydraRingSection hydraRingSection, + double hydraRingGravitationalAcceleration, double hydraRingFactorStormDurationOpenStructure, + double hydraRingFailureProbabilityOpenStructure, double hydraRingFailureProbabilityReparation, + double hydraRingIdenticalAperture, double hydraRingAllowableIncreaseOfLevelForStorageMean, + double hydraRingAllowableIncreaseOfLevelForStorageStandardDeviation, double hydraRingModelFactorForStorageVolumeMean, + double hydraRingModelFactorForStorageVolumeStandardDeviation, double hydraRingStorageStructureAreaMean, + double hydraRingStorageStructureAreaVariation, double hydraRingModelFactorForIncomingFlowVolume, + double hydraRingFlowWidthAtBottomProtectionMean, double hydraRingFlowWidthAtBottomProtectionStandardDeviation, + double hydraRingCriticalOvertoppingDischargeMean, double hydraRingCriticalOvertoppingDischargeVariation, + double hydraRingFailureProbabilityOfStructureGivenErosion, double hydraRingStormDurationMean, + double hydraRingStormDurationVariation, double hydraRingProbabilityOpenStructureBeforeFlooding, + double hydraRingModelFactorOvertoppingFlowMean, double hydraRingModelFactorOvertoppingFlowStandardDeviation, + double hydraRingStructureNormalOrientation, double hydraRingModelFactorOvertoppingSupercriticalFlowMean, + double hydraRingModelFactorOvertoppingSupercriticalFlowStandardDeviation, double hydraRingLevelCrestOfStructuresNotClosingMean, + double hydraRingLevelCrestOfStructuresNotClosingStandardDeviation, double hydraRingWidthOfFlowAperturesMean, + double hydraRingWidthOfFlowAperturesVariation) + : base(hydraulicBoundaryLocationId, hydraRingSection, + hydraRingGravitationalAcceleration, hydraRingFactorStormDurationOpenStructure, + hydraRingFailureProbabilityOpenStructure, hydraRingFailureProbabilityReparation, + hydraRingIdenticalAperture, hydraRingAllowableIncreaseOfLevelForStorageMean, + hydraRingAllowableIncreaseOfLevelForStorageStandardDeviation, hydraRingModelFactorForStorageVolumeMean, + hydraRingModelFactorForStorageVolumeStandardDeviation, hydraRingStorageStructureAreaMean, + hydraRingStorageStructureAreaVariation, hydraRingModelFactorForIncomingFlowVolume, + hydraRingFlowWidthAtBottomProtectionMean, hydraRingFlowWidthAtBottomProtectionStandardDeviation, + hydraRingCriticalOvertoppingDischargeMean, hydraRingCriticalOvertoppingDischargeVariation, + hydraRingFailureProbabilityOfStructureGivenErosion, hydraRingStormDurationMean, + hydraRingStormDurationVariation, hydraRingProbabilityOpenStructureBeforeFlooding) + { + modelFactorOvertoppingFlowMean = hydraRingModelFactorOvertoppingFlowMean; + modelFactorOvertoppingFlowStandardDeviation = hydraRingModelFactorOvertoppingFlowStandardDeviation; + structureNormalOrientation = hydraRingStructureNormalOrientation; + modelFactorOvertoppingSupercriticalFlowMean = hydraRingModelFactorOvertoppingSupercriticalFlowMean; + modelFactorOvertoppingSupercriticalFlowStandardDeviation = hydraRingModelFactorOvertoppingSupercriticalFlowStandardDeviation; + levelCrestOfStructuresNotClosingMean = hydraRingLevelCrestOfStructuresNotClosingMean; + levelCrestOfStructuresNotClosingStandardDeviation = hydraRingLevelCrestOfStructuresNotClosingStandardDeviation; + widthOfFlowAperturesMean = hydraRingWidthOfFlowAperturesMean; + widthOfFlowAperturesVariation = hydraRingWidthOfFlowAperturesVariation; + } + + public override IEnumerable Variables + { + get + { + var variables = base.Variables.ToList(); + variables.AddRange(GetVariables()); + + return variables.OrderBy(v => v.VariableId); + } + } + + public override int? GetSubMechanismModelId(int subMechanismId) + { + switch (subMechanismId) + { + case 424: + return 105; + case 425: + return 109; + default: + return null; + } + } + + private IEnumerable GetVariables() + { + // Model factor overtopping flow + yield return new HydraRingVariable(59, HydraRingDistributionType.LogNormal, double.NaN, + HydraRingDeviationType.Standard, modelFactorOvertoppingFlowMean, + modelFactorOvertoppingFlowStandardDeviation, double.NaN); + + // Orientation of the normal of the structure + yield return new HydraRingVariable(61, HydraRingDistributionType.Deterministic, structureNormalOrientation, + HydraRingDeviationType.Standard, double.NaN, double.NaN, double.NaN); + + // Model factor overtopping supercritical flow + yield return new HydraRingVariable(62, HydraRingDistributionType.Normal, double.NaN, + HydraRingDeviationType.Standard, modelFactorOvertoppingSupercriticalFlowMean, + modelFactorOvertoppingSupercriticalFlowStandardDeviation, double.NaN); + + // Level crest of structures not closing + yield return new HydraRingVariable(72, HydraRingDistributionType.Normal, double.NaN, + HydraRingDeviationType.Standard, levelCrestOfStructuresNotClosingMean, + levelCrestOfStructuresNotClosingStandardDeviation, double.NaN); + + // Width of flow apertures + yield return new HydraRingVariable(106, HydraRingDistributionType.Normal, double.NaN, + HydraRingDeviationType.Variation, widthOfFlowAperturesMean, + widthOfFlowAperturesVariation, double.NaN); + } + } +} \ No newline at end of file Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Ringtoets.HydraRing.Calculation.csproj =================================================================== diff -u -rff02e836fe80bdeaadf7fb4c2e3d86f2a3c3c372 -r63ac397116210e4f1c7ac94c45459fffd1f3ec0a --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Ringtoets.HydraRing.Calculation.csproj (.../Ringtoets.HydraRing.Calculation.csproj) (revision ff02e836fe80bdeaadf7fb4c2e3d86f2a3c3c372) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Ringtoets.HydraRing.Calculation.csproj (.../Ringtoets.HydraRing.Calculation.csproj) (revision 63ac397116210e4f1c7ac94c45459fffd1f3ec0a) @@ -55,6 +55,7 @@ + Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Input/Structures/StructuresClosureCalculationInputTest.cs =================================================================== diff -u -r1876b868ba6c8a7fc53ce3fad5ca54d47c073dd1 -r63ac397116210e4f1c7ac94c45459fffd1f3ec0a --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Input/Structures/StructuresClosureCalculationInputTest.cs (.../StructuresClosureCalculationInputTest.cs) (revision 1876b868ba6c8a7fc53ce3fad5ca54d47c073dd1) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Input/Structures/StructuresClosureCalculationInputTest.cs (.../StructuresClosureCalculationInputTest.cs) (revision 63ac397116210e4f1c7ac94c45459fffd1f3ec0a) @@ -86,7 +86,7 @@ private static IEnumerable GetDefaultOvertoppingVariables() { - yield return new HydraRingVariable(58, HydraRingDistributionType.Deterministic, 9.81, HydraRingDeviationType.Variation, double.NaN, double.NaN, double.NaN); + yield return new HydraRingVariable(58, HydraRingDistributionType.Deterministic, 9.81, HydraRingDeviationType.Standard, double.NaN, double.NaN, double.NaN); yield return new HydraRingVariable(63, HydraRingDistributionType.Deterministic, double.NaN, HydraRingDeviationType.Standard, 0.1, double.NaN, double.NaN); yield return new HydraRingVariable(68, HydraRingDistributionType.Deterministic, 0.04, HydraRingDeviationType.Standard, double.NaN, double.NaN, double.NaN); yield return new HydraRingVariable(69, HydraRingDistributionType.Deterministic, 0.08, HydraRingDeviationType.Standard, double.NaN, double.NaN, double.NaN); Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Input/Structures/StructuresClosureVerticalWallCalculationInputTest.cs =================================================================== diff -u --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Input/Structures/StructuresClosureVerticalWallCalculationInputTest.cs (revision 0) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Input/Structures/StructuresClosureVerticalWallCalculationInputTest.cs (revision 63ac397116210e4f1c7ac94c45459fffd1f3ec0a) @@ -0,0 +1,142 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using Ringtoets.HydraRing.Calculation.Data; +using Ringtoets.HydraRing.Calculation.Data.Input.Structures; +using Ringtoets.HydraRing.Calculation.TestUtil; + +namespace Ringtoets.HydraRing.Calculation.Test.Data.Input.Structures +{ + [TestFixture] + public class StructuresClosureVerticalWallCalculationInputTest + { + [Test] + public void Constructor_ExpectedValues() + { + // Setup + const int hydraulicBoundaryLocationId = 1000; + var hydraRingSection = new HydraRingSection(1, double.NaN, double.NaN); + + const double gravitationalAcceleration = 9.81; + const double factorStormDurationOpenStructure = 0.1; + const double failureProbabilityOpenStructure = 0.04; + const double failureProbabilityReparation = 0.08; + const double identicalAperture = 0.4; + const double allowableIncreaseOfLevelForStorageMean = 3.3; + const double allowableIncreaseOfLevelForStorageStandardDeviation = 0.1; + const double modelFactorForStorageVolumeMean = 1.0; + const double modelFactorForStorageVolumeStandardDeviation = 0.2; + const double storageStructureAreaMean = 4.4; + const double storageStructureAreaStandardDeviation = 0.1; + const double modelFactorForIncomingFlowVolume = 1; + const double flowWidthAtBottomProtectionMean = 5.5; + const double flowWidthAtBottomProtectionStandardDeviation = 0.05; + const double criticalOvertoppingDischargeMean = 6.6; + const double criticalOvertoppingDischargeMeanStandardDeviation = 0.15; + const double failureProbabilityOfStructureGivenErosion = 7.7; + const double stormDurationMean = 7.5; + const double stormDurationStandardDeviation = 0.25; + const double probabilityOpenStructureBeforeFlooding = 0.04; + const double modelFactorOvertoppingFlowMean = 0.09; + const double modelFactorOvertoppingFlowStandardDeviation = 0.06; + const double structureNormalOrientation = 0.05; + const double modelFactorOvertoppingSupercriticalFlowMean = 1.1; + const double modelFactorOvertoppingSupercriticalFlowStandardDeviation = 0.3; + const double levelCrestOfStructuresNotClosingMean = 0.08; + const double levelCrestOfStructuresNotClosingStandardDeviation = 0.05; + const double widthOfFlowAperturesMean = 5.4; + const double widthOfFlowAperturesVariation = 0.05; + + // Call + var input = new StructuresClosureVerticalWallCalculationInput(hydraulicBoundaryLocationId, hydraRingSection, + gravitationalAcceleration, factorStormDurationOpenStructure, + failureProbabilityOpenStructure, failureProbabilityReparation, + identicalAperture, allowableIncreaseOfLevelForStorageMean, + allowableIncreaseOfLevelForStorageStandardDeviation, modelFactorForStorageVolumeMean, + modelFactorForStorageVolumeStandardDeviation, storageStructureAreaMean, + storageStructureAreaStandardDeviation, modelFactorForIncomingFlowVolume, + flowWidthAtBottomProtectionMean, flowWidthAtBottomProtectionStandardDeviation, + criticalOvertoppingDischargeMean, criticalOvertoppingDischargeMeanStandardDeviation, + failureProbabilityOfStructureGivenErosion, stormDurationMean, + stormDurationStandardDeviation, probabilityOpenStructureBeforeFlooding, + modelFactorOvertoppingFlowMean, modelFactorOvertoppingFlowStandardDeviation, + structureNormalOrientation, modelFactorOvertoppingSupercriticalFlowMean, + modelFactorOvertoppingSupercriticalFlowStandardDeviation, levelCrestOfStructuresNotClosingMean, + levelCrestOfStructuresNotClosingStandardDeviation, widthOfFlowAperturesMean, + widthOfFlowAperturesVariation); + + // Assert + Assert.IsInstanceOf(input); + Assert.AreEqual(hydraulicBoundaryLocationId, input.HydraulicBoundaryLocationId); + Assert.AreEqual(1, input.CalculationTypeId); + Assert.AreEqual(65, input.VariableId); + Assert.AreEqual(HydraRingFailureMechanismType.StructuresClosure, input.FailureMechanismType); + Assert.AreSame(hydraRingSection, input.Section); + HydraRingVariableAssert.AreEqual(GetDefaultOvertoppingVariables().ToArray(), input.Variables.ToArray()); + } + + [Test] + [TestCase(423, null)] + [TestCase(424, 105)] + [TestCase(425, 109)] + [TestCase(426, null)] + public void GetSubMechanismModelId_Always_ReturnsExpectedValues(int subMechanismModelId, int? expectedSubMechanismModelId) + { + // Setup + var input = new StructuresClosureVerticalWallCalculationInput(111, new HydraRingSection(1, double.NaN, double.NaN), + 1.1, 222, 333, 5.5, 6.6, 7.7, 8.8, 11, 22, 33, 44, 55, + 66, 77, 88, 99, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24); + + // Call + int? actualSubmechanismModelId = input.GetSubMechanismModelId(subMechanismModelId); + + // Assert + Assert.AreEqual(expectedSubMechanismModelId, actualSubmechanismModelId); + } + + private static IEnumerable GetDefaultOvertoppingVariables() + { + yield return new HydraRingVariable(58, HydraRingDistributionType.Deterministic, 9.81, HydraRingDeviationType.Standard, double.NaN, double.NaN, double.NaN); + yield return new HydraRingVariable(59, HydraRingDistributionType.LogNormal, double.NaN, HydraRingDeviationType.Standard, 0.09, 0.06, double.NaN); + yield return new HydraRingVariable(61, HydraRingDistributionType.Deterministic, 0.05, HydraRingDeviationType.Standard, double.NaN, double.NaN, double.NaN); + yield return new HydraRingVariable(62, HydraRingDistributionType.Normal, double.NaN, HydraRingDeviationType.Standard, 1.1, 0.3, double.NaN); + yield return new HydraRingVariable(63, HydraRingDistributionType.Deterministic, double.NaN, HydraRingDeviationType.Standard, 0.1, double.NaN, double.NaN); + yield return new HydraRingVariable(68, HydraRingDistributionType.Deterministic, 0.04, HydraRingDeviationType.Standard, double.NaN, double.NaN, double.NaN); + yield return new HydraRingVariable(69, HydraRingDistributionType.Deterministic, 0.08, HydraRingDeviationType.Standard, double.NaN, double.NaN, double.NaN); + yield return new HydraRingVariable(71, HydraRingDistributionType.Deterministic, 0.4, HydraRingDeviationType.Standard, double.NaN, double.NaN, double.NaN); + yield return new HydraRingVariable(72, HydraRingDistributionType.Normal, double.NaN, HydraRingDeviationType.Standard, 0.08, 0.05, double.NaN); + yield return new HydraRingVariable(94, HydraRingDistributionType.LogNormal, double.NaN, HydraRingDeviationType.Standard, 3.3, 0.1, double.NaN); + yield return new HydraRingVariable(95, HydraRingDistributionType.LogNormal, double.NaN, HydraRingDeviationType.Standard, 1.0, 0.2, double.NaN); + yield return new HydraRingVariable(96, HydraRingDistributionType.LogNormal, double.NaN, HydraRingDeviationType.Variation, 4.4, 0.1, double.NaN); + yield return new HydraRingVariable(97, HydraRingDistributionType.Deterministic, 1, HydraRingDeviationType.Standard, double.NaN, double.NaN, double.NaN); + yield return new HydraRingVariable(103, HydraRingDistributionType.Normal, double.NaN, HydraRingDeviationType.Standard, 5.5, 0.05, double.NaN); + yield return new HydraRingVariable(104, HydraRingDistributionType.LogNormal, double.NaN, HydraRingDeviationType.Variation, 6.6, 0.15, double.NaN); + yield return new HydraRingVariable(105, HydraRingDistributionType.Normal, double.NaN, HydraRingDeviationType.Standard, 7.7, 0, double.NaN); + yield return new HydraRingVariable(106, HydraRingDistributionType.Normal, double.NaN, HydraRingDeviationType.Variation, 5.4, 0.05, double.NaN); + yield return new HydraRingVariable(108, HydraRingDistributionType.LogNormal, double.NaN, HydraRingDeviationType.Variation, 7.5, 0.25, double.NaN); + yield return new HydraRingVariable(129, HydraRingDistributionType.Deterministic, 0.04, HydraRingDeviationType.Standard, double.NaN, double.NaN, double.NaN); + } + } +} \ No newline at end of file Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Ringtoets.HydraRing.Calculation.Test.csproj =================================================================== diff -u -rff02e836fe80bdeaadf7fb4c2e3d86f2a3c3c372 -r63ac397116210e4f1c7ac94c45459fffd1f3ec0a --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Ringtoets.HydraRing.Calculation.Test.csproj (.../Ringtoets.HydraRing.Calculation.Test.csproj) (revision ff02e836fe80bdeaadf7fb4c2e3d86f2a3c3c372) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Ringtoets.HydraRing.Calculation.Test.csproj (.../Ringtoets.HydraRing.Calculation.Test.csproj) (revision 63ac397116210e4f1c7ac94c45459fffd1f3ec0a) @@ -59,6 +59,7 @@ +