<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:include schemaLocation="ore_types.xsd"/>  

  <xs:element type="curveconfiguration" name="CurveConfiguration"/>

  <xs:complexType name="curveconfiguration">
    <xs:all>
      <xs:element type="globalReportConfiguration" name="ReportConfiguration" minOccurs="0" />
      <xs:element type="fxSpots" name="FXSpots" minOccurs="0" />
      <xs:element type="fxVolatilities" name="FXVolatilities" minOccurs="0" />
      <xs:element type="swaptionVolatilities" name="SwaptionVolatilities" minOccurs="0" />
      <xs:element type="yieldVolatilities" name="YieldVolatilities" minOccurs="0" />
      <xs:element type="capFloorVolatilities" name="CapFloorVolatilities" minOccurs="0" />
      <xs:element type="cdsVolatilities" name="CDSVolatilities" minOccurs="0" />
      <xs:element type="defaultCurves" name="DefaultCurves" minOccurs="0" />
      <xs:element type="yieldCurves" name="YieldCurves" minOccurs="0" />
      <xs:element type="inflationCurves" name="InflationCurves" minOccurs="0" />
      <xs:element type="inflationCapFloorVolatlities" name="InflationCapFloorVolatilities" minOccurs="0" />
      <xs:element type="equityCurves" name="EquityCurves" minOccurs="0" />
      <xs:element type="equityVolatilities" name="EquityVolatilities" minOccurs="0" />
      <xs:element type="securities" name="Securities" minOccurs="0" />
      <xs:element type="baseCorrelations" name="BaseCorrelations" minOccurs="0" />
      <xs:element type="simCommodityCurves" name="CommodityCurves" minOccurs="0" />
      <xs:element type="commodityVolatilities" name="CommodityVolatilities" minOccurs="0" />
      <xs:element type="correlations" name="Correlations" minOccurs="0" />
    </xs:all>
  </xs:complexType>

  <!-- Volatility configurations -->

  <xs:complexType name="constantVolatilityConfig">
    <xs:all>    
      <xs:element type="xs:string" name="QuoteType" minOccurs="0"/>
      <xs:element type="xs:string" name="VolatilityType" minOccurs="0"/>
      <xs:element type="xs:string" name="ExerciseType" minOccurs="0"/>
      <xs:element type="xs:string" name="Quote"/>
      <xs:element type="calendar" name="Calendar" minOccurs="0" maxOccurs="1"/>
    </xs:all>
    <xs:attribute type="xs:nonNegativeInteger" name="priority"/>
  </xs:complexType>

  <xs:complexType name="volatilityCurveConfig">
    <xs:all>    
      <xs:element type="xs:string" name="QuoteType" minOccurs="0"/>
      <xs:element type="xs:string" name="VolatilityType" minOccurs="0"/>
      <xs:element type="xs:string" name="ExerciseType" minOccurs="0"/>
      <xs:element type="quoteType" name="Quotes"/>
      <xs:element type="interpolationMethodType" name="Interpolation"/>
      <xs:element type="extrapolationType" name="Extrapolation"/>
      <xs:element type="xs:boolean" name="EnforceMontoneVariance" minOccurs="0"/>
      <xs:element type="calendar" name="Calendar" minOccurs="0" maxOccurs="1"/>
    </xs:all>
    <xs:attribute type="xs:nonNegativeInteger" name="priority"/>
  </xs:complexType>

  <xs:complexType name="volatilityStrikeSurfaceConfig">
    <xs:all>    
      <xs:element type="xs:string" name="QuoteType" minOccurs="0"/>
      <xs:element type="xs:string" name="VolatilityType" minOccurs="0"/>
      <xs:element type="xs:string" name="ExerciseType" minOccurs="0"/>
      <xs:element type="xs:string" name="Strikes"/>
      <xs:element type="xs:string" name="Expiries"/>
      <xs:element type="interpolationMethodType" name="TimeInterpolation"/>
      <xs:element type="interpolationMethodType" name="StrikeInterpolation"/>
      <xs:element type="bool" name="Extrapolation"/>
      <xs:element type="extrapolationType" name="TimeExtrapolation"/>
      <xs:element type="bool" name="TimeExtrapolationVariance" minOccurs="0" maxOccurs="1"/>
      <xs:element type="extrapolationType" name="StrikeExtrapolation"/>
      <xs:element type="calendar" name="Calendar" minOccurs="0" maxOccurs="1"/>
    </xs:all>
    <xs:attribute type="xs:nonNegativeInteger" name="priority"/>
  </xs:complexType>

  <xs:complexType name="volatilityDeltaSurfaceConfig">
    <xs:all>        
      <xs:element type="xs:string" name="QuoteType" minOccurs="0"/>
      <xs:element type="xs:string" name="VolatilityType" minOccurs="0"/>
      <xs:element type="xs:string" name="ExerciseType" minOccurs="0"/>
      <xs:element type="strikeDeltaType" name="DeltaType"/>
      <xs:element type="strikeAtmType" name="AtmType"/>
      <xs:element type="strikeDeltaType" name="AtmDeltaType" minOccurs="0"/>
      <xs:element type="xs:string" name="PutDeltas"/>
      <xs:element type="xs:string" name="CallDeltas"/>
      <xs:element type="xs:string" name="Expiries"/>
      <xs:element type="interpolationMethodType" name="TimeInterpolation"/>
      <xs:element type="interpolationMethodType" name="StrikeInterpolation"/>
      <xs:element type="bool" name="Extrapolation"/>
      <xs:element type="extrapolationType" name="TimeExtrapolation"/>
      <xs:element type="bool" name="TimeExtrapolationVariance" minOccurs="0" maxOccurs="1"/>
      <xs:element type="extrapolationType" name="StrikeExtrapolation"/>
      <xs:element type="bool" name="FuturePriceCorrection" minOccurs="0"/>
      <xs:element type="calendar" name="Calendar" minOccurs="0" maxOccurs="1"/>
    </xs:all>
    <xs:attribute type="xs:nonNegativeInteger" name="priority"/>
  </xs:complexType>

  <xs:complexType name="volatilityMoneynessSurfaceConfig">
    <xs:all>
      <xs:element type="xs:string" name="QuoteType" minOccurs="0"/>
      <xs:element type="xs:string" name="VolatilityType" minOccurs="0"/>
      <xs:element type="xs:string" name="ExerciseType" minOccurs="0"/>
      <xs:element type="strikeMoneynessType" name="MoneynessType"/>
      <xs:element type="xs:string" name="MoneynessLevels"/>
      <xs:element type="xs:string" name="Expiries"/>
      <xs:element type="interpolationMethodType" name="TimeInterpolation"/>
      <xs:element type="interpolationMethodType" name="StrikeInterpolation"/>
      <xs:element type="bool" name="Extrapolation"/>
      <xs:element type="extrapolationType" name="TimeExtrapolation"/>
      <xs:element type="bool" name="TimeExtrapolationVariance" minOccurs="0" maxOccurs="1"/>
      <xs:element type="extrapolationType" name="StrikeExtrapolation"/>
      <xs:element type="bool" name="FuturePriceCorrection" minOccurs="0"/>
      <xs:element type="calendar" name="Calendar" minOccurs="0" maxOccurs="1"/>
    </xs:all>
    <xs:attribute type="xs:nonNegativeInteger" name="priority"/>
  </xs:complexType>  
  
  <xs:complexType name="proxySurface">
    <xs:all>
      <xs:element type="xs:string" name="ProxyVolatilityCurve"/>
      <xs:element type="xs:string" name="FXVolatilityCurve" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="CorrelationCurve" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="CDSVolatilityCurve" minOccurs="0" maxOccurs="1"/>
    </xs:all>
    <xs:attribute type="xs:nonNegativeInteger" name="priority"/>
  </xs:complexType>

  <xs:complexType name="parametricSmileConfigParameter">
    <xs:all>
      <xs:element type="xs:string" name="Name"/>
      <xs:element type="xs:string" name="InitialValue"/>
      <xs:element type="parametricVolatilityParameterCalibration" name="Calibration"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="parametricSmileConfigParameters">
    <xs:sequence>
      <xs:element type="parametricSmileConfigParameter" name="Parameter" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="parametricSmileConfigCalibration">
    <xs:all>
      <xs:element type="xs:integer" name="MaxCalibrationAttempts"/>
      <xs:element type="xs:float" name="ExitEarlyErrorThreshold"/>
      <xs:element type="xs:float" name="MaxAcceptableError"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="parametricSmileConfig">
    <xs:all>
      <xs:element type="parametricSmileConfigParameters" name="Parameters"/>
      <xs:element type="parametricSmileConfigCalibration" name="Calibration"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="fxSpots">
    <xs:sequence>
      <xs:element type="fxSpot" name="FXSpot" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="fxSpot">
    <xs:all>
      <xs:element type="xs:string" name="CurveId"/>
      <xs:element type="xs:string" name="CurveDescription"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="fxVolatilities">
    <xs:sequence>
      <xs:element type="fxVolatility" name="FXVolatility" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="fxVolatility">
    <xs:all>
      <xs:element type="xs:string" name="CurveId"/>
      <xs:element type="xs:string" name="CurveDescription"/>
      <xs:element type="dimensionType" name="Dimension"/>
      <xs:element type="smileType" name="SmileType" minOccurs="0" maxOccurs="1"/>
      <xs:element type="fxVolInterpolation" name="SmileInterpolation" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="Deltas" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="SmileDelta" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="Conventions" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="Expiries" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="FXSpotID" minOccurs="0" />
      <xs:element type="xs:string" name="FXForeignCurveID" minOccurs="0" />
      <xs:element type="xs:string" name="FXDomesticCurveID" minOccurs="0" />  
      <xs:element type="calendar" name="Calendar" minOccurs="0" maxOccurs="1"/>
      <xs:element type="dayCounter" name="DayCounter" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="FXIndexTag" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="BaseVolatility1" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="BaseVolatility2" minOccurs="0" maxOccurs="1"/>
      <xs:element type="reportConfiguration" name="Report" minOccurs="0"/>
      <xs:element type="extrapolationType" name="SmileExtrapolation" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="TimeInterpolation" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="TimeWeighting" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:float" name="ButterflyErrorTolerance" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="equityVolatilities">
    <xs:sequence>
      <xs:element type="equityVolatility" name="EquityVolatility" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="equityVolatility">
    <xs:sequence>
      <xs:element type="xs:string" name="CurveId"/>
      <xs:element type="xs:string" name="CurveDescription"/>
      <xs:element type="xs:string" name="EquityId" minOccurs="0" maxOccurs="1"/>
      <xs:element type="extendedCurrencyCode" name="Currency"/>      
      <xs:element type="dimensionType" name="Dimension" minOccurs="0"/>
      <xs:element type="xs:string" name="Expiries" minOccurs="0"/>
      <xs:element type="xs:string" name="Strikes" minOccurs="0" />
      <xs:element type="dayCounter" name="DayCounter" minOccurs="0" maxOccurs="1"/>
      <xs:element type="extrapolationType" name="TimeExtrapolation" minOccurs="0" maxOccurs="1"/>
      <xs:element type="extrapolationType" name="StrikeExtrapolation" minOccurs="0" maxOccurs="1"/>
      <xs:choice>
          <xs:element type="volatilityConfig" name="VolatilityConfig" minOccurs="0" maxOccurs="1"/>
          <xs:choice minOccurs="0">
            <xs:element type="constantVolatilityConfig" name="Constant"/>
            <xs:element type="volatilityCurveConfig" name="Curve"/>
            <xs:element type="volatilityStrikeSurfaceConfig" name="StrikeSurface"/>
            <xs:element type="volatilityMoneynessSurfaceConfig" name="MoneynessSurface"/>
            <xs:element type="volatilityDeltaSurfaceConfig" name="DeltaSurface"/>
            <xs:element type="proxySurface" name="ProxySurface"/>
          </xs:choice>
      </xs:choice>
      <xs:element type="calendar" name="Calendar" minOccurs="0" maxOccurs="1"/>
      <xs:element type="oneDimSolverConfigType" name="OneDimSolverConfig" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="PreferOutOfTheMoney" minOccurs="0" maxOccurs="1"/>
      <xs:element type="reportConfiguration" name="Report" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name="volatilityConfig">
    <xs:all>
      <xs:element type="constantVolatilityConfig" name="Constant" minOccurs="0"/>
      <xs:element type="volatilityCurveConfig" name="Curve" minOccurs="0"/>
      <xs:element type="volatilityStrikeSurfaceConfig" name="StrikeSurface" minOccurs="0"/>
      <xs:element type="volatilityMoneynessSurfaceConfig" name="MoneynessSurface" minOccurs="0"/>
      <xs:element type="volatilityDeltaSurfaceConfig" name="DeltaSurface" minOccurs="0"/>
      <xs:element type="volatilityApoFutureSurfaceConfig" name="ApoFutureSurface" minOccurs="0"/>
      <xs:element type="proxySurface" name="ProxySurface" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="swaptionVolatilities">
    <xs:sequence>
      <xs:element type="swaptionVolatility" name="SwaptionVolatility" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="swaptionVolatility">
    <xs:all>
      <xs:element type="xs:string" name="CurveId"/>
      <xs:element type="xs:string" name="CurveDescription"/>
      <xs:element name="ProxyConfig" minOccurs="0">
    <xs:complexType>
      <xs:all>
        <xs:element name="Source">
          <xs:complexType>
        <xs:all>
          <xs:element type="xs:string" name="CurveId"/>
          <xs:element type="xs:string" name="ShortSwapIndexBase"/>
          <xs:element type="xs:string" name="SwapIndexBase"/>
        </xs:all>
          </xs:complexType>
        </xs:element>
        <xs:element name="Target">
          <xs:complexType>
        <xs:all>
          <xs:element type="xs:string" name="ShortSwapIndexBase"/>
          <xs:element type="xs:string" name="SwapIndexBase"/>
        </xs:all>
          </xs:complexType>
        </xs:element>
      </xs:all>
    </xs:complexType>
      </xs:element>
      <xs:element type="dimensionType" name="Dimension" minOccurs="0"/>
      <xs:element type="volatilityType" name="VolatilityType" minOccurs="0"/>
      <xs:element type="xs:string" name="Interpolation" minOccurs="0"/>
      <xs:element type="parametricSmileConfig" name="ParametricSmileConfiguration" minOccurs="0"/>
      <xs:element type="xs:string" name="Extrapolation" minOccurs="0"/>
      <xs:element type="xs:string" name="OutputVolatilityType" minOccurs="0"/>
      <xs:element type="xs:string" name="ModelShift" minOccurs="0"/>
      <xs:element type="xs:string" name="OutputShift" minOccurs="0"/>
      <xs:element type="dayCounter" name="DayCounter" minOccurs="0"/>
      <xs:element type="calendar" name="Calendar" minOccurs="0"/>
      <xs:element type="businessDayConvention" name="BusinessDayConvention" minOccurs="0"/>
      <xs:element type="xs:string" name="OptionTenors" minOccurs="0"/>
      <xs:element type="xs:string" name="SwapTenors" minOccurs="0"/>
      <xs:element type="xs:string" name="ShortSwapIndexBase" minOccurs="0"/>
      <xs:element type="xs:string" name="SwapIndexBase" minOccurs="0"/>
      <xs:element type="xs:string" name="SmileOptionTenors" minOccurs="0"/>
      <xs:element type="xs:string" name="SmileSwapTenors" minOccurs="0"/>
      <xs:element type="xs:string" name="SmileSpreads" minOccurs="0"/>
      <xs:element type="xs:string" name="QuoteTag" minOccurs="0"/>
      <xs:element type="reportConfiguration" name="Report" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="yieldVolatilities">
    <xs:sequence>
      <xs:element type="yieldVolatility" name="YieldVolatility" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="yieldVolatility">
    <xs:all>
      <xs:element type="xs:string" name="CurveId"/>
      <xs:element type="xs:string" name="CurveDescription"/>
      <xs:element type="xs:string" name="Qualifier"/>
		<xs:element type="dimensionType" name="Dimension" minOccurs="0"/>
      <xs:element type="volatilityType" name="VolatilityType"/>
      <xs:element type="extrapolationType" name="Extrapolation"/>
      <xs:element type="dayCounter" name="DayCounter"/>
      <xs:element type="calendar" name="Calendar"/>
      <xs:element type="businessDayConvention" name="BusinessDayConvention"/>
      <xs:element type="xs:string" name="OptionTenors"/>
      <xs:element type="xs:string" name="BondTenors"/>
      <xs:element type="reportConfiguration" name="Report" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="cdsVolatilities">
    <xs:sequence>
      <xs:element type="cdsVolatility" name="CDSVolatility" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="cdsVolatility">
    <xs:sequence>
      <xs:element type="xs:string" name="CurveId"/>
      <xs:element type="xs:string" name="CurveDescription"/>
      <xs:element name="Terms" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Term" maxOccurs="unbounded">
              <xs:complexType>
                <xs:all>
                  <xs:element type="xs:string" name="Label"/>
                  <xs:element type="xs:string" name="Curve"/>
                </xs:all>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:choice>
        <xs:element type="xs:string" name="Expiries"/>
        <xs:element type="constantVolatilityConfig" name="Constant"/>
        <xs:element type="volatilityCurveConfig" name="Curve"/>
        <xs:element type="volatilityStrikeSurfaceConfig" name="StrikeSurface"/>
        <xs:element type="proxySurface" name="ProxySurface"/>
      </xs:choice>
      <xs:element type="dayCounter" name="DayCounter" minOccurs="0" maxOccurs="1"/>
      <xs:element type="calendar" name="Calendar" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="StrikeType" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="QuoteName" minOccurs="0" maxOccurs="1"/>
      <xs:element type="positiveDecimal" name="StrikeFactor" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
  </xs:complexType>


  <xs:complexType name="capFloorVolatilities">
    <xs:sequence>
      <xs:element type="capFloorVolatility" name="CapFloorVolatility" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="capFloorVolatility">
    <xs:all>
      <xs:element type="xs:string" name="CurveId"/>
      <xs:element type="xs:string" name="CurveDescription"/>
      <xs:element name="ProxyConfig" minOccurs="0">
    <xs:complexType>
      <xs:all>
        <xs:element name="Source">
          <xs:complexType>
        <xs:all>
          <xs:element type="xs:string" name="CurveId"/>
          <xs:element type="xs:string" name="Index"/>
          <xs:element type="xs:string" name="RateComputationPeriod" minOccurs="0"/>
        </xs:all>
          </xs:complexType>
        </xs:element>
        <xs:element name="Target">
          <xs:complexType>
        <xs:all>
          <xs:element type="xs:string" name="Index"/>
          <xs:element type="xs:string" name="RateComputationPeriod" minOccurs="0"/>
          <xs:element type="xs:integer" name="ONCapSettlementDays" minOccurs="0"/>
        </xs:all>
          </xs:complexType>
        </xs:element>
        <xs:element type="xs:double" name="ScalingFactor" minOccurs="0"/>
      </xs:all>
    </xs:complexType>
      </xs:element>
      <xs:element type="volatilityType" name="VolatilityType" minOccurs="0"/>
      <xs:element type="volatilityType" name="OutputVolatilityType" minOccurs="0"/>
      <xs:element type="xs:float" name="ModelShift" minOccurs="0"/>
      <xs:element type="xs:float" name="OutputShift" minOccurs="0"/>
      <xs:element type="extrapolationType" name="Extrapolation" minOccurs="0"/>
      <xs:element name="InterpolationMethod" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="Bilinear"/>
            <xs:enumeration value="BicubicSpline"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element type="bool" name="IncludeAtm" minOccurs="0"/>
      <xs:element type="dayCounter" name="DayCounter" minOccurs="0"/>
      <xs:element type="calendar" name="Calendar" minOccurs="0"/>
      <xs:element type="businessDayConvention" name="BusinessDayConvention" minOccurs="0"/>
      <xs:element type="xs:string" name="Tenors" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="Strikes" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="OptionalQuotes" minOccurs="0" maxOccurs="1"/>
      <xs:element type="indexNameType" name="IborIndex" minOccurs="0" maxOccurs="1"/> <!-- deprecated -->
      <xs:element type="indexNameType" name="Index" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="RateComputationPeriod" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:integer" name="ONCapSettlementDays" minOccurs="0"/>
      <xs:element type="xs:string" name="DiscountCurve" minOccurs="0"/>
      <xs:element type="xs:string" name="AtmTenors" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:nonNegativeInteger" name="SettlementDays" minOccurs="0" maxOccurs="1"/>
      <xs:element name="InterpolateOn" minOccurs="0" maxOccurs="1">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="TermVolatilities"/>
            <xs:enumeration value="OptionletVolatilities"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="TimeInterpolation" minOccurs="0" maxOccurs="1">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="Linear"/>
            <xs:enumeration value="LinearFlat"/>
            <xs:enumeration value="BackwardFlat"/>
            <xs:enumeration value="Cubic"/>
            <xs:enumeration value="CubicFlat"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="StrikeInterpolation" minOccurs="0" maxOccurs="1">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="Linear"/>
            <xs:enumeration value="LinearFlat"/>
            <xs:enumeration value="Cubic"/>
            <xs:enumeration value="Hagan2002Lognormal"/>
            <xs:enumeration value="Hagan2002Normal"/>
            <xs:enumeration value="Hagan2002NormalZeroBeta"/>
            <xs:enumeration value="Antonov2015FreeBoundaryNormal"/>
            <xs:enumeration value="KienitzLawsonSwaynePde"/>
            <xs:enumeration value="FlochKennedy"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element type="parametricSmileConfig" name="ParametricSmileConfiguration" minOccurs="0"/>
      <xs:element name="InputType" minOccurs="0" maxOccurs="1">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="TermVolatilities"/>
            <xs:enumeration value="OptionletVolatilities"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element type="bool" name="QuoteIncludesIndexName" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bootstrapConfigType" name="BootstrapConfig" minOccurs="0" maxOccurs="1"/>
      <xs:element type="reportConfiguration" name="Report" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="equityCurves">
    <xs:sequence>
      <xs:element type="equityCurve" name="EquityCurve" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="equityCurve">
    <xs:all>
      <xs:element type="xs:string" name="CurveId"/>
      <xs:element type="xs:string" name="CurveDescription"/>
      <xs:element type="extendedCurrencyCode" name="Currency"/>
      <xs:element type="calendar" name="Calendar" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="ForecastingCurve"/>
      <xs:element type="equityType" name="Type"/>
      <xs:element type="exerciseStyle" name="ExerciseStyle" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="SpotQuote"/>
      <xs:element type="quoteType" name="Quotes" minOccurs="0" maxOccurs="1"/>
      <xs:element type="dayCounter" name="DayCounter" minOccurs="0" maxOccurs="1"/>
      <xs:element type="dividendInterpolation" name="DividendInterpolation" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="DividendExtrapolation" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="Extrapolation" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="defaultCurves">
    <xs:sequence>
      <xs:element type="defaultCurve" name="DefaultCurve" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="defaultCurve">
    <xs:all>
      <xs:element type="xs:string" name="CurveId"/>
      <xs:element type="xs:string" name="CurveDescription"/>
      <xs:element type="currencyCode" name="Currency"/>
      <xs:element name="Configurations" minOccurs="0">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Configuration" minOccurs="0" maxOccurs="unbounded">
          <xs:complexType>
        <xs:all>
          <xs:element type="defaultCurveType" name="Type"/>
          <xs:element type="xs:string" name="DiscountCurve" minOccurs="0" maxOccurs="1"/>
          <xs:element type="dayCounter" name="DayCounter"/>
          <xs:element type="xs:string" name="RecoveryRate" minOccurs="0" maxOccurs="1"/>
          <xs:element type="date" name="StartDate" minOccurs="0" maxOccurs="1"/>
          <xs:element type="quoteType" name="Quotes" minOccurs="0" maxOccurs="1"/>
          <xs:element type="xs:string" name="BenchmarkCurve" minOccurs="0" maxOccurs="1"/>
          <xs:element type="xs:string" name="ReinterpretedYieldCurve" minOccurs="0" maxOccurs="1"/>
          <xs:element type="xs:string" name="SourceCurve" minOccurs="0" maxOccurs="1"/>
          <xs:element type="xs:string" name="Pillars" minOccurs="0" maxOccurs="1"/>
          <xs:element type="xs:integer" name="SpotLag" minOccurs="0" maxOccurs="1"/>
          <xs:element name="SourceCurves" minOccurs="0">
            <xs:complexType>
              <xs:sequence>
            <xs:element type="xs:string" name="SourceCurve" minOccurs="0" maxOccurs="unbounded"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="SwitchDates" minOccurs="0">
            <xs:complexType>
              <xs:sequence>
            <xs:element type="xs:string" name="SwitchDate" minOccurs="0" maxOccurs="unbounded"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element type="xs:string" name="InitialState" minOccurs="0"/>
          <xs:element type="xs:string" name="States" minOccurs="0"/>
          <xs:element type="calendar" name="Calendar" minOccurs="0" maxOccurs="1"/>
          <xs:element type="xs:string" name="Conventions" minOccurs="0" maxOccurs="1"/>
          <xs:element type="bool" name="Extrapolation" minOccurs="0" maxOccurs="1"/>
          <xs:element type="xs:decimal" name="RunningSpread" minOccurs="0" maxOccurs="1"/>
          <xs:element type="xs:string" name="IndexTerm" minOccurs="0"/>
          <xs:element type="bool" name="ImplyDefaultFromMarket" minOccurs="0" maxOccurs="1"/>
          <xs:element type="bootstrapConfigType" name="BootstrapConfig" minOccurs="0" maxOccurs="1"/>
          <xs:element type="bool" name="AllowNegativeRates" minOccurs="0" maxOccurs="1"/>
        </xs:all>
        <xs:attribute type="xs:nonNegativeInteger" name="priority"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
      </xs:element>
      <xs:element type="defaultCurveType" name="Type" minOccurs="0"/>
      <xs:element type="xs:string" name="DiscountCurve" minOccurs="0" maxOccurs="1"/>
      <xs:element type="dayCounter" name="DayCounter" minOccurs="0"/>
      <xs:element type="xs:string" name="RecoveryRate" minOccurs="0" maxOccurs="1"/>
      <xs:element type="date" name="StartDate" minOccurs="0" maxOccurs="1"/>
      <xs:element type="quoteType" name="Quotes" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="BenchmarkCurve" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="SourceCurve" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="Pillars" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:integer" name="SpotLag" minOccurs="0" maxOccurs="1"/>
      <xs:element name="SourceCurves" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element type="xs:string" name="SourceCurve" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SwitchDates" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element type="xs:string" name="SwitchDate" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element type="calendar" name="Calendar" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="Conventions" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="Extrapolation" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:decimal" name="RunningSpread" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="IndexTerm" minOccurs="0"/>
      <xs:element type="bool" name="ImplyDefaultFromMarket" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bootstrapConfigType" name="BootstrapConfig" minOccurs="0" maxOccurs="1"/>
      <!-- AllowNegativeRates removed by JW, but restored here -->
      <xs:element type="bool" name="AllowNegativeRates" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="InitialState" minOccurs="0"/>
      <xs:element type="xs:string" name="States" minOccurs="0"/>
   </xs:all>
  </xs:complexType>

  <xs:simpleType name="defaultCurveType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="SpreadCDS"/>
      <xs:enumeration value="ConvSpreadCDS"/>
      <xs:enumeration value="HazardRate"/>
      <xs:enumeration value="Benchmark"/>
      <xs:enumeration value="Price"/>
      <xs:enumeration value="TransitionMatrix"/>
      <xs:enumeration value="YieldCurve"/>
      <xs:enumeration value="Null"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="inflationCurves">
    <xs:sequence>
      <xs:element type="inflationCurve" name="InflationCurve" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="inflationCurve">
    <xs:all>
      <xs:element type="xs:string" name="CurveId"/>
      <xs:element type="xs:string" name="CurveDescription"/>
      <xs:element type="xs:string" name="NominalTermStructure" minOccurs="1" maxOccurs="1"/>
      <xs:element type="inflationType" name="Type" minOccurs="1" maxOccurs="1"/>
      <!-- Legacy block: Quotes/Conventions OR new Segments block -->
      <xs:element type="quoteType" name="Quotes" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="Conventions" minOccurs="0" maxOccurs="1"/>
      <!-- New Segments block use instead of Quotes/Conventions-->
      <xs:element type="inflSegmentsType" name="Segments" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="Extrapolation" minOccurs="0" maxOccurs="1"/>
      <xs:element type="calendar" name="Calendar"/>
      <xs:element type="dayCounter" name="DayCounter" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="Lag" minOccurs="1" maxOccurs="1"/>
      <xs:element type="frequencyType" name="Frequency" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="BaseRate" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:double" name="Tolerance" minOccurs="0" maxOccurs="1"/>
      <xs:element type="seasonalityType" name="Seasonality" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="UseLastFixingDate" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="InterpolationVariable" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="InterpolationMethod" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="inflSegmentsType">
    <xs:sequence>
      <xs:element type="inlfSegmentType" name="Segment" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="inlfSegmentType">
    <xs:all>
      <xs:element type="xs:string" name="Conventions" minOccurs="1" maxOccurs="1"/>
      <xs:element type="quoteType" name="Quotes" minOccurs="1" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="seasonalityType">
    <xs:all>
      <xs:element type="date" name="BaseDate" minOccurs="1" maxOccurs="1"/>
      <xs:element type="frequencyType" name="Frequency" minOccurs="1" maxOccurs="1"/>
      <xs:element type="factorType" name="Factors"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="inflationCapFloorVolatlities">
    <xs:sequence>
      <xs:element type="inflationCapFloorVolatility" name="InflationCapFloorVolatility" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="inflationCapFloorVolatility">
    <xs:all>
      <xs:element type="xs:string" name="CurveId"/>
      <xs:element type="xs:string" name="CurveDescription"/>
      <xs:element type="inflationType" name="Type" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="QuoteType"/>
      <xs:element type="volatilityType" name="VolatilityType"/>
      <xs:element type="bool" name="Extrapolation"/>
      <xs:element type="xs:string" name="Tenors" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:nonNegativeInteger" name="SettlementDays" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="CapStrikes" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="FloorStrikes" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="Strikes" minOccurs="0" maxOccurs="1"/>
      <xs:element type="calendar" name="Calendar" minOccurs="1" maxOccurs="1"/>
      <xs:element type="dayCounter" name="DayCounter" minOccurs="1" maxOccurs="1"/>
      <xs:element type="businessDayConvention" name="BusinessDayConvention" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="Index" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="IndexCurve" minOccurs="1" maxOccurs="1"/>
      <xs:element type="bool" name="IndexInterpolated" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="ObservationLag" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="YieldTermStructure" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:string" name="QuoteIndex" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="Conventions" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="UseLastFixingDate" minOccurs="0" maxOccurs="1"/>
      <xs:element type="reportConfiguration" name="Report" minOccurs="0"/>
      <xs:element type="bootstrapConfigType" name="BootstrapConfig" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="yieldCurves">
    <xs:sequence>
      <xs:element type="yieldCurve" name="YieldCurve" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="yieldCurve">
    <xs:all>
      <xs:element type="xs:string" name="CurveId"/>
      <xs:element type="xs:string" name="CurveDescription"/>
      <xs:element type="currencyCode" name="Currency"/>
      <xs:element type="xs:string" name="DiscountCurve"/>
      <xs:element type="segmentsType" name="Segments"/>
      <xs:element type="interpolationVariableType" name="InterpolationVariable" minOccurs="0" maxOccurs="1"/>
      <xs:element type="interpolationMethodType" name="InterpolationMethod" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:nonNegativeInteger" name="MixedInterpolationCutoff" minOccurs="0" maxOccurs="1"/>
      <xs:element type="dayCounter" name="YieldCurveDayCounter" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:double" name="Tolerance" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="Extrapolation" minOccurs="0" maxOccurs="1"/>
      <xs:element name="ExtrapolationMethod" minOccurs="0" maxOccurs="1">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="ContinuousForward"/>
            <xs:enumeration value="DiscreteForward"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element type="bool" name="ExcludeT0FromInterpolation" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bootstrapConfigType" name="BootstrapConfig" minOccurs="0" maxOccurs="1"/>
      <xs:element type="yieldCurveReport" name="Report" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="securities">
    <xs:sequence>
      <xs:element type="security" name="Security" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="security">
    <xs:all>
      <xs:element type="xs:string" name="CurveId"/>
      <xs:element type="xs:string" name="CurveDescription"/>
      <xs:element type="xs:string" name="SpreadQuote" minOccurs="0"/>
      <xs:element type="xs:string" name="RecoveryRateQuote" minOccurs="0"/>
      <xs:element type="xs:string" name="CPRQuote" minOccurs="0"/>
      <xs:element type="xs:string" name="PriceQuote" minOccurs="0"/>
      <xs:element type="xs:string" name="ConversionFactor" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="baseCorrelations">
    <xs:sequence>
      <xs:element type="baseCorrelation" name="BaseCorrelation" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="baseCorrelation">
    <xs:all>
      <xs:element type="xs:string" name="CurveId" />
      <xs:element type="xs:string" name="CurveDescription" />
      <xs:element type="xs:string" name="Terms" />
      <xs:element type="xs:string" name="DetachmentPoints" />
      <xs:element type="xs:float" name="SettlementDays" />
      <xs:element type="calendar" name="Calendar" minOccurs="1" maxOccurs="1" />
      <xs:element type="businessDayConvention" name="BusinessDayConvention" minOccurs="1"
        maxOccurs="1" />
      <xs:element type="dayCounter" name="DayCounter" minOccurs="1" maxOccurs="1" />
      <xs:element type="bool" name="Extrapolate" minOccurs="0" maxOccurs="1" />
      <xs:element type="xs:string" name="QuoteName" minOccurs="0" maxOccurs="1" />

      <xs:element type="date" name="StartDate" minOccurs="0" maxOccurs="1" />
      <xs:element type="dateRule" name="Rule" minOccurs="0" maxOccurs="1" />
      <xs:element type="bool" name="AdjustForLosses" minOccurs="0" maxOccurs="1" />
      <xs:element type="xs:string" name="IndexTerm" minOccurs="0" />
      <xs:element type="xs:string" name="IndexSpread" minOccurs="0" maxOccurs="1" />
      <xs:element type="xs:string" name="Currency" minOccurs="0" />
      <xs:element type="bool" name="CalibrateConstituentsToIndexSpread" minOccurs="0" />
      <xs:element type="bool" name="UseAssumedRecovery" minOccurs="0" />
      <xs:element name="RecoveryGrid" minOccurs="0" maxOccurs="1">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Grid" maxOccurs="unbounded">
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:string">
                    <xs:attribute name="seniority" type="xs:string" use="required" />
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="RecoveryProbabilities" minOccurs="0" maxOccurs="1">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Probabilities" maxOccurs="unbounded">
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:string">
                    <xs:attribute name="seniority" type="xs:string" use="required" />
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="QuoteTypes" minOccurs="0" maxOccurs="1">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="QuoteType" type="xs:string" maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="simCommodityCurves">
    <xs:sequence>
      <xs:element type="simCommodityCurve" name="CommodityCurve" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:simpleType name="commodityInterpolationType">
    <xs:restriction base="interpolationMethodType">
      <xs:enumeration value="Linear"/>
      <xs:enumeration value="LogLinear"/>
      <xs:enumeration value="Cubic"/>
      <xs:enumeration value="Hermite"/>
      <xs:enumeration value="LinearFlat"/>
      <xs:enumeration value="LogLinearFlat"/>
      <xs:enumeration value="CubicFlat"/>
      <xs:enumeration value="HermiteFlat"/>
      <xs:enumeration value="BackwardFlat"/>
    </xs:restriction>
  </xs:simpleType>
  
  <xs:complexType name="commodityBasisConfig">
    <xs:all>
      <xs:element type="xs:string" name="BasePriceCurve"/>
      <xs:element type="xs:string" name="BasePriceConventions"/>
      <xs:element type="quoteType" name="BasisQuotes"/>
      <xs:element type="xs:string" name="BasisConventions"/>
      <xs:element type="dayCounter" name="DayCounter" minOccurs="0" maxOccurs="1"/>
      <xs:element type="commodityInterpolationType" name="InterpolationMethod" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="AddBasis" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:nonNegativeInteger" name="MonthOffset" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="AverageBase" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="PriceAsHistoricalFixing" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>
  
  <xs:complexType name="offPeakDailyType">
    <xs:all>
      <xs:element type="quoteType" name="OffPeakQuotes" minOccurs="1" maxOccurs="1"/>
      <xs:element type="quoteType" name="PeakQuotes" minOccurs="1" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>
  
  <xs:complexType name="priceSegmentType">
    <xs:all>
      <xs:element type="priceSegmentTypeType" name="Type" minOccurs="1" maxOccurs="1"/>
      <xs:element type="xs:nonNegativeInteger" name="Priority" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="Conventions" minOccurs="1" maxOccurs="1"/>
      <xs:element type="quoteType" name="Quotes" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="PeakPriceCurveId" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="PeakPriceCalendar" minOccurs="0" maxOccurs="1"/>
      <xs:element type="offPeakDailyType" name="OffPeakDaily" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>
  
  <xs:complexType name="priceSegmentsType">
    <xs:sequence>
      <xs:element type="priceSegmentType" name="PriceSegment" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="simCommodityCurve">
    <xs:sequence>
      <xs:element type="xs:string" name="CurveId"/>
      <xs:element type="xs:string" name="CurveDescription"/>
      <xs:element type="currencyCode" name="Currency"/>
      <xs:choice>
        <xs:sequence>
          <xs:element type="xs:string" name="BasePriceCurve"/>
          <xs:element type="xs:string" name="BaseYieldCurve"/>
          <xs:element type="xs:string" name="YieldCurve"/>
        </xs:sequence>
        <xs:sequence>
          <xs:element type="xs:string" name="SpotQuote" minOccurs="0" maxOccurs="1"/>
          <xs:element type="quoteType" name="Quotes"/>
          <xs:element type="dayCounter" name="DayCounter" minOccurs="0" maxOccurs="1"/>
          <xs:element type="commodityInterpolationType" name="InterpolationMethod" minOccurs="0" maxOccurs="1"/>
          <xs:element type="xs:string" name="Conventions" minOccurs="0" maxOccurs="1"/>
        </xs:sequence>
        <xs:element type="commodityBasisConfig" name="BasisConfiguration"/>
        <xs:sequence>
          <xs:element type="priceSegmentsType" name="PriceSegments"/>
          <xs:element type="dayCounter" name="DayCounter" minOccurs="0" maxOccurs="1"/>
          <xs:element type="commodityInterpolationType" name="InterpolationMethod" minOccurs="0" maxOccurs="1"/>
        </xs:sequence>
      </xs:choice>
      <xs:element type="bool" name="Extrapolation" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bootstrapConfigType" name="BootstrapConfig" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="commodityVolatilities">
    <xs:sequence>
      <xs:element type="commodityVolatility" name="CommodityVolatility" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="volatilityApoFutureSurfaceConfig">
    <xs:all>
      <xs:element type="xs:string" name="QuoteType" minOccurs="0"/>
      <xs:element type="xs:string" name="VolatilityType" minOccurs="0"/>
      <xs:element type="xs:string" name="MoneynessLevels"/>
      <xs:element type="xs:string" name="VolatilityId"/>
      <xs:element type="xs:string" name="PriceCurveId"/>
      <xs:element type="xs:string" name="FutureConventions"/>
      <xs:element type="interpolationMethodType" name="TimeInterpolation"/>
      <xs:element type="interpolationMethodType" name="StrikeInterpolation"/>
      <xs:element type="bool" name="Extrapolation"/>
      <xs:element type="extrapolationType" name="TimeExtrapolation"/>
      <xs:element type="bool" name="TimeExtrapolationVariance" minOccurs="0" maxOccurs="1"/>
      <xs:element type="extrapolationType" name="StrikeExtrapolation"/>
      <xs:element type="xs:string" name="MaxTenor" minOccurs="0"/>
      <xs:element type="non-negative-decimal" name="Beta" minOccurs="0"/>
    </xs:all>
    <xs:attribute type="xs:nonNegativeInteger" name="priority"/>
  </xs:complexType>
  
  <xs:simpleType name="commVolQuoteSuffix">
    <xs:restriction base="xs:string">
      <xs:enumeration value="C"/>
      <xs:enumeration value="P"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="commodityVolatility">
    <xs:sequence>
      <xs:element type="xs:string" name="CurveId"/>
      <xs:element type="xs:string" name="CurveDescription"/>
      <xs:element type="currencyCode" name="Currency"/>
      <xs:choice>
          <xs:element type="volatilityConfig" name="VolatilityConfig" minOccurs="0" maxOccurs="1"/>
          <xs:choice minOccurs="0">
            <xs:element type="constantVolatilityConfig" name="Constant"/>
            <xs:element type="volatilityCurveConfig" name="Curve"/>
            <xs:element type="volatilityStrikeSurfaceConfig" name="StrikeSurface"/>
            <xs:element type="volatilityMoneynessSurfaceConfig" name="MoneynessSurface"/>
            <xs:element type="volatilityDeltaSurfaceConfig" name="DeltaSurface"/>
            <xs:element type="volatilityApoFutureSurfaceConfig" name="ApoFutureSurface"/>
            <xs:element type="proxySurface" name="ProxySurface"/>
          </xs:choice>
      </xs:choice>
      <xs:element type="dayCounter" name="DayCounter" minOccurs="0" maxOccurs="1"/>
      <xs:element type="calendar" name="Calendar" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="FutureConventions" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="OptionExpiryRollDays" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="PriceCurveId" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="YieldCurveId" minOccurs="0" maxOccurs="1"/>
      <xs:element type="commVolQuoteSuffix" name="QuoteSuffix" minOccurs="0" maxOccurs="1"/>
      <xs:element type="oneDimSolverConfigType" name="OneDimSolverConfig" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="PreferOutOfTheMoney" minOccurs="0" maxOccurs="1"/>
		<xs:element type="reportConfiguration" name="Report" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="correlations">
    <xs:sequence>
      <xs:element type="correlation" name="Correlation" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="correlation">
    <xs:all>
      <xs:element type="xs:string" name="CurveId"/>
      <xs:element type="xs:string" name="CurveDescription"/>
      <xs:element type="correlationType" name="CorrelationType"/>
      <xs:element type="xs:string" name="Index1" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="Index2" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="Conventions" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="SwaptionVolatility" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="DiscountCurve" minOccurs="0" maxOccurs="1"/>
      <xs:element type="currencyCode" name="Currency" minOccurs="0" maxOccurs="1"/>
      <xs:element type="dimensionType" name="Dimension" minOccurs="0" maxOccurs="1"/>
      <xs:element type="correlationQuoteType" name="QuoteType" minOccurs="0" maxOccurs="1"/>
      <xs:element type="bool" name="Extrapolation" minOccurs="0" maxOccurs="1"/>
      <xs:element type="dayCounter" name="DayCounter" minOccurs="0" maxOccurs="1"/>
      <xs:element type="calendar" name="Calendar" minOccurs="0" maxOccurs="1"/>
      <xs:element type="businessDayConvention" name="BusinessDayConvention" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="OptionTenors" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="segmentsType">
    <xs:choice minOccurs="1" maxOccurs="unbounded">
      <xs:element type="directSegmentType" name="Direct"/>
      <xs:element type="simpleSegmentType" name="Simple"/>
      <xs:element type="aoisSegmentType" name="AverageOIS"/>
      <xs:element type="tenorBasisSegmentType" name="TenorBasis"/>
      <xs:element type="crossCurrencySegmentType" name="CrossCurrency"/>
      <xs:element type="zeroSpreadType" name="ZeroSpread"/>
      <xs:element type="discountRatioType" name="DiscountRatio"/>
      <xs:element type="fittedBondType" name="FittedBond"/>
      <!-- weightedAverageType and yieldPlusDefaultType removed by JW, but restored here -->
      <xs:element type="BondYieldShiftedType" name="BondYieldShifted"/>
      <xs:element type="weightedAverageType" name="WeightedAverage"/>
      <xs:element type="yieldPlusDefaultType" name="YieldPlusDefault"/>
      <xs:element type="iborFallbackType" name="IborFallback"/>
    </xs:choice>
  </xs:complexType>

  <xs:complexType name="directSegmentType">
    <xs:all>
      <xs:element type="directSegmentTypeType" name="Type"/>
      <xs:element type="quoteType" name="Quotes"/>
      <xs:element type="xs:string" name="Conventions" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="PillarChoice" minOccurs="0"/>
      <xs:element type="xs:nonNegativeInteger" name="Priority" minOccurs="0"/>
      <xs:element type="xs:nonNegativeInteger" name="MinDistance" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <xs:simpleType name="directSegmentTypeType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Zero"/>
      <xs:enumeration value="Discount"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="simpleSegmentType">
    <xs:all>
      <xs:element type="simpleSegmentTypeType" name="Type"/>
      <xs:element type="quoteType" name="Quotes"/>
      <xs:element type="xs:string" name="Conventions"/>
      <xs:element type="xs:string" name="PillarChoice" minOccurs="0"/>
      <xs:element type="xs:nonNegativeInteger" name="Priority" minOccurs="0"/>
      <xs:element type="xs:nonNegativeInteger" name="MinDistance" minOccurs="0"/>
      <xs:element type="xs:string" name="ProjectionCurve" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:simpleType name="simpleSegmentTypeType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Deposit"/>
      <xs:enumeration value="FRA"/>
      <xs:enumeration value="Future"/>
      <xs:enumeration value="OIS"/>
      <xs:enumeration value="Swap"/>
      <xs:enumeration value="BMA Basis Swap"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="aoisSegmentType">
    <xs:all>
      <xs:element type="xs:string" name="Type" fixed="Average OIS"/>
      <xs:element type="compositeQuoteType" name="Quotes"/>
      <xs:element type="xs:string" name="Conventions"/>
      <xs:element type="xs:string" name="PillarChoice" minOccurs="0"/>
      <xs:element type="xs:nonNegativeInteger" name="Priority" minOccurs="0"/>
      <xs:element type="xs:nonNegativeInteger" name="MinDistance" minOccurs="0"/>
      <xs:element type="xs:string" name="ProjectionCurve" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="tenorBasisSegmentType">
    <xs:all>
      <xs:element type="tenorBasisSegmentTypeType" name="Type"/>
      <xs:element type="quoteType" name="Quotes"/>
      <xs:element type="xs:string" name="Conventions"/>
      <xs:element type="xs:string" name="PillarChoice" minOccurs="0"/>
      <xs:element type="xs:nonNegativeInteger" name="Priority" minOccurs="0"/>
      <xs:element type="xs:nonNegativeInteger" name="MinDistance" minOccurs="0"/>
      <xs:element type="xs:string" name="ProjectionCurvePay" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="ProjectionCurveReceive" minOccurs="0" maxOccurs="1"/>
      <!-- deprecated fields -->
      <xs:element type="xs:string" name="ProjectionCurveLong" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="ProjectionCurveShort" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:simpleType name="tenorBasisSegmentTypeType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Tenor Basis Swap"/>
      <xs:enumeration value="Tenor Basis Two Swaps"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="crossCurrencySegmentType">
    <xs:all>
      <xs:element type="crossCurrencySegmentTypeType" name="Type"/>
      <xs:element type="quoteType" name="Quotes"/>
      <xs:element type="xs:string" name="Conventions"/>
      <xs:element type="xs:string" name="PillarChoice" minOccurs="0"/>
      <xs:element type="xs:nonNegativeInteger" name="Priority" minOccurs="0"/>
      <xs:element type="xs:nonNegativeInteger" name="MinDistance" minOccurs="0"/>
      <xs:element type="xs:string" name="DiscountCurve"/>
      <xs:element type="xs:string" name="SpotRate"/>
      <xs:element type="xs:string" name="ProjectionCurveDomestic" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:string" name="ProjectionCurveForeign" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:simpleType name="crossCurrencySegmentTypeType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Cross Currency Basis Swap"/>
      <xs:enumeration value="Cross Currency Fix Float Swap"/>
      <xs:enumeration value="FX Forward"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="zeroSpreadType">
    <xs:all>
      <xs:element type="zeroSpreadSegmentTypeType" name="Type"/>
      <xs:element type="quoteType" name="Quotes"/>
      <xs:element type="xs:string" name="Conventions"/>
      <xs:element type="xs:string" name="ReferenceCurve"/>
      <xs:element type="xs:string" name="PillarChoice" minOccurs="0"/>
      <xs:element type="xs:nonNegativeInteger" name="Priority" minOccurs="0"/>
      <xs:element type="xs:nonNegativeInteger" name="MinDistance" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <xs:simpleType name="zeroSpreadSegmentTypeType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Zero Spread"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="discountRatioType">
    <xs:all>
      <xs:element type="discountRatioTypeType" name="Type"/>
      <xs:element type="xs:string" name="PillarChoice" minOccurs="0"/>
      <xs:element type="xs:nonNegativeInteger" name="Priority" minOccurs="0"/>
      <xs:element type="xs:nonNegativeInteger" name="MinDistance" minOccurs="0"/>
      <xs:element type="xs:string" name="Conventions" minOccurs="0" maxOccurs="1"/>
      <xs:element type="discountRatioCurveElement" name="BaseCurve"/>
      <xs:element type="discountRatioCurveElement" name="NumeratorCurve"/>
      <xs:element type="discountRatioCurveElement" name="DenominatorCurve"/>
    </xs:all>
  </xs:complexType>

  <xs:simpleType name="discountRatioTypeType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Discount Ratio"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="discountRatioCurveElement">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="currency" type="xs:string" use="required"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:complexType name="fittedBondType">
    <xs:all>
      <xs:element type="xs:string" name="Type" fixed="FittedBond"/>
      <xs:element type="quoteType" name="Quotes"/>
      <xs:element type="xs:string" name="PillarChoice" minOccurs="0"/>
      <xs:element type="xs:nonNegativeInteger" name="Priority" minOccurs="0"/>
      <xs:element type="xs:nonNegativeInteger" name="MinDistance" minOccurs="0"/>
      <xs:element name="IborIndexCurves" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="IborIndexCurve" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:string">
                    <xs:attribute name="iborIndex" type="xs:string"/>
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element type="xs:boolean" name="ExtrapolateFlat" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

    <xs:complexType name="BondYieldShiftedType">
    <xs:all>
      <xs:element type="xs:string" name="Type" fixed="Bond Yield Shifted"/>
      <xs:element type="xs:string" name="ReferenceCurve"/>
      <xs:element type="quoteType" name="Quotes"/>
      <xs:element name="IborIndexCurves" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="IborIndexCurve" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:string">
                    <xs:attribute name="iborIndex" type="xs:string"/>
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element type="xs:string" name="Conventions"/>
      <xs:element type="xs:boolean" name="ExtrapolateFlat" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <!-- yieldPlusDefaultType removed by JW, but restored here -->
  <xs:complexType name="yieldPlusDefaultType">
    <xs:sequence>
      <xs:element type="xs:string" name="Type" fixed="Yield Plus Default"/>
      <xs:element type="xs:string" name="ReferenceCurve"/>
      <xs:element name="DefaultCurves">
        <xs:complexType>
          <xs:sequence>
            <xs:element type="xs:string" name="DefaultCurve"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="Weights">
        <xs:complexType>
          <xs:sequence>
            <xs:element type="xs:float" name="Weight"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <!-- weightedAverageType removed by JW, but restored here -->
  <xs:complexType name="weightedAverageType">
    <xs:sequence>
      <xs:element type="xs:string" name="Type" fixed="Weighted Average"/>
      <xs:element type="xs:string" name="ReferenceCurve1"/>
      <xs:element type="xs:string" name="ReferenceCurve2"/>
      <xs:element type="xs:float" name="Weight1"/>
      <xs:element type="xs:float" name="Weight2"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="iborFallbackType">
    <xs:all>
      <xs:element type="xs:string" name="Type" fixed="Ibor Fallback"/>
      <xs:element type="indexNameType" name="IborIndex"/>
      <xs:element type="xs:string" name="RfrCurve"/>
      <xs:element type="indexNameType" name="RfrIndex" minOccurs="0"/>
      <xs:element type="xs:float" name="Spread" minOccurs="0"/>
      <xs:element type="xs:string" name="PillarChoice" minOccurs="0"/>
      <xs:element type="xs:nonNegativeInteger" name="Priority" minOccurs="0"/>
      <xs:element type="xs:nonNegativeInteger" name="MinDistance" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="quoteType">
    <xs:sequence>
      <xs:element name="Quote" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:simpleContent>
            <xs:extension base="xs:string">
              <xs:attribute name="optional" type="xs:string"/>
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="compositeQuoteType">
    <xs:sequence>
      <xs:element name="CompositeQuote" minOccurs="1" maxOccurs="unbounded">
        <xs:complexType>
          <xs:all>
            <xs:element type="xs:string" name="SpreadQuote"/>
            <xs:element type="xs:string" name="RateQuote"/>
          </xs:all>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="factorType">
    <xs:sequence>
      <xs:element type="xs:string" name="Factor" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="dividendInterpolation">
    <xs:all>
      <xs:element type="interpolationVariableType" name="InterpolationVariable" minOccurs="0" maxOccurs="1"/>
      <xs:element type="interpolationMethodType" name="InterpolationMethod" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="bootstrapConfigType">
    <xs:all>
      <xs:element type="xs:double" name="Accuracy" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:double" name="GlobalAccuracy" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:boolean" name="DontThrow" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:positiveInteger" name="MaxAttempts" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:double" name="MaxFactor" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:double" name="MinFactor" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:positiveInteger" name="DontThrowSteps" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:boolean" name="Global" minOccurs="0" maxOccurs="1"/>
      <xs:element type="xs:double" name="SmoothnessLambda" minOccurs="0" maxOccurs="1"/>
    </xs:all>
  </xs:complexType>
  
  <xs:complexType name="minMaxType">
    <xs:all>
      <xs:element type="xs:double" name="Min"/>
      <xs:element type="xs:double" name="Max"/>
    </xs:all>
  </xs:complexType>
  
  <xs:complexType name="oneDimSolverConfigType">
    <xs:sequence>
      <xs:element type="xs:positiveInteger" name="MaxEvaluations"/>
      <xs:element type="xs:double" name="InitialGuess"/>
      <xs:element type="xs:double" name="Accuracy"/>
      <xs:choice>
        <xs:element type="minMaxType" name="MinMax"/>
        <xs:element type="xs:double" name="Step"/>
      </xs:choice>
      <xs:element type="xs:double" name="LowerBound" minOccurs="0"/>
      <xs:element type="xs:double" name="UpperBound" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="globalReportConfiguration">
    <xs:all>
      <xs:element name="FXVolatilities" minOccurs="0">
        <xs:complexType>
          <xs:all>
            <xs:element type="reportConfiguration" name="Report" minOccurs="0"/>
          </xs:all>
        </xs:complexType>
      </xs:element>
      <xs:element name="EquityVolatilities" minOccurs="0">
        <xs:complexType>
          <xs:all>
            <xs:element type="reportConfiguration" name="Report" minOccurs="0"/>
          </xs:all>
        </xs:complexType>
      </xs:element>
      <xs:element name="CommodityVolatilities" minOccurs="0">
        <xs:complexType>
          <xs:all>
            <xs:element type="reportConfiguration" name="Report" minOccurs="0"/>
          </xs:all>
        </xs:complexType>
      </xs:element>
      <xs:element name="IRSwaptionVolatilities" minOccurs="0">
        <xs:complexType>
          <xs:all>
            <xs:element type="reportConfiguration" name="Report" minOccurs="0"/>
          </xs:all>
        </xs:complexType>
      </xs:element>
      <xs:element name="IRCapFloorVolatilities" minOccurs="0">
        <xs:complexType>
          <xs:all>
            <xs:element type="reportConfiguration" name="Report" minOccurs="0"/>
          </xs:all>
        </xs:complexType>
      </xs:element>
        <xs:element name="YieldCurves" minOccurs="0">
            <xs:complexType>
                <xs:all>
                    <xs:element type="yieldCurveReport" name="Report" minOccurs="0"/>
                </xs:all>
            </xs:complexType>
        </xs:element>
      <xs:element name="InflationCapFloorVolatilities" minOccurs="0">
        <xs:complexType>
          <xs:all>
            <xs:element type="reportConfiguration" name="Report" minOccurs="0"/>
          </xs:all>
        </xs:complexType>
      </xs:element>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="reportConfiguration">
    <xs:all>
      <xs:element type="bool" name="ReportOnDeltaGrid" minOccurs="0"/>
      <xs:element type="bool" name="ReportOnMoneynessGrid" minOccurs="0"/>
      <xs:element type="bool" name="ReportOnStrikeGrid" minOccurs="0"/>
      <xs:element type="bool" name="ReportOnStrikeSpreadGrid" minOccurs="0"/>
      <xs:element type="xs:string" name="Deltas" minOccurs="0"/>
      <xs:element type="xs:string" name="Moneyness" minOccurs="0"/>
      <xs:element type="xs:string" name="Strikes" minOccurs="0"/>
      <xs:element type="xs:string" name="StrikeSpreads" minOccurs="0"/>
      <xs:element type="xs:string" name="Expiries" minOccurs="0"/>
      <xs:element type="xs:string" name="PillarDates" minOccurs="0"/>
      <xs:element type="xs:string" name="UnderlyingTenors" minOccurs="0"/>
      <xs:element type="xs:string" name="ContinuationExpiry" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="yieldCurveReport">
    <xs:all>
      <xs:element type="xs:string" name="PillarDates" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
</xs:schema>
