Dhule.java

package org.drip.sample.securitysuite;

import org.drip.analytics.cashflow.CompositePeriod;
import org.drip.analytics.date.*;
import org.drip.numerical.common.FormatUtil;
import org.drip.numerical.linearalgebra.Matrix;
import org.drip.product.creator.BondBuilder;
import org.drip.product.credit.BondComponent;
import org.drip.service.env.EnvManager;
import org.drip.service.scenario.*;

/*
 * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
 */

/*!
 * Copyright (C) 2018 Lakshmi Krishnamurthy
 * Copyright (C) 2017 Lakshmi Krishnamurthy
 * 
 *  This file is part of DRIP, a free-software/open-source library for buy/side financial/trading model
 *  	libraries targeting analysts and developers
 *  	https://lakshmidrip.github.io/DRIP/
 *  
 *  DRIP is composed of four main libraries:
 *  
 *  - DRIP Fixed Income - https://lakshmidrip.github.io/DRIP-Fixed-Income/
 *  - DRIP Asset Allocation - https://lakshmidrip.github.io/DRIP-Asset-Allocation/
 *  - DRIP Numerical Optimizer - https://lakshmidrip.github.io/DRIP-Numerical-Optimizer/
 *  - DRIP Statistical Learning - https://lakshmidrip.github.io/DRIP-Statistical-Learning/
 * 
 *  - DRIP Fixed Income: Library for Instrument/Trading Conventions, Treasury Futures/Options,
 *  	Funding/Forward/Overnight Curves, Multi-Curve Construction/Valuation, Collateral Valuation and XVA
 *  	Metric Generation, Calibration and Hedge Attributions, Statistical Curve Construction, Bond RV
 *  	Metrics, Stochastic Evolution and Option Pricing, Interest Rate Dynamics and Option Pricing, LMM
 *  	Extensions/Calibrations/Greeks, Algorithmic Differentiation, and Asset Backed Models and Analytics.
 * 
 *  - DRIP Asset Allocation: Library for model libraries for MPT framework, Black Litterman Strategy
 *  	Incorporator, Holdings Constraint, and Transaction Costs.
 * 
 *  - DRIP Numerical Optimizer: Library for Numerical Optimization and Spline Functionality.
 * 
 *  - DRIP Statistical Learning: Library for Statistical Evaluation and Machine Learning.
 * 
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *   	you may not use this file except in compliance with the License.
 *   
 *  You may obtain a copy of the License at
 *  	http://www.apache.org/licenses/LICENSE-2.0
 *  
 *  Unless required by applicable law or agreed to in writing, software
 *  	distributed under the License is distributed on an "AS IS" BASIS,
 *  	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  
 *  See the License for the specific language governing permissions and
 *  	limitations under the License.
 */

/**
 * Dhule generates the Full Suite of Replication Metrics for Bond Dhule.
 * 
 * @author Lakshmi Krishnamurthy
 */

public class Dhule {

