/// <summary>
        /// Loads the loan object with information from a Fannie Mae set of data.
        /// </summary>
        /// <param name="fileBytes">The fannie data bytes.</param>
        protected virtual void LoadDU(byte[] fileBytes)
        {
            DUHelper du = new DUHelper(fileBytes);
            Exception invalidfiledata = new Exception("The file data is not a recognized Fannie Mae DU format.");

            #region DATA_INFORMATION

            // capture the versioning information
            int vercount = du.BeginCapture("000");
            if (vercount < 1) throw invalidfiledata;
            else
            {
                this._datainformation = new DataInformation();
                for(int i = 0; i<vercount; i++)
                {
                    MISMO.BusinessObjects.DataVersion dv = new DataVersion();
                    dv.Name = du.ExtractCaptureData(i, 4, 3);
                    if (dv.Name == "1") dv.Name = "1003";
                    dv.Number = du.ExtractCaptureData(i, 7, 5);
                    this._datainformation.DataVersions.Add(dv);
                }
            }
            du.EndCapture();

            if (vercount > 0 &&
                !(this.DataInformation.DataVersions[0].Number == "3.20" ||
                this.DataInformation.DataVersions[0].Number == "3.2")
                ) throw new NotImplementedException("Fannie Mae loader only supports 3.20 DU file formats.");

            #endregion DATA_INFORMATION

            #region MORTGAGE_TERMS

            string tempval = null;

            // extract information for the mortgage terms
            tempval = du.ExtractData("01A", 86, 30);
            if (tempval != string.Empty)
            {
                if (_mortgageterms == null) _mortgageterms = new MISMO.BusinessObjects.MortgageTerms();
                this.MortgageTerms.AgencyCaseIdentifier = tempval;
            }

            tempval = du.ExtractData("01A", 238, 80);
            if (tempval != string.Empty)
            {
                if (_mortgageterms == null) _mortgageterms = new MISMO.BusinessObjects.MortgageTerms();
                this.MortgageTerms.ARMTypeDescription = tempval;
            }

            tempval = du.ExtractData("01A", 131, 15);
            if (tempval != string.Empty)
            {
                if (_mortgageterms == null) _mortgageterms = new MISMO.BusinessObjects.MortgageTerms();
                this.MortgageTerms.BaseLoanAmount = Convert.ToDecimal(tempval);
            }

            tempval = du.ExtractData("01A", 131, 15);
            if (tempval != string.Empty)
            {
                if (_mortgageterms == null) _mortgageterms = new MISMO.BusinessObjects.MortgageTerms();
                this.MortgageTerms.BorrowerRequestedLoanAmount = Convert.ToDecimal(tempval);
            }

            tempval = du.ExtractData("01A", 116, 15);
            if (tempval != string.Empty)
            {
                if (_mortgageterms == null) _mortgageterms = new MISMO.BusinessObjects.MortgageTerms();
                this.MortgageTerms.LenderCaseIdentifier = tempval;
            }

            tempval = du.ExtractData("01A", 153, 3);
            if (tempval != string.Empty)
            {
                if (_mortgageterms == null) _mortgageterms = new MISMO.BusinessObjects.MortgageTerms();
                this.MortgageTerms.LoanAmortizationTermMonths = Convert.ToDecimal(tempval);
            }

            tempval = du.ExtractData("01A", 156, 2);
            if (tempval != string.Empty)
            {
                if (_mortgageterms == null) _mortgageterms = new MISMO.BusinessObjects.MortgageTerms();

                switch(tempval)
                {
                    case "01":
                    {
                        this.MortgageTerms.LoanAmortizationType = (short) MISMO.Enums.LoanAmortizationType.AdjustableRate;
                        break;
                    }
                    case "04":
                    {
                        this.MortgageTerms.LoanAmortizationType = (short) MISMO.Enums.LoanAmortizationType.GrowingEquityMortgage;
                        break;
                    }
                    case "05":
                    {
                        this.MortgageTerms.LoanAmortizationType = (short) MISMO.Enums.LoanAmortizationType.Fixed;
                        break;
                    }
                    case "06":
                    {
                        this.MortgageTerms.LoanAmortizationType = (short) MISMO.Enums.LoanAmortizationType.GraduatedPaymentMortgage;
                        break;
                    }
                    case "13":
                    {
                        this.MortgageTerms.LoanAmortizationType = (short) MISMO.Enums.LoanAmortizationType.OtherAmortizationType;
                        break;
                    }
                }
            }

            tempval = du.ExtractData("01A", 4, 2);
            if (tempval != string.Empty)
            {
                if (_mortgageterms == null) _mortgageterms = new MISMO.BusinessObjects.MortgageTerms();

                switch(tempval)
                {
                    case "01":
                    {
                        this.MortgageTerms.MortgageType = (short) MISMO.Enums.MortgageType.Conventional;
                        break;
                    }
                    case "02":
                    {
                        this.MortgageTerms.MortgageType = (short) MISMO.Enums.MortgageType.VA;
                        break;
                    }
                    case "03":
                    {
                        this.MortgageTerms.MortgageType = (short) MISMO.Enums.MortgageType.FHA;
                        break;
                    }
                    case "04":
                    {
                        this.MortgageTerms.MortgageType = (short) MISMO.Enums.MortgageType.FarmersHomeAdministration;
                        break;
                    }
                    case "07":
                    {
                        this.MortgageTerms.MortgageType = (short) MISMO.Enums.MortgageType.Other;
                        break;
                    }
                }
            }

            tempval = du.ExtractData("01A", 6, 80);
            if (tempval != string.Empty)
            {
                if (_mortgageterms == null) _mortgageterms = new MISMO.BusinessObjects.MortgageTerms();
                this.MortgageTerms.OtherMortgageTypeDescription= tempval;
            }

            tempval = du.ExtractData("01A", 158, 80);
            if (tempval != string.Empty)
            {
                if (_mortgageterms == null) _mortgageterms = new MISMO.BusinessObjects.MortgageTerms();
                this.MortgageTerms.OtherAmortizationTypeDescription = tempval;
            }

            tempval = du.ExtractData("01A", 146, 7);
            if (tempval != string.Empty)
            {
                if (_mortgageterms == null) _mortgageterms = new MISMO.BusinessObjects.MortgageTerms();
                this.MortgageTerms.RequestedInterestRatePercent = Convert.ToDecimal(tempval);
            }

            #endregion MORTGAGE_TERMS

            #region PROPERTY
            // now let us get PROPERTY information

            tempval = du.ExtractData("02A", 4, 50);
            if (tempval != string.Empty)
            {
                if (_prop == null) _prop = new AUS.Property();
                this.Property.StreetAddress = tempval;
            }

            tempval = du.ExtractData("02A", 54, 35);
            if (tempval != string.Empty)
            {
                if (_prop == null) _prop = new AUS.Property();
                this.Property.City = tempval;
            }

            tempval = du.ExtractData("02A", 89, 2);
            if (tempval != string.Empty)
            {
                if (_prop == null) _prop = new AUS.Property();
                this.Property.State = tempval;
            }

            tempval = du.ExtractData("GOA", 102, 35);
            if (tempval != string.Empty)
            {
                if (_prop == null) _prop = new AUS.Property();
                this.Property.County = tempval;
            }

            tempval = du.ExtractData("02A", 91, 5);
            if (tempval != string.Empty)
            {
                if (_prop == null) _prop = new AUS.Property();
                this.Property.PostalCode = tempval;
            }

            tempval = du.ExtractData("02A", 96, 4);
            if (tempval != string.Empty && _prop != null && !this.Property.PostalCodeIsNull) this.Property.PostalCode += string.Format("-{0}", tempval);

            tempval = du.ExtractData("02A", 100, 3);
            if (tempval != string.Empty)
            {
                if (_prop == null) _prop = new AUS.Property();
                this.Property.FinancedNumberOfUnits = Convert.ToInt32(tempval);
            }

            tempval = du.ExtractData("02A", 185, 4);
            if (tempval != string.Empty)
            {
                if (_prop == null) _prop = new AUS.Property();
                this.Property.StructureBuiltYear = DateTime.Parse(string.Format("12/31/{0}", tempval));
            }

            MISMO.BusinessObjects.LegalDescription legdesc = null;

            tempval = du.ExtractData("02A", 105, 80);
            if (tempval != string.Empty)
            {
                if (_prop == null) _prop = new AUS.Property();
                if (legdesc == null)
                {
                    legdesc = new MISMO.BusinessObjects.LegalDescription();
                    this.Property.LegalDescriptions.Add(legdesc);
                }
                legdesc.TextDescription = tempval;
            }

            tempval = du.ExtractData("02A", 103, 2);
            if (tempval != string.Empty)
            {
                if (_prop == null) _prop = new AUS.Property();
                if (legdesc == null)
                {
                    legdesc = new MISMO.BusinessObjects.LegalDescription();
                    this.Property.LegalDescriptions.Add(legdesc);
                }

                switch(tempval)
                {
                    case "F1":
                    {
                        legdesc.Type = (short) MISMO.Enums.LegalDescriptionType.Other;
                        break;
                    }
                    case "02":
                    {
                        legdesc.Type = (short) MISMO.Enums.LegalDescriptionType.MetesAndBounds;
                        break;
                    }
                }
            }

            #endregion PROPERTY

            #region BORROWER

            // get the borrower information
            System.Collections.Specialized.StringCollection brwssncol = new System.Collections.Specialized.StringCollection();
            int borrowercount = du.BeginCapture("03A");
            Borrower brw = null;

            if (borrowercount > 0)
            {
                for(int i = 0; i<borrowercount; i++)
                {
                    brw = new Borrower();

                    tempval = du.ExtractCaptureData(i, 15, 35);
                    if (tempval != string.Empty) brw.FirstName = tempval;

                    tempval = du.ExtractCaptureData(i, 50, 35);
                    if (tempval != string.Empty) brw.MiddleName = tempval;

                    tempval = du.ExtractCaptureData(i, 85, 35);
                    if (tempval != string.Empty) brw.LastName = tempval;

                    tempval = du.ExtractCaptureData(i, 120, 4);
                    if (tempval != string.Empty) brw.NameSuffix = tempval;

                    tempval = du.ExtractCaptureData(i, 134, 3);
                    if (tempval != string.Empty) brw.AgeAtApplicationYears = Convert.ToDecimal(tempval);

                    // TODO: revisit extracting borrower data in different captures zones
            //					tempval = du.ExtractCaptureData(i, 13, 8);
            //					if (tempval != string.Empty) brw.ApplicationSignedDate = DateTime.Parse(string.Format("{0}/{1}/{2}", tempval.Substring(4, 2), tempval.Substring(6, 2), tempval.Substring(0, 4)));

                    tempval = du.ExtractCaptureData(i, 124, 10);
                    if (tempval != string.Empty)
                    {
                        MISMO.BusinessObjects.ContactPoint cp = new ContactPoint();
                        cp.Type = (short) MISMO.Enums.ContactPointType.Phone;
                        cp.Value = tempval;
                        brw.ContactPoints.Add(cp);
                    }

                    tempval = du.ExtractCaptureData(i, 4, 2);
                    switch(tempval)
                    {
                        case "BW":
                        {
                            brw.PrintPositionType = (short) MISMO.Enums.PrintPositionType.Borrower;
                            break;
                        }
                        case "QZ":
                        {
                            brw.PrintPositionType = (short) MISMO.Enums.PrintPositionType.CoBorrower;
                            break;
                        }
                    }

                    tempval = du.ExtractCaptureData(i, 6, 9);
                    if (tempval != string.Empty) brw.SSN = tempval;

                    tempval = du.ExtractCaptureData(i, 140, 2);
                    if (tempval != string.Empty) brw.DependentCount = Convert.ToByte(tempval);

                    tempval = du.ExtractCaptureData(i, 142, 1);
                    switch(tempval)
                    {
                        case "Y":
                        {
                            brw.JointAssetLiabilityReportingType = (short) MISMO.Enums.JointAssetLiabilityReportingType.Jointly;
                            break;
                        }
                        case "N":
                        {
                            brw.JointAssetLiabilityReportingType = (short) MISMO.Enums.JointAssetLiabilityReportingType.NotJointly;
                            break;
                        }
                    }

                    tempval = du.ExtractCaptureData(i, 139, 1);
                    switch(tempval)
                    {
                        case "M":
                        {
                            brw.MaritalStatusType = (short) MISMO.Enums.MaritalStatusType.Married;
                            break;
                        }
                        case "S":
                        {
                            brw.MaritalStatusType = (short) MISMO.Enums.MaritalStatusType.Separated;
                            break;
                        }
                        case "U":
                        {
                            brw.MaritalStatusType = (short) MISMO.Enums.MaritalStatusType.Unmarried;
                            break;
                        }
                    }

                    tempval = du.ExtractCaptureData(i, 137, 2);
                    if (tempval != string.Empty) brw.SchoolingYears = Convert.ToDecimal(tempval);

                    this.Borrowers.Add(brw);
                }
            } // end of borrowers section

            #endregion BORROWER

            #region DOWN_PAYMENTS

            // extract the down payments
            int downpaymentcount = du.BeginCapture("02E");
            if (downpaymentcount > 0)
            {
                MISMO.BusinessObjects.DownPayment dp = null;
                for(int i = 0; i<downpaymentcount; i++)
                {
                    dp = new MISMO.BusinessObjects.DownPayment();
                    tempval = du.ExtractCaptureData(i, 6, 15);
                    if (tempval != string.Empty) dp.Amount = Convert.ToDecimal(tempval);

                    tempval = du.ExtractCaptureData(i, 21, 80);
                    if (tempval != string.Empty) dp.SourceDescription = tempval;

                    tempval = du.ExtractCaptureData(i, 4, 2);
                    switch(tempval)
                    {
                        case "F1":
                        {
                            dp.Type = (short) MISMO.Enums.DownPaymentType.CheckingSavings;
                            break;
                        }
                        case "F2":
                        {
                            dp.Type = (short) MISMO.Enums.DownPaymentType.DepositOnSalesContract;
                            break;
                        }
                        case "F3":
                        {
                            dp.Type = (short) MISMO.Enums.DownPaymentType.EquityOnSoldProperty;
                            break;
                        }
                        case "03":
                        {
                            dp.Type = (short) MISMO.Enums.DownPaymentType.EquityOnPendingSale;
                            break;
                        }
                        case "04":
                        {
                            dp.Type = (short) MISMO.Enums.DownPaymentType.GiftFunds;
                            break;
                        }
                        case "F5":
                        {
                            dp.Type = (short) MISMO.Enums.DownPaymentType.StocksAndBonds;
                            break;
                        }
                        case "10":
                        {
                            dp.Type = (short) MISMO.Enums.DownPaymentType.LotEquity;
                            break;
                        }
                        case "09":
                        {
                            dp.Type = (short) MISMO.Enums.DownPaymentType.BridgeLoan;
                            break;
                        }
                        case "01":
                        {
                            dp.Type = (short) MISMO.Enums.DownPaymentType.UnsecuredBorrowedFunds;
                            break;
                        }
                        case "F6":
                        {
                            dp.Type = (short) MISMO.Enums.DownPaymentType.TrustFunds;
                            break;
                        }
                        case "F7":
                        {
                            dp.Type = (short) MISMO.Enums.DownPaymentType.RetirementFunds;
                            break;
                        }
                        case "11":
                        {
                            dp.Type = (short) MISMO.Enums.DownPaymentType.RentWithOptionToPurchase;
                            break;
                        }
                        case "F8":
                        {
                            dp.Type = (short) MISMO.Enums.DownPaymentType.LifeInsuranceCashValue;
                            break;
                        }
                        case "14":
                        {
                            dp.Type = (short) MISMO.Enums.DownPaymentType.SaleOfChattel;
                            break;
                        }
                        case "07":
                        {
                            dp.Type = (short) MISMO.Enums.DownPaymentType.TradeEquity;
                            break;
                        }
                        case "06":
                        {
                            dp.Type = (short) MISMO.Enums.DownPaymentType.SweatEquity;
                            break;
                        }
                        case "02":
                        {
                            dp.Type = (short) MISMO.Enums.DownPaymentType.CashOnHand;
                            break;
                        }
                        case "13":
                        {
                            dp.Type = (short) MISMO.Enums.DownPaymentType.OtherTypeOfDownPayment;
                            break;
                        }
                        case "28":
                        {
                            dp.Type = (short) MISMO.Enums.DownPaymentType.SecuredBorrowedFunds;
                            break;
                        }
                    }

                    this.DownPayments.Add(dp);
                }
            } // end of downpaymentcount

            #endregion DOWN_PAYMENTS

            #region ADDITIONAL_CASE_DATA.MORTGAGE_SCORE

            int mortgagescores = du.BeginCapture("SCA");
            if (mortgagescores > 0)
            {
                if (_additionalcasedata == null)
                    _additionalcasedata = new AdditionalCaseData();

                MISMO.BusinessObjects.MortgageScore mtgscore = null;

                for(int i = 0; i<mortgagescores; i++)
                {
                    mtgscore = new MISMO.BusinessObjects.MortgageScore();

                    tempval = du.ExtractCaptureData(i, 10, 8);
                    if (tempval != string.Empty) mtgscore.Date = du.ToDate(tempval);

                    tempval = du.ExtractCaptureData(i, 4, 3);
                    switch(tempval)
                    {
                        case "001":
                        {
                            mtgscore.Type = (short) MISMO.Enums.MortgageScoreType.PMIAuraAQIScore;
                            break;
                        }
                        case "002":
                        {
                            mtgscore.Type = (short) MISMO.Enums.MortgageScoreType.GE_IQScore;
                            break;
                        }
                        case "003":
                        {
                            mtgscore.Type = (short) MISMO.Enums.MortgageScoreType.UGIAccuscore;
                            break;
                        }
                    }

                    tempval = du.ExtractCaptureData(i, 7, 3);
                    if (tempval != string.Empty) mtgscore.Value = tempval;

                    _additionalcasedata.MortgageScores.Add(mtgscore);
                }
            } // end of mortgagescores

            #endregion ADDITIONAL_CASE_DATA.MORTGAGE_SCORE

            #region ADDITIONAL_CASE_DATA.TRANSMITTAL_DATA

            tempval = du.ExtractData("99B", 22, 7);
            if (tempval != string.Empty)
            {
                if (_additionalcasedata == null) _additionalcasedata = new AUS.AdditionalCaseData();
                if (_additionalcasedata._transmitdata == null) _additionalcasedata._transmitdata = new BusinessObjects.TransmittalData();
                this.AdditionalCaseData.TransmittalData.BuydownRatePercent = Convert.ToDecimal(tempval);
            }

            tempval = du.ExtractData("99B", 5, 2);
            if (tempval != string.Empty)
            {
                if (_additionalcasedata == null) _additionalcasedata = new AUS.AdditionalCaseData();
                if (_additionalcasedata._transmitdata == null) _additionalcasedata._transmitdata = new BusinessObjects.TransmittalData();
                switch(tempval)
                {
                    case "01":
                    {
                        this.AdditionalCaseData.TransmittalData.CurrentFirstMortgageHolderType = (short) MISMO.Enums.MortgageHolderType.FNM;
                        break;
                    }
                    case "02":
                    {
                        this.AdditionalCaseData.TransmittalData.CurrentFirstMortgageHolderType = (short) MISMO.Enums.MortgageHolderType.FRE;
                        break;
                    }
                    case "03":
                    {
                        this.AdditionalCaseData.TransmittalData.CurrentFirstMortgageHolderType = (short) MISMO.Enums.MortgageHolderType.Other;
                        break;
                    }
                    case "F1":
                    {
                        this.AdditionalCaseData.TransmittalData.CurrentFirstMortgageHolderType = (short) MISMO.Enums.MortgageHolderType.Unknown;
                        break;
                    }
                }
            }

            tempval = du.ExtractData("99B", 7, 15);
            if (tempval != string.Empty)
            {
                if (_additionalcasedata == null) _additionalcasedata = new AUS.AdditionalCaseData();
                if (_additionalcasedata._transmitdata == null) _additionalcasedata._transmitdata = new BusinessObjects.TransmittalData();
                this.AdditionalCaseData.TransmittalData.PropertyAppraisedValueAmount = Convert.ToDecimal(tempval);
            }

            #endregion ADDITIONAL_CASE_DATA.TRANSMITTAL_DATA

            #region LOAN_PURPOSE

            tempval = du.ExtractData("02B", 89, 60);
            if (tempval != string.Empty)
            {
                if (_purpose == null) _purpose = new AUS.LoanPurpose();
                this.Purpose.GSETitleMannerHeldDescription = tempval;
            }

            tempval = du.ExtractData("02B", 6, 2);
            if (tempval != string.Empty)
            {
                if (_purpose == null) _purpose = new AUS.LoanPurpose();
                switch(tempval)
                {
                    case "04":
                    {
                        this.Purpose.Type = (short) MISMO.Enums.LoanPurposeType.ConstructionOnly;
                        break;
                    }
                    case "05":
                    {
                        this.Purpose.Type = (short) MISMO.Enums.LoanPurposeType.Refinance;
                        break;
                    }
                    case "13":
                    {
                        this.Purpose.Type = (short) MISMO.Enums.LoanPurposeType.ConstructionToPermanent;
                        break;
                    }
                    case "15":
                    {
                        this.Purpose.Type = (short) MISMO.Enums.LoanPurposeType.Other;
                        break;
                    }
                    case "16":
                    {
                        this.Purpose.Type = (short) MISMO.Enums.LoanPurposeType.Purchase;
                        break;
                    }
                }
            }

            tempval = du.ExtractData("02B", 8, 80);
            if (tempval != string.Empty)
            {
                if (_purpose == null) _purpose = new AUS.LoanPurpose();
                this.Purpose.OtherLoanPurposeDescription = tempval;
            }

            tempval = du.ExtractData("02B", 150, 8);
            if (tempval != string.Empty)
            {
                if (_purpose == null) _purpose = new AUS.LoanPurpose();
                this.Purpose.PropertyLeaseholdExpirationDate = du.ToDate(tempval);
            }

            tempval = du.ExtractData("02B", 149, 1);
            if (tempval != string.Empty)
            {
                if (_purpose == null) _purpose = new AUS.LoanPurpose();
                switch(tempval)
                {
                    case "1":
                    {
                        this.Purpose.PropertyRightsType = (short) MISMO.Enums.PropertyRightsType.FeeSimple;
                        break;
                    }
                    case "2":
                    {
                        this.Purpose.PropertyRightsType = (short) MISMO.Enums.PropertyRightsType.Leasehold;
                        break;
                    }
                }
            }

            tempval = du.ExtractData("02B", 88, 1);
            if (tempval != string.Empty)
            {
                if (_purpose == null) _purpose = new AUS.LoanPurpose();
                switch(tempval)
                {
                    case "1":
                    {
                        this.Purpose.PropertyUsageType = (short) MISMO.Enums.PropertyUsageType.PrimaryResidence;
                        break;
                    }
                    case "2":
                    {
                        this.Purpose.PropertyUsageType = (short) MISMO.Enums.PropertyUsageType.SecondHome;
                        break;
                    }
                    case "D":
                    {
                        this.Purpose.PropertyUsageType = (short) MISMO.Enums.PropertyUsageType.Investor;
                        break;
                    }
                }
            }

            #endregion LOAN_PURPOSE

            #region LOAN_PURPOSE.CONSTRUCTION_REFINANCE_DATA

            // load up the construction refi data
            tempval = du.ExtractData("02D", 53, 15);
            if (tempval != string.Empty)
            {
                if (_purpose == null) _purpose = new AUS.LoanPurpose();
                if (_purpose._consrefidata == null) _purpose._consrefidata = new BusinessObjects.ConstructionRefinanceData();
                this.Purpose.ConstructionRefinanceData.ConstructionImprovementCostsAmount = Convert.ToDecimal(tempval);
            }

            tempval = du.ExtractData("02D", 68, 2);
            if (tempval != string.Empty)
            {
                if (_purpose == null) _purpose = new AUS.LoanPurpose();
                if (_purpose._consrefidata == null) _purpose._consrefidata = new BusinessObjects.ConstructionRefinanceData();
                switch(tempval)
                {
                    case "F1":
                    {
                        this.Purpose.ConstructionRefinanceData.GSERefinancePurposeType = (short) MISMO.Enums.GSERefinancePurposeType.NoCashOutOther;
                        break;
                    }
                    case "01":
                    {
                        this.Purpose.ConstructionRefinanceData.GSERefinancePurposeType = (short) MISMO.Enums.GSERefinancePurposeType.CashOutOther;
                        break;
                    }
                    case "04":
                    {
                        this.Purpose.ConstructionRefinanceData.GSERefinancePurposeType = (short) MISMO.Enums.GSERefinancePurposeType.CashOutHomeImprovement;
                        break;
                    }
                    case "11":
                    {
                        this.Purpose.ConstructionRefinanceData.GSERefinancePurposeType = (short) MISMO.Enums.GSERefinancePurposeType.CashOutDebtConsolidation;
                        break;
                    }
                    case "13":
                    {
                        this.Purpose.ConstructionRefinanceData.GSERefinancePurposeType = (short) MISMO.Enums.GSERefinancePurposeType.CashOutLimited;
                        break;
                    }
                }
            }

            tempval = du.ExtractData("02D", 38, 15);
            if (tempval != string.Empty)
            {
                if (_purpose == null) _purpose = new AUS.LoanPurpose();
                if (_purpose._consrefidata == null) _purpose._consrefidata = new BusinessObjects.ConstructionRefinanceData();
                this.Purpose.ConstructionRefinanceData.LandEstimatedValueAmount = Convert.ToDecimal(tempval);
            }

            tempval = du.ExtractData("02D", 8, 15);
            if (tempval != string.Empty)
            {
                if (_purpose == null) _purpose = new AUS.LoanPurpose();
                if (_purpose._consrefidata == null) _purpose._consrefidata = new BusinessObjects.ConstructionRefinanceData();
                this.Purpose.ConstructionRefinanceData.LandOriginalCostAmount = Convert.ToDecimal(tempval);
            }

            tempval = du.ExtractData("02D", 4, 4);
            if (tempval != string.Empty)
            {
                if (_purpose == null) _purpose = new AUS.LoanPurpose();
                if (_purpose._consrefidata == null) _purpose._consrefidata = new BusinessObjects.ConstructionRefinanceData();
                this.Purpose.ConstructionRefinanceData.PropertyAcquiredYear = du.ToDate(tempval);
            }

            tempval = du.ExtractData("02D", 23, 15);
            if (tempval != string.Empty)
            {
                if (_purpose == null) _purpose = new AUS.LoanPurpose();
                if (_purpose._consrefidata == null) _purpose._consrefidata = new BusinessObjects.ConstructionRefinanceData();
                this.Purpose.ConstructionRefinanceData.PropertyExistingLienAmount = Convert.ToDecimal(tempval);
            }

            tempval = du.ExtractData("02D", 8, 15);
            if (tempval != string.Empty)
            {
                if (_purpose == null) _purpose = new AUS.LoanPurpose();
                if (_purpose._consrefidata == null) _purpose._consrefidata = new BusinessObjects.ConstructionRefinanceData();
                this.Purpose.ConstructionRefinanceData.PropertyOriginalCostAmount = Convert.ToDecimal(tempval);
            }

            tempval = du.ExtractData("02D", 151, 15);
            if (tempval != string.Empty)
            {
                if (_purpose == null) _purpose = new AUS.LoanPurpose();
                if (_purpose._consrefidata == null) _purpose._consrefidata = new BusinessObjects.ConstructionRefinanceData();
                this.Purpose.ConstructionRefinanceData.RefinanceImprovementCostsAmount = Convert.ToDecimal(tempval);
            }

            tempval = du.ExtractData("02D", 151, 15);
            if (tempval != string.Empty)
            {
                if (_purpose == null) _purpose = new AUS.LoanPurpose();
                if (_purpose._consrefidata == null) _purpose._consrefidata = new BusinessObjects.ConstructionRefinanceData();
                switch(tempval)
                {
                    case "Y":
                    {
                        this.Purpose.ConstructionRefinanceData.RefinanceImprovementsType = (short) MISMO.Enums.RefinanceImprovementsType.Made;
                        break;
                    }
                    case "N":
                    {
                        this.Purpose.ConstructionRefinanceData.RefinanceImprovementsType = (short) MISMO.Enums.RefinanceImprovementsType.ToBeMade;
                        break;
                    }
                    case "U":
                    {
                        this.Purpose.ConstructionRefinanceData.RefinanceImprovementsType = (short) MISMO.Enums.RefinanceImprovementsType.Unknown;
                        break;
                    }
                }
            }

            tempval = du.ExtractData("02D", 70, 80);
            if (tempval != string.Empty)
            {
                if (_purpose == null) _purpose = new AUS.LoanPurpose();
                if (_purpose._consrefidata == null) _purpose._consrefidata = new BusinessObjects.ConstructionRefinanceData();
                this.Purpose.ConstructionRefinanceData.RefinanceProposedImprovementsDescription = tempval;
            }

            #endregion LOAN_PURPOSE.CONSTRUCTION_REFINANCE_DATA

            #region LOAN_PRODUCT_DATA.LOAN_FEATURES
            // load the product data

            tempval = du.ExtractData("PCH", 7, 1);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._loanfeatures == null) _loanproductdata._loanfeatures = new BusinessObjects.LoanFeatures();
                this.ProductData.LoanFeatures.AssumabilityIndicator = (tempval == "Y");
            }

            tempval = du.ExtractData("LNC", 25, 1);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._loanfeatures == null) _loanproductdata._loanfeatures = new BusinessObjects.LoanFeatures();
                this.ProductData.LoanFeatures.BalloonIndicator = (tempval == "Y");
            }

            tempval = du.ExtractData("PCH", 4, 3);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._loanfeatures == null) _loanproductdata._loanfeatures = new BusinessObjects.LoanFeatures();
                this.ProductData.LoanFeatures.BalloonLoanMaturityTermMonths = Convert.ToDecimal(tempval);
            }

            tempval = du.ExtractData("LNC", 28, 1);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._loanfeatures == null) _loanproductdata._loanfeatures = new BusinessObjects.LoanFeatures();
                this.ProductData.LoanFeatures.CounselingConfirmationIndicator = (tempval == "Y");
            }

            // TODO: DownPaymentOptionType??
            //			tempval = du.ExtractData("LNC", 28, 1);
            //			if (tempval != string.Empty)
            //			{
            //				if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
            //				if (_loanproductdata._loanfeatures == null) _loanproductdata._loanfeatures = new BusinessObjects.LoanFeature();
            //				switch(tempval)
            //				{
            //					case "":
            //					{
            //						this.ProductData.LoanFeatures.d = (tempval == "Y");
            //						break;
            //					}
            //				}
            //			}

            tempval = du.ExtractData("LNC", 58, 1);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._loanfeatures == null) _loanproductdata._loanfeatures = new BusinessObjects.LoanFeatures();
                this.ProductData.LoanFeatures.EscrowWaiverIndicator = (tempval == "Y");
            }

            tempval = du.ExtractData("LNC", 6, 2);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._loanfeatures == null) _loanproductdata._loanfeatures = new BusinessObjects.LoanFeatures();
                switch(tempval)
                {
                    case "01":
                    {
                        this.ProductData.LoanFeatures.GSEPropertyType = (short) MISMO.Enums.GSEPropertyType.Detached;
                        break;
                    }
                    case "02":
                    {
                        this.ProductData.LoanFeatures.GSEPropertyType = (short) MISMO.Enums.GSEPropertyType.Attached;
                        break;
                    }
                    case "03":
                    {
                        this.ProductData.LoanFeatures.GSEPropertyType = (short) MISMO.Enums.GSEPropertyType.Condominium;
                        break;
                    }
                    case "04":
                    {
                        this.ProductData.LoanFeatures.GSEPropertyType = (short) MISMO.Enums.GSEPropertyType.PUD;
                        break;
                    }
                    case "05":
                    {
                        this.ProductData.LoanFeatures.GSEPropertyType = (short) MISMO.Enums.GSEPropertyType.Cooperative;
                        break;
                    }
                    case "07":
                    {
                        this.ProductData.LoanFeatures.GSEPropertyType = (short) MISMO.Enums.GSEPropertyType.HighRiseCondominium;
                        break;
                    }
                    case "08":
                    {
                        this.ProductData.LoanFeatures.GSEPropertyType = (short) MISMO.Enums.GSEPropertyType.ManufacturedHousing;
                        break;
                    }
                    case "09":
                    {
                        this.ProductData.LoanFeatures.GSEPropertyType = (short) MISMO.Enums.GSEPropertyType.DetachedCondominium;
                        break;
                    }
                    case "10":
                    {
                        this.ProductData.LoanFeatures.GSEPropertyType = (short) MISMO.Enums.GSEPropertyType.ManufacturedHomeCondominiumOrPUDOrCooperative;
                        break;
                    }
                }
            }

            tempval = du.ExtractData("LNC", 4, 1);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._loanfeatures == null) _loanproductdata._loanfeatures = new BusinessObjects.LoanFeatures();
                switch(tempval)
                {
                    case "1":
                    {
                        this.ProductData.LoanFeatures.LienPriorityType = (short) MISMO.Enums.LienPriorityType.FirstLien;
                        break;
                    }
                    case "2":
                    {
                        this.ProductData.LoanFeatures.LienPriorityType = (short) MISMO.Enums.LienPriorityType.SecondLien;
                        break;
                    }
                    case "F":
                    {
                        this.ProductData.LoanFeatures.LienPriorityType = (short) MISMO.Enums.LienPriorityType.Other;
                        break;
                    }
                }
            }

            tempval = du.ExtractData("LNC", 5, 1);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._loanfeatures == null) _loanproductdata._loanfeatures = new BusinessObjects.LoanFeatures();
                switch(tempval)
                {
                    case "A":
                    {
                        this.ProductData.LoanFeatures.LoanDocumentationType = (short) MISMO.Enums.LoanDocumentationType.Alternative;
                        break;
                    }
                    case "F":
                    {
                        this.ProductData.LoanFeatures.LoanDocumentationType = (short) MISMO.Enums.LoanDocumentationType.FullDocumentation;
                        break;
                    }
                    case "R":
                    {
                        this.ProductData.LoanFeatures.LoanDocumentationType = (short) MISMO.Enums.LoanDocumentationType.Reduced;
                        break;
                    }
                    case "B":
                    {
                        this.ProductData.LoanFeatures.LoanDocumentationType = (short) MISMO.Enums.LoanDocumentationType.StreamlineRefinance;
                        break;
                    }
                    case "C":
                    {
                        this.ProductData.LoanFeatures.LoanDocumentationType = (short) MISMO.Enums.LoanDocumentationType.NoDocumentation;
                        break;
                    }
                    case "D":
                    {
                        this.ProductData.LoanFeatures.LoanDocumentationType = (short) MISMO.Enums.LoanDocumentationType.NoRatio;
                        break;
                    }
                    // TODO try to verify mapping???
            //					case "E":
            //					{
            //						this.ProductData.LoanFeatures.LoanDocumentationType = (short) MISMO.Enums.LoanDocumentationType.;
            //						break;
            //					}
                    case "U":
                    {
                        this.ProductData.LoanFeatures.LoanDocumentationType = (short) MISMO.Enums.LoanDocumentationType.NoIncomeNoEmploymentNoAssetsOn1003;
                        break;
                    }
            //					case "G":
            //					{
            //						this.ProductData.LoanFeatures.LoanDocumentationType = (short) MISMO.Enums.LoanDocumentationType.no;
            //						break;
            //					}
                    case "J":
                    {
                        this.ProductData.LoanFeatures.LoanDocumentationType = (short) MISMO.Enums.LoanDocumentationType.NoIncomeOn1003;
                        break;
                    }
                    case "K":
                    {
                        this.ProductData.LoanFeatures.LoanDocumentationType = (short) MISMO.Enums.LoanDocumentationType.NoVerificationOfStatedIncomeEmploymentOrAssets;
                        break;
                    }
                    case "L":
                    {
                        this.ProductData.LoanFeatures.LoanDocumentationType = (short) MISMO.Enums.LoanDocumentationType.NoVerificationOfStatedIncomeOrAssests;
                        break;
                    }
                    case "M":
                    {
                        this.ProductData.LoanFeatures.LoanDocumentationType = (short) MISMO.Enums.LoanDocumentationType.NoVerificationOfStatedAssets;
                        break;
                    }
                    case "N":
                    {
                        this.ProductData.LoanFeatures.LoanDocumentationType = (short) MISMO.Enums.LoanDocumentationType.NoVerificationOfStatedIncomeOrEmployment;
                        break;
                    }
                    case "O":
                    {
                        this.ProductData.LoanFeatures.LoanDocumentationType = (short) MISMO.Enums.LoanDocumentationType.NoVerificationOfStatedIncome;
                        break;
                    }
                    case "P":
                    {
                        this.ProductData.LoanFeatures.LoanDocumentationType = (short) MISMO.Enums.LoanDocumentationType.VerbalVerificationOfEmployment;
                        break;
                    }
                    case "Q":
                    {
                        this.ProductData.LoanFeatures.LoanDocumentationType = (short) MISMO.Enums.LoanDocumentationType.OnePaystub;
                        break;
                    }
                    case "S":
                    {
                        this.ProductData.LoanFeatures.LoanDocumentationType = (short) MISMO.Enums.LoanDocumentationType.OnePaystubAndVerbalVerificationOfEmployment;
                        break;
                    }
                    case "T":
                    {
                        this.ProductData.LoanFeatures.LoanDocumentationType = (short) MISMO.Enums.LoanDocumentationType.OnePaystubAndOneW2AndVerbalVerificationOfEmploymentOrOneYear1040;
                        break;
                    }
                }
            } // end of loan documentation type

            tempval = du.ExtractData("PCH", 12, 2);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._loanfeatures == null) _loanproductdata._loanfeatures = new BusinessObjects.LoanFeatures();
                switch(tempval)
                {
                    case "N":
                    {
                        this.ProductData.LoanFeatures.LoanRepaymentType = (short) MISMO.Enums.LoanRepaymentType.NoNegativeAmortization;
                        break;
                    }
                    case "F1":
                    {
                        this.ProductData.LoanFeatures.LoanRepaymentType = (short) MISMO.Enums.LoanRepaymentType.ScheduledAmortization;
                        break;
                    }
                    case "F2":
                    {
                        this.ProductData.LoanFeatures.LoanRepaymentType = (short) MISMO.Enums.LoanRepaymentType.InterestOnly;
                        break;
                    }
                    case "P":
                    {
                        this.ProductData.LoanFeatures.LoanRepaymentType = (short) MISMO.Enums.LoanRepaymentType.PotentialNegativeAmortization;
                        break;
                    }
                    case "S":
                    {
                        this.ProductData.LoanFeatures.LoanRepaymentType = (short) MISMO.Enums.LoanRepaymentType.ScheduledNegativeAmortization;
                        break;
                    }
                }
            }

            tempval = du.ExtractData("LNC", 59, 8);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._loanfeatures == null) _loanproductdata._loanfeatures = new BusinessObjects.LoanFeatures();
                this.ProductData.LoanFeatures.LoanScheduledClosingDate = du.ToDate(tempval);
            }

            tempval = du.ExtractData("LNC", 75, 7);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._loanfeatures == null) _loanproductdata._loanfeatures = new BusinessObjects.LoanFeatures();
                this.ProductData.LoanFeatures.MICoveragePercent = Convert.ToDecimal(tempval);
            }

            tempval = du.ExtractData("LNC", 82, 3);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._loanfeatures == null) _loanproductdata._loanfeatures = new BusinessObjects.LoanFeatures();
                switch(tempval)
                {
                    case "001":
                    {
                        this.ProductData.LoanFeatures.MICompanyNameType = (short) MISMO.Enums.MICompanyNameType.GECapitalMICorporation;
                        break;
                    }
                    case "006":
                    {
                        this.ProductData.LoanFeatures.MICompanyNameType = (short) MISMO.Enums.MICompanyNameType.MortgageGuarantyInsuranceCorporation;
                        break;
                    }
                    case "011":
                    {
                        this.ProductData.LoanFeatures.MICompanyNameType = (short) MISMO.Enums.MICompanyNameType.PMI_MICorporation;
                        break;
                    }
                    case "012":
                    {
                        this.ProductData.LoanFeatures.MICompanyNameType = (short) MISMO.Enums.MICompanyNameType.UnitedGuarantyCorporation;
                        break;
                    }
                    case "013":
                    {
                        this.ProductData.LoanFeatures.MICompanyNameType = (short) MISMO.Enums.MICompanyNameType.RepublicMICompany;
                        break;
                    }
                    case "017":
                    {
                        this.ProductData.LoanFeatures.MICompanyNameType = (short) MISMO.Enums.MICompanyNameType.RadianGuarantyIncorporated;
                        break;
                    }
                    case "024":
                    {
                        this.ProductData.LoanFeatures.MICompanyNameType = (short) MISMO.Enums.MICompanyNameType.TriadGuarantyInsuranceCorporation;
                        break;
                    }
                    case "038":
                    {
                        this.ProductData.LoanFeatures.MICompanyNameType = (short) MISMO.Enums.MICompanyNameType.CMG_MICompany;
                        break;
                    }
                }
            }

            tempval = du.ExtractData("LNC", 18, 7);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._loanfeatures == null) _loanproductdata._loanfeatures = new BusinessObjects.LoanFeatures();
                this.ProductData.LoanFeatures.NegativeAmortizationLimitPercent = Convert.ToDecimal(tempval);
            }

            tempval = du.ExtractData("PCH", 8, 2);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._loanfeatures == null) _loanproductdata._loanfeatures = new BusinessObjects.LoanFeatures();
                switch(tempval)
                {
                    case "01":
                    {
                        this.ProductData.LoanFeatures.PaymentFrequencyType = (short) MISMO.Enums.PaymentFrequencyType.Monthly;
                        break;
                    }
                    case "02":
                    {
                        this.ProductData.LoanFeatures.PaymentFrequencyType = (short) MISMO.Enums.PaymentFrequencyType.Biweekly;
                        break;
                    }
                }
            }

            tempval = du.ExtractData("PCH", 10, 1);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._loanfeatures == null) _loanproductdata._loanfeatures = new BusinessObjects.LoanFeatures();
                this.ProductData.LoanFeatures.PrepaymentPenaltyIndicator = (tempval == "Y");
            }

            tempval = du.ExtractData("PCH", 11, 1);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._loanfeatures == null) _loanproductdata._loanfeatures = new BusinessObjects.LoanFeatures();
                this.ProductData.LoanFeatures.PrepaymentRestrictionIndicator = (tempval == "Y");
            }

            tempval = du.ExtractData("PID", 4, 30);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._loanfeatures == null) _loanproductdata._loanfeatures = new BusinessObjects.LoanFeatures();
                this.ProductData.LoanFeatures.ProductDescription = tempval;
            }

            tempval = du.ExtractData("PID", 34, 15);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._loanfeatures == null) _loanproductdata._loanfeatures = new BusinessObjects.LoanFeatures();
                this.ProductData.LoanFeatures.ProductName = tempval;
            }

            tempval = du.ExtractData("LNC", 67, 8);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._loanfeatures == null) _loanproductdata._loanfeatures = new BusinessObjects.LoanFeatures();
                this.ProductData.LoanFeatures.ScheduledFirstPaymentDate = du.ToDate(tempval);
            }

            #endregion LOAN_PRODUCT_DATA.LOAN_FEATURES

            #region TRANSACTION_DETAIL

            tempval = du.ExtractData("07A", 19, 15);
            if (tempval != string.Empty)
            {
                if (_transdetail == null) _transdetail = new AUS.TransactionDetail();
                this.TransactionDetail.AlterationsImprovementsAndRepairsAmount = Convert.ToDecimal(tempval);
            }

            tempval = du.ExtractData("07A", 109, 15);
            if (tempval != string.Empty)
            {
                if (_transdetail == null) _transdetail = new AUS.TransactionDetail();
                this.TransactionDetail.BorrowerPaidDiscountPointsTotalAmount = Convert.ToDecimal(tempval);
            }

            tempval = du.ExtractData("07A", 79, 15);
            if (tempval != string.Empty)
            {
                if (_transdetail == null) _transdetail = new AUS.TransactionDetail();
                this.TransactionDetail.EstimatedClosingCostsAmount = Convert.ToDecimal(tempval);
            }

            tempval = du.ExtractData("07A", 154, 15);
            if (tempval != string.Empty)
            {
                if (_transdetail == null) _transdetail = new AUS.TransactionDetail();
                this.TransactionDetail.MIAndFundingFeeFinancedAmount = Convert.ToDecimal(tempval);
            }

            tempval = du.ExtractData("07A", 94, 15);
            if (tempval != string.Empty)
            {
                if (_transdetail == null) _transdetail = new AUS.TransactionDetail();
                this.TransactionDetail.MIAndFundingFeeTotalAmount = Convert.ToDecimal(tempval);
            }

            tempval = du.ExtractData("07A", 64, 15);
            if (tempval != string.Empty)
            {
                if (_transdetail == null) _transdetail = new AUS.TransactionDetail();
                this.TransactionDetail.PrepaidItemsEstimatedAmount = Convert.ToDecimal(tempval);
            }

            tempval = du.ExtractData("07A", 4, 15);
            if (tempval != string.Empty)
            {
                if (_transdetail == null) _transdetail = new AUS.TransactionDetail();
                this.TransactionDetail.PurchasePriceAmount = Convert.ToDecimal(tempval);
            }

            tempval = du.ExtractData("07A", 49, 15);
            if (tempval != string.Empty)
            {
                if (_transdetail == null) _transdetail = new AUS.TransactionDetail();
                this.TransactionDetail.RefinanceIncludingDebtsToBePaidOffAmount = Convert.ToDecimal(tempval);
            }

            tempval = du.ExtractData("GOA", 20, 15);
            if (tempval != string.Empty)
            {
                if (_transdetail == null) _transdetail = new AUS.TransactionDetail();
                this.TransactionDetail.SalesConcessionAmount = Convert.ToDecimal(tempval);
            }

            tempval = du.ExtractData("07A", 139, 15);
            if (tempval != string.Empty)
            {
                if (_transdetail == null) _transdetail = new AUS.TransactionDetail();
                this.TransactionDetail.SellerPaidClosingCostsAmount = Convert.ToDecimal(tempval);
            }

            tempval = du.ExtractData("07A", 124, 15);
            if (tempval != string.Empty)
            {
                if (_transdetail == null) _transdetail = new AUS.TransactionDetail();
                this.TransactionDetail.SubordinateLienAmount = Convert.ToDecimal(tempval);
            }

            #endregion TRANSACTION_DETAIL

            #region LOAN_PRODUCT_DATA.ARM

            tempval = du.ExtractData("ARM", 4, 7);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._arm == null) _loanproductdata._arm = new BusinessObjects.ARM();
                this.ProductData.ARM.IndexCurrentValuePercent = Convert.ToDecimal(tempval) / 100;
            }

            tempval = du.ExtractData("ARM", 13, 7);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._arm == null) _loanproductdata._arm = new BusinessObjects.ARM();
                this.ProductData.ARM.IndexMarginPercent = Convert.ToDecimal(tempval) / 100;
            }

            tempval = du.ExtractData("ARM", 11, 2);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._arm == null) _loanproductdata._arm = new BusinessObjects.ARM();
                switch(tempval)
                {
                    case "0":
                    {
                        _loanproductdata._arm.IndexType = (short) MISMO.Enums.ARMIndexType.WeeklyAverageConstantMaturingTreasury;
                        break;
                    }
                    case "1":
                    {
                        _loanproductdata._arm.IndexType = (short) MISMO.Enums.ARMIndexType.MonthlyAverageConstantMaturingTreasury;
                        break;
                    }
                    case "2":
                    {
                        _loanproductdata._arm.IndexType = (short) MISMO.Enums.ARMIndexType.WeeklyAverageTreasuryAuctionAverageInvestmentYield;
                        break;
                    }
                    case "3":
                    {
                        _loanproductdata._arm.IndexType = (short) MISMO.Enums.ARMIndexType.WeeklyAverageTreasuryAuctionAverageBondDiscountYield;
                        break;
                    }
                    case "4":
                    {
                        _loanproductdata._arm.IndexType = (short) MISMO.Enums.ARMIndexType.WeeklyAverageSecondaryMarketTreasuryBillInvestmentYield;
                        break;
                    }
                    case "5":
                    {
                        _loanproductdata._arm.IndexType = (short) MISMO.Enums.ARMIndexType.DailyCertificateOfDepositRate;
                        break;
                    }
                    case "6":
                    {
                        _loanproductdata._arm.IndexType = (short) MISMO.Enums.ARMIndexType.WeeklyAverageCertificateOfDepositRate;
                        break;
                    }
                    case "7":
                    {
                        _loanproductdata._arm.IndexType = (short) MISMO.Enums.ARMIndexType.WeeklyAveragePrimeRate;
                        break;
                    }
                    case "8":
                    {
                        _loanproductdata._arm.IndexType = (short) MISMO.Enums.ARMIndexType.TreasuryBillDailyValue;
                        break;
                    }
                    case "9":
                    {
                        _loanproductdata._arm.IndexType = (short) MISMO.Enums.ARMIndexType.EleventhDistrictCostOfFunds;
                        break;
                    }
                    case "10":
                    {
                        _loanproductdata._arm.IndexType = (short) MISMO.Enums.ARMIndexType.NationalMonthlyMedianCostOfFunds;
                        break;
                    }
                    case "11":
                    {
                        _loanproductdata._arm.IndexType = (short) MISMO.Enums.ARMIndexType.WallStreetJournalLIBOR;
                        break;
                    }
                    case "12":
                    {
                        _loanproductdata._arm.IndexType = (short) MISMO.Enums.ARMIndexType.FNM_LIBOR;
                        break;
                    }
                    case "13":
                    {
                        _loanproductdata._arm.IndexType = (short) MISMO.Enums.ARMIndexType.FRE_LIBOR;
                        break;
                    }
                    case "14":
                    {
                        _loanproductdata._arm.IndexType = (short) MISMO.Enums.ARMIndexType.NationalAverageContractRateFHLBB;
                        break;
                    }
                    case "15":
                    {
                        _loanproductdata._arm.IndexType = (short) MISMO.Enums.ARMIndexType.FederalCostOfFunds;
                        break;
                    }
                    case "16":
                    {
                        _loanproductdata._arm.IndexType = (short) MISMO.Enums.ARMIndexType.FNM60DayRequiredNetYield;
                        break;
                    }
                    case "17":
                    {
                        _loanproductdata._arm.IndexType = (short) MISMO.Enums.ARMIndexType.FRE60DayRequiredNetYield;
                        break;
                    }
                }
            }

            tempval = du.ExtractData("ARM", 20, 7);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._arm == null) _loanproductdata._arm = new BusinessObjects.ARM();
                this.ProductData.ARM.QualifyingRatePercent = Convert.ToDecimal(tempval) / 100;
            }

            tempval = du.ExtractData("LNC", 43, 15);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._arm == null) _loanproductdata._arm = new BusinessObjects.ARM();
                this.ProductData.ARM.PaymentAdjustmentLifetimeCapAmount = Convert.ToDecimal(tempval);
            }

            tempval = du.ExtractData("LNC", 36, 7);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._arm == null) _loanproductdata._arm = new BusinessObjects.ARM();
                this.ProductData.ARM.PaymentAdjustmentLifetimeCapPercent = Convert.ToDecimal(tempval) / 100;
            }

            tempval = du.ExtractData("LNC", 29, 7);
            if (tempval != string.Empty)
            {
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                if (_loanproductdata._arm == null) _loanproductdata._arm = new BusinessObjects.ARM();
                this.ProductData.ARM.RateAdjustmentLifetimeCapPercent = Convert.ToDecimal(tempval) / 100;
            }

            #endregion LOAN_PRODUCT_DATA.ARM

            #region LOAN_PRODUCT_DATA.RATE_ADJUSTMENT

            int rateadjustmentcount = du.BeginCapture("RAJ");
            if (rateadjustmentcount > 0)
            {
                MISMO.BusinessObjects.RateAdjustment raj = null;
                if (_loanproductdata == null) _loanproductdata = new AUS.LoanProductData();
                for(int i = 0; i<rateadjustmentcount; i++)
                {
                    raj = new BusinessObjects.RateAdjustment();

                    tempval = du.ExtractCaptureData(i, 29, 3);
                    if (tempval != string.Empty)
                        raj.FirstRateAdjustmentMonths = Convert.ToDecimal(tempval);

                    tempval = du.ExtractCaptureData(i, 14, 1);
                    switch(tempval)
                    {
                        case "0":
                        {
                            raj.CalculationType = (short) MISMO.Enums.RateAdjustmentCalculationType.AddPercentToCurrentRate;
                            break;
                        }
                        case "1":
                        {
                            raj.CalculationType = (short) MISMO.Enums.RateAdjustmentCalculationType.AddPercentToOriginalRate;
                            break;
                        }
                        case "2":
                        {
                            raj.CalculationType = (short) MISMO.Enums.RateAdjustmentCalculationType.IndexPlusMargin;
                            break;
                        }
                    }

                    tempval = du.ExtractCaptureData(i, 8, 3);
                    if (tempval != string.Empty)
                        raj.DurationMonths = Convert.ToDecimal(tempval);

                    tempval = du.ExtractCaptureData(i, 15, 7);
                    if (tempval != string.Empty)
                        raj.Percent = Convert.ToDecimal(tempval) / 100;

                    tempval = du.ExtractCaptureData(i, 4, 4);
                    if (tempval != string.Empty)
                        raj.PeriodNumber = Convert.ToDecimal(tempval);

                    tempval = du.ExtractCaptureData(i, 22, 7);
                    if (tempval != string.Empty)
                        raj.SubsequentCapPercent = Convert.ToDecimal(tempval) / 100;

                    tempval = du.ExtractCaptureData(i, 11, 3);
                    if (tempval != string.Empty)
                        raj.SubsequentRateAdjustmentMonths = Convert.ToDecimal(tempval);

                    if (raj.CalculationType != (short) Enums.RateAdjustmentCalculationType.Undefined)
                        _loanproductdata._rateadjustments.Add(raj);
                }
            }
            du.EndCapture();

            #endregion LOAN_PRODUCT_DATA.RATE_ADJUSTMENT

            #region PROPOSED_HOUSING_EXPENSE

            int propsedexpcount = du.BeginCapture("05H");
            if (propsedexpcount > 0)
            {
                MISMO.BusinessObjects.ProposedHousingExpense propexp = null;
                for(int i = 0; i<propsedexpcount; i++)
                {
                    propexp = new BusinessObjects.ProposedHousingExpense();

                    tempval = du.ExtractCaptureData(i, 14, 2);
                    switch(tempval)
                    {
                        case "25":
                        {
                            propexp.HousingExpenseType = (short) MISMO.Enums.HousingExpenseType.GroundRent;
                            break;
                        }
                        case "26":
                        {
                            propexp.HousingExpenseType = (short) MISMO.Enums.HousingExpenseType.FirstMortgagePrincipalAndInterest;
                            break;
                        }
                        case "22":
                        {
                            propexp.HousingExpenseType = (short) MISMO.Enums.HousingExpenseType.OtherMortgageLoanPrincipalAndInterest;
                            break;
                        }
                        case "01":
                        {
                            propexp.HousingExpenseType = (short) MISMO.Enums.HousingExpenseType.HazardInsurance;
                            break;
                        }
                        case "14":
                        {
                            propexp.HousingExpenseType = (short) MISMO.Enums.HousingExpenseType.RealEstateTax;
                            break;
                        }
                        case "02":
                        {
                            propexp.HousingExpenseType = (short) MISMO.Enums.HousingExpenseType.MI;
                            break;
                        }
                        case "06":
                        {
                            propexp.HousingExpenseType = (short) MISMO.Enums.HousingExpenseType.HomeownersAssociationDuesAndCondominiumFees;
                            break;
                        }
                        case "23":
                        {
                            propexp.HousingExpenseType = (short) MISMO.Enums.HousingExpenseType.OtherHousingExpense;
                            break;
                        }
                    }

                    tempval = du.ExtractCaptureData(i, 16, 15);
                    if (tempval != string.Empty)
                        propexp.PaymentAmount = Convert.ToDecimal(tempval);

                    this.ProposedHousingExpenses.Add(propexp);
                }
            }

            #endregion PROPOSED_HOUSING_EXPENSE

            #region BORROWER (nested elements)

            // iterate through all the borrowers and extract their respective data
            for(int i = 0, j= _borrowers.Count; i<j; i++)
            {
                MISMO.BusinessObjects.AUS.Borrower cborrower = _borrowers[i] as AUS.Borrower;

                #region BORROWER.CURRENT_INCOME

                int cincomecount = du.BeginCapture("05I", 4, 9, cborrower.SSN);
                MISMO.BusinessObjects.CurrentIncome cincome = null;

                if (cincomecount > 0)
                {
                    for(int k = 0; k<cincomecount; k++)
                    {
                        cincome = new BusinessObjects.CurrentIncome();

                        tempval = du.ExtractCaptureData(k, 13, 2);
                        switch(tempval)
                        {
                            case "F1":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.MilitaryBasePay;
                                break;
                            }
                            case "07":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.MilitaryRationsAllowance;
                                break;
                            }
                            case "F2":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.MilitaryFlightPay;
                                break;
                            }
                            case "F3":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.MilitaryHazardPay;
                                break;
                            }
                            case "02":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.MilitaryClothesAllowance;
                                break;
                            }
                            case "04":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.MilitaryQuartersAllowance;
                                break;
                            }
                            case "03":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.MilitaryPropPay;
                                break;
                            }
                            case "F4":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.MilitaryOverseasPay;
                                break;
                            }
                            case "F5":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.MilitaryCombatPay;
                                break;
                            }
                            case "F6":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.MilitaryVariableHousingAllowance;
                                break;
                            }
                            case "F7":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.AlimonyChildSupport;
                                break;
                            }
                            case "F8":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.NotesReceivableInstallment;
                                break;
                            }
                            case "41":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.Pension;
                                break;
                            }
                            case "42":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.SocialSecurity;
                                break;
                            }
                            case "30":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.MortgageDifferential;
                                break;
                            }
                            case "F9":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.Trust;
                                break;
                            }
                            case "M1":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.Unemployment;
                                break;
                            }
                            case "M2":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.AutomobileExpenseAccount;
                                break;
                            }
                            case "M3":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.FosterCare;
                                break;
                            }
                            case "M4":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.VABenefitsNonEducational;
                                break;
                            }
                            case "45":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.OtherTypesOfIncome;
                                break;
                            }
                            case "20":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.Base;
                                break;
                            }
                            case "09":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.Overtime;
                                break;
                            }
                            case "08":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.Bonus;
                                break;
                            }
                            case "10":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.Commissions;
                                break;
                            }
                            case "17":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.DividendsInterest;
                                break;
                            }
                            case "SI":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.SubjectPropertyNetCashFlow;
                                break;
                            }
                            case "33":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.NetRentalIncome;
                                break;
                            }
                            case "BI":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.OtherTypesOfIncome;
                                break;
                            }
                            case "MC":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.OtherTypesOfIncome;
                                break;
                            }
                            case "TC":
                            {
                                cincome.IncomeType = (short) MISMO.Enums.IncomeType.OtherTypesOfIncome;
                                break;
                            }
                        }

                        tempval = du.ExtractCaptureData(k, 15, 15);
                        if (tempval != string.Empty)
                            cincome.MonthlyTotalAmount = Convert.ToDecimal(tempval);

                        cborrower.CurrentIncomes.Add(cincome);
                    }
                }

                #endregion BORROWER.CURRENT_INCOME

                #region BORROWER.DECLARATION

                int brwdeclcount = du.BeginCapture("08A", 4, 9, cborrower.SSN);
                if (brwdeclcount > 0)
                {
                    // first create an instance of the declaration.
                    if (cborrower.Declaration == null) cborrower.Declaration = new AUS.Declaration();

                    tempval = du.ExtractCaptureData(0, 19, 1);
                    if (tempval != string.Empty)
                        cborrower.Declaration.AlimonyChildSupportObligationIndicator = (tempval == "Y");

                    tempval = du.ExtractCaptureData(0, 14, 1);
                    if (tempval != string.Empty)
                        cborrower.Declaration.BankruptcyIndicator = (tempval == "Y");

                    tempval = du.ExtractCaptureData(0, 20, 1);
                    if (tempval != string.Empty)
                        cborrower.Declaration.BorrowedDownPaymentIndicator = (tempval == "Y");

                    tempval = du.ExtractCaptureData(0, 22, 2);
                    switch(tempval)
                    {
                        case "01":
                        {
                            cborrower.Declaration.CitizenshipResidencyType = (short) MISMO.Enums.CitizenshipResidencyType.USCitizen;
                            break;
                        }
                        case "03":
                        {
                            cborrower.Declaration.CitizenshipResidencyType = (short) MISMO.Enums.CitizenshipResidencyType.PermanentResidentAlien;
                            break;
                        }
                        case "05":
                        {
                            cborrower.Declaration.CitizenshipResidencyType = (short) MISMO.Enums.CitizenshipResidencyType.NonPermanentResidentAlien;
                            break;
                        }
                    }

                    tempval = du.ExtractCaptureData(0, 21, 1);
                    if (tempval != string.Empty)
                        cborrower.Declaration.CoMakerEndorserOfNoteIndicator = (tempval == "Y");

                    tempval = du.ExtractCaptureData(0, 25, 1);
                    if (tempval != string.Empty && (tempval == "Y" || tempval == "N"))
                        cborrower.Declaration.HomeownerPastThreeYearsType = (tempval == "Y");

                    tempval = du.ExtractCaptureData(0, 24, 1);
                    if (tempval != string.Empty && (tempval == "Y" || tempval == "N"))
                        cborrower.Declaration.IntentToOccupyType = (tempval == "Y");

                    tempval = du.ExtractCaptureData(0, 17, 1);
                    if (tempval != string.Empty)
                        cborrower.Declaration.LoanForeclosureOrJudgementIndicator = (tempval == "Y");

                    tempval = du.ExtractCaptureData(0, 13, 1);
                    if (tempval != string.Empty)
                        cborrower.Declaration.OutstandingJudgementsIndicator = (tempval == "Y");

                    tempval = du.ExtractCaptureData(0, 16, 1);
                    if (tempval != string.Empty)
                        cborrower.Declaration.PartyToLawsuitIndicator = (tempval == "Y");

                    tempval = du.ExtractCaptureData(0, 18, 1);
                    if (tempval != string.Empty)
                        cborrower.Declaration.PresentlyDelinquentIndicator = (tempval == "Y");

                    tempval = du.ExtractCaptureData(0, 27, 2);
                    switch(tempval)
                    {
                        case "01":
                        {
                            cborrower.Declaration.PriorPropertyTitleType = (short) MISMO.Enums.PriorPropertyTitleType.Sole;
                            break;
                        }
                        case "25":
                        {
                            cborrower.Declaration.PriorPropertyTitleType = (short) MISMO.Enums.PriorPropertyTitleType.JointWithSpouse;
                            break;
                        }
                        case "26":
                        {
                            cborrower.Declaration.PriorPropertyTitleType = (short) MISMO.Enums.PriorPropertyTitleType.JointWithOtherThanSpouse;
                            break;
                        }
                    }

                    tempval = du.ExtractCaptureData(0, 26, 1);
                    switch(tempval)
                    {
                        case "1":
                        {
                            cborrower.Declaration.PriorPropertyUsageType = (short) MISMO.Enums.PriorPropertyUsageType.PrimaryResidence;
                            break;
                        }
                        case "2":
                        {
                            cborrower.Declaration.PriorPropertyUsageType = (short) MISMO.Enums.PriorPropertyUsageType.SecondaryResidence;
                            break;
                        }
                        case "D":
                        {
                            cborrower.Declaration.PriorPropertyUsageType = (short) MISMO.Enums.PriorPropertyUsageType.Investment;
                            break;
                        }
                    }

                    tempval = du.ExtractCaptureData(0, 15, 1);
                    if (tempval != string.Empty)
                        cborrower.Declaration.PropertyForeclosedPastSevenYearsIndicator = (tempval == "Y");

                    du.EndCapture();

                    #region BORROWER.DECLARATION._EXPLANATION

                    int explanationcount = du.BeginCapture("08B", 4, 9, cborrower.SSN);
                    if (explanationcount > 0)
                    {
                        MISMO.BusinessObjects.Explanation expl = null;
                        for(int l = 0; l<explanationcount; l++)
                        {
                            expl = new MISMO.BusinessObjects.Explanation();

                            tempval = du.ExtractCaptureData(l, 15, 255);
                            if (tempval != string.Empty)
                            {
                                expl.Description = tempval;
                            }

                            tempval = du.ExtractCaptureData(l, 13, 2);
                            switch(tempval)
                            {
                                case "91":
                                {
                                    expl.Type = (short) MISMO.Enums.ExplanationType.OutstandingJudgments;
                                    break;
                                }
                                case "92":
                                {
                                    expl.Type = (short) MISMO.Enums.ExplanationType.DeclaredBankruptcyPastSevenYears;
                                    break;
                                }
                                case "93":
                                {
                                    expl.Type = (short) MISMO.Enums.ExplanationType.DirectIndirectForeclosedPropertyPastSevenYears;
                                    break;
                                }
                                case "94":
                                {
                                    expl.Type = (short) MISMO.Enums.ExplanationType.PartyToLawsuit;
                                    break;
                                }
                                case "95":
                                {
                                    expl.Type = (short) MISMO.Enums.ExplanationType.ObligatedOnLoanForeclosedOrDeedInLieuOfJudgement;
                                    break;
                                }
                                case "96":
                                {
                                    expl.Type = (short) MISMO.Enums.ExplanationType.DelinquencyOrDefault;
                                    break;
                                }
                                case "97":
                                {
                                    expl.Type = (short) MISMO.Enums.ExplanationType.AlimonyChildSupport;
                                    break;
                                }
                                case "98":
                                {
                                    expl.Type = (short) MISMO.Enums.ExplanationType.BorrowedDownPayment;
                                    break;
                                }
                                case "99":
                                {
                                    expl.Type = (short) MISMO.Enums.ExplanationType.CoMakerEndorserOnNote;
                                    break;
                                }
                            }

                            cborrower.Declaration.Explanations.Add(expl);
                        }
                    }

                    #endregion BORROWER.DECLARATION._EXPLANATION
                }

                #endregion BORROWER.DECLARATION

                #region ASSETS

                AUS.Asset assobj = null;

                // load standard assets
                int asscount = du.BeginCapture("06C", 4, 9, cborrower.SSN);
                if (asscount > 0)
                {
                    for(int n = 0; n<asscount; n++)
                    {
                        assobj = new AUS.Asset();

                        // first extract or try to determine the asset type
                        tempval = du.ExtractCaptureData(n, 13, 3);
                        switch(tempval)
                        {
                            case "03":
                            {
                                assobj.Type = (short) MISMO.Enums.AssetType.CheckingAccount;
                                break;
                            }
                            case "F1":
                            {
                                assobj.Type = (short) MISMO.Enums.AssetType.SaleOtherAssets;
                                break;
                            }
                            case "SG":
                            {
                                assobj.Type = (short) MISMO.Enums.AssetType.SavingsAccount;
                                break;
                            }
                            case "F2":
                            {
                                assobj.Type = (short) MISMO.Enums.AssetType.GiftsTotal;
                                break;
                            }
                            case "01":
                            {
                                assobj.Type = (short) MISMO.Enums.AssetType.CertificateOfDepositTimeDeposit;
                                break;
                            }
                            case "F3":
                            {
                                assobj.Type = (short) MISMO.Enums.AssetType.MoneyMarketFund;
                                break;
                            }
                            case "F4":
                            {
                                assobj.Type = (short) MISMO.Enums.AssetType.MutualFund;
                                break;
                            }
                            case "05":
                            {
                                assobj.Type = (short) MISMO.Enums.AssetType.Stock;
                                break;
                            }
                            case "06":
                            {
                                assobj.Type = (short) MISMO.Enums.AssetType.Bond;
                                break;
                            }
                            case "F5":
                            {
                                assobj.Type = (short) MISMO.Enums.AssetType.SecuredBorrowedFundsNotDeposited;
                                break;
                            }
                            case "F7":
                            {
                                assobj.Type = (short) MISMO.Enums.AssetType.BridgeLoanNotDeposited;
                                break;
                            }
                            case "08":
                            {
                                assobj.Type = (short) MISMO.Enums.AssetType.RetirementFund;
                                break;
                            }
                            case "F8":
                            {
                                assobj.Type = (short) MISMO.Enums.AssetType.NetWorthOfBusinessOwned;
                                break;
                            }
                            case "11":
                            {
                                assobj.Type = (short) MISMO.Enums.AssetType.TrustAccount;
                                break;
                            }
                            case "M1":
                            {
                                assobj.Type = (short) MISMO.Enums.AssetType.OtherNonLiquidAssets;
                                break;
                            }
                            case "OL":
                            {
                                assobj.Type = (short) MISMO.Enums.AssetType.OtherLiquidAssets;
                                break;
                            }
                            case "NE":
                            {
                                assobj.Type = (short) MISMO.Enums.AssetType.PendingNetSaleProceedsFromRealEstateAssets;
                                break;
                            }
                            case "COH":
                            {
                                assobj.Type = (short) MISMO.Enums.AssetType.CashOnHand;
                                break;
                            }
                            case "GE":
                            {
                                assobj.Type = (short) MISMO.Enums.AssetType.GiftsNotDeposited;
                                break;
                            }
                        }

                        tempval = du.ExtractCaptureData(n, 132, 30);
                        if (tempval != string.Empty)
                        {
                            assobj.AccountIdentifier = tempval;
                        }

                        tempval = du.ExtractCaptureData(n, 162, 15);
                        if (tempval != string.Empty)
                        {
                            assobj.CashOrMarketValueAmount = Convert.ToDecimal(tempval);
                        }

                        tempval = du.ExtractCaptureData(n, 16, 35);
                        if (tempval != string.Empty)
                        {
                            assobj.HolderName = tempval;
                        }

                        tempval = du.ExtractCaptureData(n, 51, 35);
                        if (tempval != string.Empty)
                        {
                            assobj.HolderStreetAddress = tempval;
                        }

                        tempval = du.ExtractCaptureData(n, 86, 35);
                        if (tempval != string.Empty)
                        {
                            assobj.HolderCity = tempval;
                        }

                        tempval = du.ExtractCaptureData(n, 121, 2);
                        if (tempval != string.Empty)
                        {
                            assobj.HolderState = tempval;
                        }

                        tempval = du.ExtractCaptureData(n, 123, 5);
                        if (tempval != string.Empty)
                        {
                            assobj.HolderPostalCode = tempval;
                        }

                        tempval = du.ExtractCaptureData(n, 128, 4);
                        if (tempval != string.Empty)
                        {
                            assobj.HolderPostalCode += "-" + tempval;
                        }

                        tempval = du.ExtractCaptureData(n, 184, 80);
                        if (tempval != string.Empty)
                        {
                            assobj.OtherAssetTypeDescription = tempval;
                        }

                        tempval = du.ExtractCaptureData(n, 177, 7);
                        if (tempval != string.Empty)
                        {
                            assobj.StockBondMutualFundShareCount = Convert.ToDecimal(tempval);
                        }

                        // add the asset to the borrower
                        cborrower.Assets.Add(assobj);
                    }
                }

                // load life insurance assets
                asscount = du.BeginCapture("06B", 4, 9, cborrower.SSN);
                if (asscount > 0)
                {
                    for(int n = 0; n<asscount; n++)
                    {
                        assobj = new AUS.Asset();
                        assobj.Type = (short) MISMO.Enums.AssetType.LifeInsurance;

                        tempval = du.ExtractCaptureData(n, 13, 30);
                        if (tempval != string.Empty)
                        {
                            assobj.AccountIdentifier = tempval;
                        }

                        tempval = du.ExtractCaptureData(n, 43, 15);
                        if (tempval != string.Empty)
                        {
                            assobj.CashOrMarketValueAmount = Convert.ToDecimal(tempval);
                        }

                        tempval = du.ExtractCaptureData(n, 58, 15);
                        if (tempval != string.Empty)
                        {
                            assobj.LifeInsuranceFaceValueAmount = Convert.ToDecimal(tempval);
                        }
                    }
                }

                // load cash deposits assets
                asscount = du.BeginCapture("06A", 4, 9, cborrower.SSN);
                if (asscount > 0)
                {
                    for(int n = 0; n<asscount; n++)
                    {
                        assobj = new AUS.Asset();
                        assobj.Type = (short) MISMO.Enums.AssetType.EarnestMoneyCashDepositTowardPurchase;

                        tempval = du.ExtractCaptureData(n, 48, 15);
                        if (tempval != string.Empty)
                        {
                            assobj.CashOrMarketValueAmount = Convert.ToDecimal(tempval);
                        }

                        tempval = du.ExtractCaptureData(n, 13, 35);
                        if (tempval != string.Empty)
                        {
                            assobj.HolderName = tempval;
                        }
                    }
                }

                // load automobile assets
                asscount = du.BeginCapture("06D", 4, 9, cborrower.SSN);
                if (asscount > 0)
                {
                    for(int n = 0; n<asscount; n++)
                    {
                        assobj = new AUS.Asset();
                        assobj.Type = (short) MISMO.Enums.AssetType.Automobile;

                        tempval = du.ExtractCaptureData(n, 47, 15);
                        if (tempval != string.Empty)
                        {
                            assobj.CashOrMarketValueAmount = Convert.ToDecimal(tempval);
                        }

                        tempval = du.ExtractCaptureData(n, 13, 30);
                        if (tempval != string.Empty)
                        {
                            assobj.AutomobileMakeDescription = tempval;
                        }

                        tempval = du.ExtractCaptureData(n, 43, 4);
                        if (tempval != string.Empty)
                        {
                            assobj.AutomobileModelYear = du.ToDate(tempval);
                        }
                    }
                }

                #endregion ASSETS
            }

            #endregion BORROWER (nested elements)
        }
        /// <summary>
        /// Creates a new instance of an existing (persisted) loan application.
        /// </summary>
        /// <param name="appId">The identity of the loan application.</param>
        public LoanApplication(long appId)
            : base(appId)
        {
            // TODO: add additional fill methods for the rest of the loan object

            // load up the data information
            MISMO.BusinessObjects.DataInformationCollection dats = this.GetDataInformationCollection();
            if (dats != null && dats.Count > 0)
            {
                _datainformation = new DataInformation();
                MISMO.Entities.DataInformationBase datbase = dats[0];
                _datainformation.SetMembers(ref datbase);
            }

            // load up the additional case data.
            MISMO.BusinessObjects.AdditionalCaseDataCollection addcasecol = this.GetAdditionalCaseDataCollection();
            if (addcasecol != null && addcasecol.Count > 0)
            {
                MISMO.Entities.AdditionalCaseDataBase addcasebase = addcasecol[0] as MISMO.Entities.AdditionalCaseDataBase;
                _additionalcasedata = new AdditionalCaseData();
                _additionalcasedata.SetMembers(ref addcasebase);
            }

            // load up the down payment information
            _downpayments = this.GetDownPayments();

            // load up the interviewer information
            MISMO.BusinessObjects.InterviewerInformationCollection intvcol = this.GetInterviewerInformationCollection();
            if (intvcol != null && intvcol.Count > 0)
                _interviewer = intvcol[0];

            // load up the loan product data
            MISMO.BusinessObjects.LoanProductDataCollection loanproducts = this.GetLoanProductDataCollection();
            if (loanproducts != null && loanproducts.Count > 0)
            {
                MISMO.Entities.LoanProductDataBase lpbase = loanproducts[0];
                _loanproductdata = new LoanProductData();
                _loanproductdata.SetMembers(ref lpbase);
            }

            // load up the loan purpose
            MISMO.BusinessObjects.LoanPurposes purps = this.GetLoanPurposes();
            if (purps != null && purps.Count > 0)
            {
                MISMO.Entities.LoanPurposeBase purpbase = purps[0];
                _purpose = new LoanPurpose();
                _purpose.SetMembers(ref purpbase);
            }

            // load up the loan qualification information
            MISMO.BusinessObjects.LoanQualifications lqcol = this.GetLoanQualifications();
            if (lqcol != null && lqcol.Count > 0)
            {
                MISMO.Entities.LoanQualificationBase lqbase = lqcol[0] as MISMO.Entities.LoanQualificationBase;
                _loanqualification.SetMembers(ref lqbase);
            }

            // load up the mortgage terms.
            MISMO.BusinessObjects.MortgageTermsCollection mtgterms = this.GetMortgageTermsCollection();
            if (mtgterms != null && mtgterms.Count > 0)
                _mortgageterms = mtgterms[0];

            // loan up the property information
            MISMO.BusinessObjects.Properties props = this.GetProperties();
            if (props != null && props.Count > 0)
            {
                _prop = new AUS.Property();
                MISMO.Entities.PropertyBase propbase = props[0];
                _prop.SetMembers(ref propbase);
            }

            // load up the proposed housing expenses
            _proposedHousingExpenses = this.GetProposedHousingExpenses();

            // load up the REO properties
            _reoProperties = this.GetREOProperties();

            // load up the title holder objects
            _titleholders = this.GetTitleHolders();

            // load up the transaction details
            MISMO.BusinessObjects.TransactionDetails trandets = this.GetTransactionDetails();
            if (trandets != null && trandets.Count > 0)
            {
                MISMO.Entities.TransactionDetailBase trandbase = trandets[0];
                _transdetail = new AUS.TransactionDetail();
                _transdetail.SetMembers(ref trandbase);
            }

            // load up the borrower information
            MISMO.BusinessObjects.Borrowers bws = this.GetBorrowers();
            MISMO.Entities.BorrowerBase bwsbase = null;
            for(int i = 0, j = bws.Count; i<j; i++)
            {
                MISMO.BusinessObjects.AUS.Borrower ausbw = new Borrower();
                bwsbase = bws[i] as MISMO.Entities.BorrowerBase;
                ausbw.SetMembers(ref bwsbase);
                _borrowers.Add(ausbw);
            }

            // finally update the checksum if this constructor wasn't called from a descendant.
            if (this.GetType() == typeof(MISMO.BusinessObjects.AUS.LoanApplication))
            {
                RecalculateChecksum();
            }
        }