	public static final void main (
		final String[] astArgs)
		throws Exception
	{
		EnvManager.InitEnv ("");

		JulianDate dtSpot = DateUtil.CreateFromYMD (
			2017,
			DateUtil.OCTOBER,
			5
		);

		String[] astrDepositTenor = new String[] {
			"2D"
		};

		double[] adblDepositQuote = new double[] {
			0.0130411 // 2D
		};

		double[] adblFuturesQuote = new double[] {
			0.01345,	// 98.655
			0.01470,	// 98.530
			0.01575,	// 98.425
			0.01660,	// 98.340
			0.01745,    // 98.255
			0.01845     // 98.155
		};

		String[] astrFixFloatTenor = new String[] {
			"02Y",
			"03Y",
			"04Y",
			"05Y",
			"06Y",
			"07Y",
			"08Y",
			"09Y",
			"10Y",
			"11Y",
			"12Y",
			"15Y",
			"20Y",
			"25Y",
			"30Y",
			"40Y",
			"50Y"
		};

		String[] astrGovvieTenor = new String[] {
			"1Y",
			"2Y",
			"3Y",
			"5Y",
			"7Y",
			"10Y",
			"20Y",
			"30Y"
		};

		double[] adblFixFloatQuote = new double[] {
			0.016410, //  2Y
			0.017863, //  3Y
			0.019030, //  4Y
			0.020035, //  5Y
			0.020902, //  6Y
			0.021660, //  7Y
			0.022307, //  8Y
			0.022879, //  9Y
			0.023363, // 10Y
			0.023820, // 11Y
			0.024172, // 12Y
			0.024934, // 15Y
			0.025581, // 20Y
			0.025906, // 25Y
			0.025973, // 30Y
			0.025838, // 40Y
			0.025560  // 50Y
		};

		double[] adblGovvieYield = new double[] {
			0.01219, //  1Y
			0.01391, //  2Y
			0.01590, //  3Y
			0.01937, //  5Y
			0.02200, //  7Y
			0.02378, // 10Y
			0.02677, // 20Y
			0.02927  // 30Y
		};

		String[] astrCreditTenor = new String[] {
			"06M",
			"01Y",
			"02Y",
			"03Y",
			"04Y",
			"05Y",
			"07Y",
			"10Y"
		};

		double[] adblCreditQuote = new double[] {
			 60.,	//  6M
			 68.,	//  1Y
			 88.,	//  2Y
			102.,	//  3Y
			121.,	//  4Y
			138.,	//  5Y
			168.,	//  7Y
			188.	// 10Y
		};

		double dblFX = 1.;
		int iSettleLag = 3;
		int iCouponFreq = 12;
		String strName = "Dhule";
		double dblCleanPrice = 0.95;
		double dblIssuePrice = 1.;
		String strCurrency = "USD";
		double dblSpreadBump = 20.;
		double dblCouponRate = 0.03; 
		String strTreasuryCode = "UST";
		String strCouponDayCount = "30/360";
		double dblSpreadDurationMultiplier = 5.;

		org.drip.analytics.date.JulianDate[] adtPeriodEnd = new org.drip.analytics.date.JulianDate[] {
			DateUtil.CreateFromYMD (2017, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2017, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2017, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2018, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2018, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2019, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2019, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2020, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2020, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2021, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2021, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2022, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2022, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2023, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2023, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2024, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2024, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2025, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2025, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2026, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2026, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2027, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2027, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2028, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2028, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2029, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2029, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2030, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2030, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2031, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2031, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2032, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2032, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2033, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2033, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2034, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2034, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2035, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2035, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2036, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2036, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2037, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2037, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2038, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2038, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2039, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2039, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2040, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2040, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2041, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2041, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2042, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2042, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2043, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2043, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2044, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2044, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2045, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2045, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2046, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2046, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2047, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2047, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2048, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2048, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2049, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2049, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2050, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2050, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2051, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2051, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2052, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2052, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2053, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2053, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2054, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2054, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2055, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.NOVEMBER , 25),
			DateUtil.CreateFromYMD (2055, DateUtil.DECEMBER , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.JANUARY  , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.FEBRUARY , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.MARCH    , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.APRIL    , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.MAY      , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.JUNE     , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.JULY     , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.AUGUST   , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.SEPTEMBER, 25),
			DateUtil.CreateFromYMD (2056, DateUtil.OCTOBER  , 25),
			DateUtil.CreateFromYMD (2056, DateUtil.NOVEMBER , 25),
		};

		double[] adblPrincipalPayDown = new double[] {
			475796.56,
			446370.43,
			443575.29,
			428965.03,
			391532.47,
			396998.16,
			380276.29,
			373036.68,
			360674.24,
			353894.44,
			335414.04,
			347272.51,
			337014.65,
			322589.82,
			323653.03,
			320276.04,
			309919.33,
			318259.57,
			303572.91,
			289731.60,
			305429.66,
			294821.36,
			285595.18,
			289999.59,
			284002.48,
			279054.50,
			277701.66,
			272559.82,
			281753.25,
			282786.12,
			266462.02,
			278984.22,
			274920.95,
			265816.09,
			275840.79,
			266644.90,
			264718.55,
			268535.97,
			254733.61,
			269839.77,
			257982.57,
			264728.63,
			250934.90,
			257671.34,
			249367.74,
			245615.89,
			245431.01,
			233764.50,
			245795.01,
			226499.85,
			226220.30,
			229322.19,
			216001.24,
			222542.96,
			208183.73,
			208169.97,
			192010.96,
			205244.59,
			191402.09,
			184015.20,
			188961.64,
			180388.82,
			173389.44,
			180196.20,
			163686.21,
			176029.61,
			170123.73,
			163432.81,
			153564.51,
			160562.43,
			152420.95,
			149878.97,
			149730.76,
			137832.88,
			147168.29,
			141641.94,
			132274.98,
			142420.46,
			130830.77,
			121574.67,
			134765.76,
			125610.09,
			117281.91,
			121301.10,
			119717.44,
			114533.98,
			112444.48,
			106542.90,
			113670.30,
			114633.25,
			103519.43,
			97772.87,
			104933.69,
			99924.27,
			95006.96,
			92422.57,
			87570.75,
			94702.35,
			86829.43,
			85032.79,
			85593.04,
			89772.76,
			73120.22,
			83278.76,
			78573.10,
			70945.42,
			77577.28,
			69956.00,
			68342.04,
			69644.68,
			59134.62,
			72276.39,
			61871.04,
			69115.34,
			55247.03,
			62518.44,
			55107.53,
			53630.26,
			55055.14,
			44778.27,
			57939.94,
			44765.76,
			46277.44,
			50672.89,
			43406.05,
			41983.20,
			45967.41,
			41676.75,
			34490.81,
			41901.93,
			34748.56,
			33413.69,
			34998.15,
			24984.25,
			35286.30,
			31103.09,
			24035.39,
			34353.45,
			27318.64,
			26077.14,
			21995.32,
			23663.19,
			13784.76,
			24134.19,
			20062.60,
			13108.77,
			17710.51,
			16552.60,
			12193.41,
			19719.22,
			9961.31,
			3085.09,
			16395.62,
			9550.72,
			3220.90,
			7904.77,
			6877.28,
			2934.14,
			1877.75,
			0.00,
			3501.05,
			7411.09,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			0.00,
			59717516.32,
		};

		double[] adblCouponAmount = new double[] {
			102472.91,
			112086.91,
			97978.52,
			100820.36,
			123198.38,
			107289.42,
			114399.79,
			113869.94,
			117128.52,
			112847.64,
			123590.00,
			108157.63,
			111403.34,
			118329.35,
			110484.29,
			110033.33,
			113239.98,
			101878.24,
			112335.54,
			119117.72,
			100692.80,
			107459.58,
			114185.38,
			106650.87,
			106246.80,
			109379.46,
			108977.68,
			112080.37,
			101205.72,
			100826.23,
			114299.88,
			100086.46,
			103149.00,
			109617.00,
			98982.38,
			105411.61,
			105027.70,
			101270.87,
			110986.38,
			93838.99,
			103504.66,
			93152.59,
			106066.65,
			95784.92,
			102019.79,
			101660.76,
			98039.15,
			107466.90,
			90880.04,
			103497.60,
			99937.19,
			93184.94,
			99281.31,
			89392.54,
			98649.90,
			95177.58,
			104376.28,
			88312.00,
			97478.49,
			100338.49,
			90683.91,
			96665.91,
			99516.06,
			89952.90,
			102084.01,
			86403.87,
			89252.63,
			92093.27,
			97989.93,
			88596.54,
			94475.47,
			94256.02,
			91006.67,
			99877.85,
			87585.80,
			90400.94,
			96217.16,
			84018.00,
			92814.87,
			98602.41,
			83504.55,
			89281.39,
			95046.79,
			88942.96,
			88773.94,
			91560.71,
			91395.80,
			94176.94,
			85204.35,
			82118.45,
			90751.81,
			93525.43,
			84625.73,
			87397.65,
			90167.04,
			90030.25,
			92797.09,
			83979.42,
			89634.75,
			89509.73,
			86503.84,
			80625.61,
			94885.45,
			83285.70,
			86041.59,
			91660.91,
			82972.15,
			88582.67,
			88481.95,
			85532.47,
			93978.97,
			79662.84,
			88094.08,
			79488.38,
			90741.15,
			82159.75,
			87735.93,
			87656.59,
			84754.23,
			93145.27,
			78974.12,
			90170.03,
			87287.76,
			81593.96,
			87148.17,
			87085.68,
			81410.70,
			84153.92,
			89702.24,
			81246.20,
			86789.05,
			86739.02,
			83894.44,
			92230.24,
			81017.16,
			83761.69,
			89299.58,
			78105.88,
			83637.00,
			83598.94,
			86348.02,
			83531.96,
			91848.88,
			80697.12,
			83446.15,
			88979.41,
			83399.93,
			83375.26,
			86130.60,
			77779.52,
			86084.65,
			91623.23,
			77736.91,
			83266.71,
			88803.63,
			83248.91,
			83237.90,
			86002.59,
			85998.37,
			86795.10,
			82424.83,
			77668.95,
			83826.40,
			82855.49,
			81896.39,
			80945.26,
			80005.71,
			79073.81,
			78153.36,
			77240.46,
			76338.77,
			75442.83,
			74559.63,
			73683.80,
			72818.74,
			71960.96,
			71113.75,
			70273.75,
			69444.16,
			68621.73,
			67808.00,
			67003.18,
			66209.00,
			65368.18,
			64559.14,
			63788.68,
			63026.70,
			62274.14,
			61432.75,
			60651.23,
			59923.57,
			59202.51,
			58489.10,
			57783.75,
			57087.37,
			56397.56,
			55716.66,
			55041.04,
			54375.82,
			53717.63,
			53063.22,
			52306.64,
			51671.63,
			51044.73,
			50426.66,
			49815.62,
			49212.43,
			48618.22,
			48034.14,
			47416.90,
			46719.33,
			46158.09,
			45612.91,
			45078.92,
			44559.76,
			44056.98,
			43537.39,
			43094.25,
			42296.58,
			40729.05,
			154138.78,
			22151.18,
			21862.38,
			21622.51,
			21385.03,
			21149.90,
			20917.12,
			20686.66,
			20458.50,
			20232.61,
			20008.97,
			19787.58,
			19568.39,
			19351.40,
			19136.58,
			18923.91,
			18713.38,
			18504.96,
			18298.64,
			18094.39,
			17892.19,
			17692.04,
			17493.91,
			17297.77,
			17103.63,
			16911.45,
			16721.22,
			16532.93,
			16346.56,
			16162.09,
			15979.52,
			15798.83,
			15620.02,
			15443.07,
			15268.00,
			15094.82,
			14923.57,
			14754.38,
			14587.73,
			14354.07,
			14155.94,
			13994.55,
			13835.16,
			13653.32,
			13463.54,
			13309.28,
			13156.75,
			13004.02,
			12843.27,
			12679.01,
			12533.61,
			12390.87,
			12149.03,
			12008.62,
			11869.70,
			11732.30,
			11596.44,
			11456.12,
			11310.15,
			11178.75,
			11048.90,
			10944.29,
			10734.20,
			10596.74,
			10473.25,
			10343.73,
			10325.35,
			9965.02,
			9740.85,
			9626.76,
			9497.04,
			9316.36,
			9206.18,
			9097.19,
			8989.41,
			13367.27,
			8674.12,
			8571.57,
			8471.05,
			8289.52,
			8190.60,
			8092.76,
			7995.99,
			7900.29,
			7805.67,
			7712.15,
			7619.77,
			7528.62,
			7438.94,
			7336.11,
			7154.49,
			7068.57,
			6958.80,
			6868.54,
			6785.37,
			6703.18,
			6622.00,
			6538.74,
			6449.85,
			6365.53,
			6254.73,
			6178.50,
			6103.19,
			6028.79,
			7802.87,
			5811.50,
			5728.30,
			5651.90,
			5583.39,
			5516.05,
			5431.66,
			5345.00,
			5280.80,
			5217.82,
			5156.25,
			5096.47,
			5024.91,
			4943.33,
			4891.09,
			36115.49,
			3704.22,
			1925.53,
			1902.90,
			1880.51,
			1858.36,
			1836.47,
			1814.82,
			1793.42,
			1772.29,
			1746.40,
			1725.94,
			1700.04,
			1661.14,
			1641.44,
			1621.98,
			1602.75,
			1583.77,
			1563.01,
			1539.77,
			1521.94,
			1489.40,
			1427.43,
			1410.34,
			1393.44,
			1376.71,
			1360.16,
			1343.79,
			1327.59,
			1311.57,
			1295.72,
			1280.04,
			1264.53,
			1249.19,
			1234.02,
			1219.01,
			1204.17,
			1189.49,
			1174.99,
			1160.65,
			1146.48,
			1132.48,
			1118.67,
			1105.08,
			1090.04,
			1067.14,
			1047.24,
			1030.92,
			1018.22,
			1005.67,
			993.28,
			981.07,
			969.10,
			948.83,
			929.86,
			914.24,
			896.96,
			882.24,
			871.18,
			860.24,
			849.42,
			838.74,
			828.18,
			817.76,
			807.47,
			797.32,
			787.31,
			777.48,
			767.87,
			752.10,
			731.31,
			722.20,
			712.35,
			692.93,
			683.89,
			661.85,
			653.51,
			645.31,
			637.26,
			627.23,
			602.88,
			583.17,
			549.25,
			535.13,
			517.43,
			508.10,
			501.01,
			494.81,
			484.81,
			454.48,
			445.13,
			439.39,
			433.74,
			428.19,
			422.77,
			417.59,
			396.97,
			392.06,
			369.15,
			364.41,
			359.76,
			355.23,
			350.83,
			346.62,
			342.71,
			339.47,
			294.60,
			253.10,
			245.44,
			233.26,
			207.78,
			205.16,
			190.79,
			404.12,
			166.27,
			159.54,
			157.73,
			148.58,
			146.92,
			139.00,
			134.10,
			132.75,
			128.40,
			101.44,
			95.71,
			94.71,
			93.83,
			109.15,
			62.23,
			53.33,
			9.96,
		};

		double dblIssueAmount = Matrix.Sum (adblPrincipalPayDown);

		JulianDate dtEffective = DateUtil.CreateFromYMD (
			2017,
			DateUtil.SEPTEMBER,
			25
		);

		BondComponent bond = BondBuilder.CreateBondFromCF (
			strName,
			dtEffective,
			strCurrency,
			strName,
			strCouponDayCount,
			dblIssueAmount,
			dblCouponRate,
			iCouponFreq,
			adtPeriodEnd,
			adblCouponAmount,
			adblPrincipalPayDown,
			true
		);

		BondReplicator abr = BondReplicator.CorporateSenior (
			dblCleanPrice,
			dblIssuePrice,
			dblIssueAmount,
			dtSpot,
			astrDepositTenor,
			adblDepositQuote,
			adblFuturesQuote,
			astrFixFloatTenor,
			adblFixFloatQuote,
			dblSpreadBump,
			dblSpreadDurationMultiplier,
			strTreasuryCode,
			astrGovvieTenor,
			adblGovvieYield,
			astrCreditTenor,
			adblCreditQuote,
			dblFX,
			Double.NaN,
			iSettleLag,
			bond
		);

		BondReplicationRun abrr = abr.generateRun();

		System.out.println (abrr.display());

		double dblBalance = 1.;

		for (CompositePeriod p : bond.couponPeriods()) {
			int iEndDate = p.endDate();

			int iStartDate = p.startDate();

			double dblPrincipalPayDown = bond.notional (iStartDate) - bond.notional (iEndDate);

			double dblInterest = dblCouponRate * p.couponDCF() * bond.notional (iStartDate) * bond.couponFactor (iEndDate);

			dblBalance -= dblPrincipalPayDown;

			System.out.println (
				"\t" + new JulianDate (iEndDate) + " => " +
				FormatUtil.FormatDouble (dblPrincipalPayDown, 8, 2, dblIssueAmount) + " | " +
				FormatUtil.FormatDouble (dblInterest, 6, 2, dblIssueAmount) + " | " +
				FormatUtil.FormatDouble (dblPrincipalPayDown + dblInterest, 8, 2, dblIssueAmount) + " | " +
				FormatUtil.FormatDouble (dblBalance, 8, 2, dblIssueAmount) + " ||"
			);
		}
	}
}