lmi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lmi-commits] [lmi] master 1087aa8 1/5: Remove old XSL-FO implementation


From: Greg Chicares
Subject: [lmi-commits] [lmi] master 1087aa8 1/5: Remove old XSL-FO implementation [364]
Date: Fri, 12 Oct 2018 13:47:22 -0400 (EDT)

branch: master
commit 1087aa8e39d427c2f55d46899deef91934986f8c
Author: Gregory W. Chicares <address@hidden>
Commit: Gregory W. Chicares <address@hidden>

    Remove old XSL-FO implementation [364]
    
    Cf. commit 919d79671214.
---
 Makefile.am          |   11 -
 emit_ledger.cpp      |    2 -
 fo_common.xsl        | 1002 ----------------------------
 illustration_reg.xsl | 1805 --------------------------------------------------
 ledger.hpp           |   10 -
 ledger_base.cpp      |    7 -
 ledger_base.hpp      |    4 +-
 ledger_pdf.cpp       |   41 --
 ledger_xml_io.cpp    |  955 --------------------------
 ledger_xsl.cpp       |  163 -----
 ledger_xsl.hpp       |   38 --
 nasd.xsl             | 1283 -----------------------------------
 objects.make         |    7 -
 reg_d_group.xsl      |  912 -------------------------
 reg_d_individual.xsl | 1022 ----------------------------
 15 files changed, 1 insertion(+), 7261 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index 8f3cec5..ed5abc5 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -293,11 +293,6 @@ wx_test_LDADD = \
 
 # libraries
 
-# PDF !! Expunge these two object files
-#  ledger_xml_io.o
-#  ledger_xsl.o
-# from the list below.
-
 liblmi_common_sources = \
     actuarial_table.cpp \
     alert.cpp \
@@ -347,8 +342,6 @@ liblmi_common_sources = \
     ledger_text_formats.cpp \
     ledger_variant.cpp \
     ledger_variant_init.cpp \
-    ledger_xml_io.cpp \
-    ledger_xsl.cpp \
     ledgervalues.cpp \
     license.cpp \
     loads.cpp \
@@ -1155,9 +1148,6 @@ test_zero_CXXFLAGS = $(AM_CXXFLAGS)
 
 # headers: we need to include them or they wouldn't appear in the distribution
 # this list should contain everything in `ls *.h *.hpp *.tpp *.xpp`
-# PDF !! Expunge this header
-#  ledger_xsl.hpp
-# from the list below.
 noinst_HEADERS = \
     about_dialog.hpp \
     account_value.hpp \
@@ -1258,7 +1248,6 @@ noinst_HEADERS = \
     ledger_pdf.hpp \
     ledger_text_formats.hpp \
     ledger_variant.hpp \
-    ledger_xsl.hpp \
     ledgervalues.hpp \
     license.hpp \
     lmi.hpp \
diff --git a/emit_ledger.cpp b/emit_ledger.cpp
index 3e64016..c7e9922 100644
--- a/emit_ledger.cpp
+++ b/emit_ledger.cpp
@@ -32,8 +32,6 @@
 #include "ledger.hpp"
 #include "ledger_pdf.hpp"
 #include "ledger_text_formats.hpp"
-// PDF !! Expunge the next line:
-#include "ledger_xsl.hpp"
 #include "miscellany.hpp"               // ios_out_trunc_binary()
 #include "path_utility.hpp"             // unique_filepath()
 #include "timer.hpp"
diff --git a/fo_common.xsl b/fo_common.xsl
deleted file mode 100644
index 30d5ceb..0000000
--- a/fo_common.xsl
+++ /dev/null
@@ -1,1002 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Common part of various illustrations.
-
-    Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 
2017, 2018 Gregory W. Chicares.
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License version 2 as
-    published by the Free Software Foundation.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-
-    http://savannah.nongnu.org/projects/lmi
-    email: <address@hidden>
-    snail: Chicares, 186 Belle Woods Drive, Glastonbury CT 06033, USA
--->
-<!DOCTYPE stylesheet [
-<!ENTITY nbsp "&#xA0;">
-]>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
xmlns:fo="http://www.w3.org/1999/XSL/Format"; version="1.0">
-
-  <!--
-  Used in an expression like translate($sometext, $lcletters, $ucletters)
-  to transform $sometext into uppercase.
-  -->
-  <xsl:variable name="lcletters">abcdefghijklmnopqrstuvwxyz</xsl:variable>
-  <xsl:variable name="ucletters">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
-
-  <!--
-  Strip commas from numbers:
-  translate($string_Representation_of_a_number, $numberswc, $numberswoc).
-  -->
-  <xsl:variable name="numberswoc">0123456789</xsl:variable>
-  <xsl:variable name="numberswc">0123456789,</xsl:variable>
-
-  <!--
-  Global parameter, that controls the output media size.
-  Refer to http://en.wikipedia.org/wiki/Paper_size for details.
-  North American paper size standards are accepted:
-  'letter', 'legal', 'emperor'.
-  Any unknown page size keyword is treated as 'letter'.
-  -->
-  <xsl:param name="page-type" select="'letter'"/>
-  <!-- Page orientation has to be 'portrait' or 'landscape' -->
-  <xsl:param name="page-orientation" select="'portrait'"/>
-
-  <!--
-  Define this parameter to true to exclude company logo. This should be useful
-  for text output where any graphics is replaced by a grid of '#' symbols.
-  (This was overengineering: no use case exists to justify the complexity,
-  so it is okay to ignore this.)
-  -->
-  <xsl:param name="hide-company-logo" select="boolean(0)"/>
-
-  <!--
-  In some xsl:for-each loop we could iterate over a node set from some
-  other document (not the current document being transformed, for example
-  we could iterate over a list of columns from the separate format file
-  to generate a list of available columns).
-
-  In such a case inside the loop the root node '/' binds to the root node
-  of that external document and we cannot use '/illustration' no longer
-  to access our current xml data.
-  Use the global variable '$illustration' to access the data.
-  -->
-  <xsl:variable name="illustration" select="/illustration"/>
-
-  <!--
-  Prepare to use new format of XML input files:
-  The $scalars variable below should become
-  "/illustration/string_scalar | /illustration/double_scalar"
-  -->
-  <xsl:variable name="scalars" select="/illustration/scalar"/>
-
-  <!--
-  Prepare to use new format of XML input files:
-  The $vectors variable below should become
-  "/illustration/string_vector | /illustration/double_vector"
-  -->
-  <xsl:variable name="vectors" select="/illustration/data/newcolumn/column"/>
-
-  <xsl:variable name="max-lapse-year-text">
-    <xsl:call-template name="get-max-lapse-year"/>
-  </xsl:variable>
-  <xsl:variable name="max-lapse-year" select="number($max-lapse-year-text)"/>
-
-  <!--
-  Prepare to use new format of XML input files:
-  The $supplemental_report variable below should become
-  "/illustration/supplementalreport"
-  -->
-  <xsl:variable name="supplemental_report" 
select="$illustration/supplementalreport"/>
-  <xsl:variable name="NO_SUPPLEMENTAL_COLUMN" select="'[none]'"/>
-
-  <!--
-  Prepare to use new format of XML input files:
-  The $supplemental_report_columns variable below should become
-  "$supplemental_report/column"
-  -->
-  <xsl:variable name="supplemental_report_columns" 
select="$supplemental_report/columns"/>
-
-  <xsl:variable name="has_supplemental_report" 
select="boolean($scalars/SupplementalReport='1')"/>
-
-  <!--
-  Frequently used value. For a composite case the variable is_composite is 
true.
-  -->
-  <xsl:variable name="is_composite" select="boolean($scalars/Composite='1')"/>
-
-  <!-- Page size in a form of 'width x height' (portrait orientation) -->
-  <xsl:variable name="page-size">
-    <xsl:choose>
-      <xsl:when test="$page-type='legal'">
-        8.5in x 14in
-      </xsl:when>
-      <xsl:when test="$page-type='emperor'">
-        48in x 72in
-      </xsl:when>
-      <xsl:otherwise><!-- fall back to 'letter' -->
-        8.5in x 11in
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-  <!-- These variables should be used in every 'simple-page-master'. -->
-  <xsl:variable name="portrait-width" 
select="normalize-space(substring-before($page-size, 'x'))"/>
-  <xsl:variable name="portrait-height" 
select="normalize-space(substring-after($page-size, 'x'))"/>
-  <!-- Account for page orientation in a form 'horizontal x vertical' -->
-  <xsl:variable name="page-geometry">
-    <xsl:choose>
-      <xsl:when test="$page-orientation='landscape'">
-        <xsl:value-of select="concat($portrait-height,' x ',$portrait-width)"/>
-      </xsl:when>
-      <xsl:otherwise><!-- fall back to 'portrait' -->
-        <xsl:value-of select="concat($portrait-width,' x ',$portrait-height)"/>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-  <!-- These variables should be used in every 'simple-page-master'. -->
-  <xsl:variable name="page-width" 
select="normalize-space(substring-before($page-geometry, 'x'))"/>
-  <xsl:variable name="page-height" 
select="normalize-space(substring-after($page-geometry, 'x'))"/>
-
-  <!--
-  Helper template to be used in 'fo:simple-page-master' to improve readability.
-  Use template parameters 'width' and 'height' to override default page size.
-  -->
-  <xsl:template name="set-page-size">
-    <xsl:param name="width" select="$page-width"/>
-    <xsl:param name="height" select="$page-height"/>
-    <xsl:attribute name="page-width"><xsl:value-of 
select="$width"/></xsl:attribute>
-    <xsl:attribute name="page-height"><xsl:value-of 
select="$height"/></xsl:attribute>
-    <xsl:attribute name="margin">.25in .25in .1in</xsl:attribute>
-  </xsl:template>
-
-  <xsl:variable name="compliance_tracking_string">
-    <xsl:choose>
-      <xsl:when test="$scalars/IsInforce!='1'">
-        <xsl:if test="$scalars/Composite='1'">
-          <xsl:value-of select="$scalars/ImprimaturPresaleComposite"/>
-        </xsl:if>
-        <xsl:if test="$scalars/Composite!='1'">
-          <xsl:value-of select="$scalars/ImprimaturPresale"/>
-        </xsl:if>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:if test="$scalars/Composite='1'">
-          <xsl:value-of select="$scalars/ImprimaturInforceComposite"/>
-        </xsl:if>
-        <xsl:if test="$scalars/Composite!='1'">
-          <xsl:value-of select="$scalars/ImprimaturInforce"/>
-        </xsl:if>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:variable>
-  <!-- Suppose that the number does not contain leading/trailing spaces -->
-  <xsl:variable name="compliance_tracking_number" 
select="normalize-space($compliance_tracking_string)"/>
-
-  <!--
-  This may appear to be a clumsy way to get the max value but there is no 
clean way
-  to do this with the available XSL functionality and the values being distinct
-  entities. The way it is done in Calculation Summary and all examples to be 
found
-  have the values grouped in a common node within the XML. Simplified example:
-  <values>
-    <value>55</value>
-    <value>45</value>
-    <value>50</value>
-    <value>40</value>
-  </values>
-  Note: illustration_reg cases do not currently have LapseYear_CurrentZero and
-  LapseYear_GuaranteedZero in their XML. We rely on the fact that an inexistent
-  node evaluates to zero in a comparison expression.
-  -->
-  <xsl:template name="get-max-lapse-year">
-    <xsl:call-template name="max-comparison">
-      <xsl:with-param name="value1">
-        <xsl:call-template name="max-comparison">
-          <xsl:with-param name="value1" select="$scalars/LapseYear_Current"/>
-          <xsl:with-param name="value2" 
select="$scalars/LapseYear_Guaranteed"/>
-        </xsl:call-template>
-      </xsl:with-param>
-      <xsl:with-param name="value2">
-        <xsl:call-template name="max-comparison">
-          <xsl:with-param name="value1" 
select="$scalars/LapseYear_CurrentZero"/>
-          <xsl:with-param name="value2" 
select="$scalars/LapseYear_GuaranteedZero"/>
-        </xsl:call-template>
-      </xsl:with-param>
-    </xsl:call-template>
-  </xsl:template>
-
-  <!-- Return the maximum of two values -->
-  <xsl:template name="max-comparison">
-    <xsl:param name="value1"/>
-    <xsl:param name="value2"/>
-    <xsl:choose>
-      <xsl:when test="$value1 &lt; $value2">
-        <xsl:value-of select="$value2"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:value-of select="$value1"/>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <!--
-    Print Dollar Units
-    This template is common to all the illustration xsl templates.
-    Originally it has appeared in files with minor differences such as:
-      * explicitly specified text alignment, font size or not specified;
-      * parentheses added around the text or omitted;
-      * an extra space added just before the text.
-  -->
-  <xsl:template name="dollar-units">
-    <fo:block text-align="center" font-size="9pt" padding-top="1em">
-      <xsl:text>Values shown are in </xsl:text>
-      <xsl:choose>
-        <xsl:when test="$scalars/ScaleUnit=''">
-          <xsl:text>dollars</xsl:text>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:value-of select="$scalars/ScaleUnit"/>
-          <xsl:text>s of dollars</xsl:text>
-        </xsl:otherwise>
-      </xsl:choose>
-    </fo:block>
-  </xsl:template>
-
-  <!-- Generate widely used text snippet 'PrepMonth PrepDay, PrepYear' -->
-  <xsl:template name="date-prepared">
-    <xsl:value-of select="$scalars/PrepMonth"/>
-    <xsl:text>&nbsp;</xsl:text>
-    <xsl:value-of select="$scalars/PrepDay"/>
-    <xsl:text>, </xsl:text>
-    <xsl:value-of select="$scalars/PrepYear"/>
-  </xsl:template>
-
-  <!--
-  Helper 'attributes' template for a table cell.
-  Included inside a fo:table-cell, this template adds common cell padding,
-  text alignment (align text toward bottom-right cell corner).
-  Also set (possible) bottom border properties.
-  -->
-  <xsl:template name="header-cell">
-    <xsl:attribute name="display-align">after</xsl:attribute>
-    <xsl:attribute name="padding-top">4pt</xsl:attribute>
-    <xsl:attribute name="padding-bottom">2pt</xsl:attribute>
-    <xsl:attribute name="text-align">right</xsl:attribute>
-    <xsl:attribute name="border-bottom-style">solid</xsl:attribute>
-    <xsl:attribute name="border-bottom-color">#002F6C</xsl:attribute>
-  </xsl:template>
-  <!--
-  Same as 'header-cell', but add a bottom border of 1pt.
-  -->
-  <xsl:template name="header-cell-with-border">
-    <xsl:call-template name="header-cell"/>
-    <xsl:attribute name="border-bottom-width">1pt</xsl:attribute>
-  </xsl:template>
-
-  <!-- Generate supplemental report data table -->
-  <xsl:template name="supplemental-report-body">
-    <xsl:if test="count($supplemental_report_columns) &gt; 0">
-      <fo:flow flow-name="xsl-region-body">
-        <fo:block font-size="9pt" font-family="serif">
-          <fo:table table-layout="fixed" width="100%">
-            <xsl:call-template name="generate-table-columns">
-              <xsl:with-param name="columns" 
select="$supplemental_report_columns"/>
-            </xsl:call-template>
-            <!--
-            TODO ?? Use 'generate-table-header' generic template
-            to print table column headers.
-            -->
-            <fo:table-header>
-              <fo:table-row>
-                <xsl:for-each select="$supplemental_report_columns">
-                  <fo:table-cell>
-                    <xsl:call-template name="header-cell-with-border"/>
-                    <fo:block>
-                      <xsl:call-template name="text-word-wrap">
-                        <xsl:with-param name="text" select="./title"/>
-                      </xsl:call-template>
-                    </fo:block>
-                  </fo:table-cell>
-                </xsl:for-each>
-              </fo:table-row>
-              <!-- Additional empty row to add spacing after the header -->
-              <fo:table-row>
-                <fo:table-cell padding="2pt">
-                  <fo:block/>
-                </fo:table-cell>
-              </fo:table-row>
-            </fo:table-header>
-            <!-- Supplemental report table body -->
-            <fo:table-body>
-              <xsl:call-template name="generate-table-values">
-                <xsl:with-param name="counter" select="$scalars/InforceYear + 
1"/>
-                <xsl:with-param name="inforceyear" select="0 - 
$scalars/InforceYear"/>
-                <xsl:with-param name="columns" 
select="$supplemental_report_columns"/>
-                <xsl:with-param name="max-counter" select="$max-lapse-year"/>
-              </xsl:call-template>
-            </fo:table-body>
-          </fo:table>
-        </fo:block>
-        <xsl:if test="$has_supplemental_report">
-          <fo:block id="endofdoc"/>
-        </xsl:if>
-      </fo:flow>
-    </xsl:if>
-  </xsl:template>
-
-  <!--
-  Generate table columns list.
-  If a column has no name attribute (or an empty one) treat it
-  as a small separator. Also treat a <spacer/> node as a wide separator.
-  -->
-  <xsl:template name="generate-table-columns">
-    <xsl:param name="columns"/>
-    <xsl:for-each select="$columns">
-      <xsl:variable name="empty_column" select="boolean(not(./name) and 
not(@name) and not(@scalar) and not(@special))"/>
-      <xsl:variable name="is_spacer" select="name() = 'spacer'"/>
-      <fo:table-column>
-        <xsl:choose>
-          <xsl:when test="$empty_column and not($is_spacer)">
-            <xsl:attribute 
name="column-width">proportional-column-width(33)</xsl:attribute>
-          </xsl:when>
-          <xsl:otherwise>
-            <xsl:attribute 
name="column-width">proportional-column-width(100)</xsl:attribute>
-          </xsl:otherwise>
-        </xsl:choose>
-      </fo:table-column>
-    </xsl:for-each>
-    <fo:table-column column-width="proportional-column-width(1)"/>
-  </xsl:template>
-
-  <!--
-  Determine the minimum number of rows needed to correctly show column headers.
-  Every column can spawn over multiple rows. This template return the maximum
-  number of rows.
-  -->
-  <xsl:template name="get-max-header-rows">
-    <xsl:param name="columns"/>
-    <xsl:param name="column"/>
-    <xsl:param name="row"/>
-    <xsl:choose>
-      <xsl:when test="count($columns) = 0">0</xsl:when>
-      <xsl:when test="($row = 1) and ($column = count($columns))">1</xsl:when>
-      <xsl:otherwise>
-        <xsl:variable name="text">
-          <xsl:call-template name="get-text-nth-line">
-            <xsl:with-param name="text" select="$columns[$column]"/>
-            <xsl:with-param name="n" select="$row"/>
-          </xsl:call-template>
-        </xsl:variable>
-        <xsl:variable name="this_result">
-          <xsl:if test="$text=''">0</xsl:if>
-          <xsl:if test="$text!=''"><xsl:value-of select="$row"/></xsl:if>
-        </xsl:variable>
-        <xsl:variable name="recursive_result">
-          <xsl:choose>
-            <xsl:when test="($column != count($columns))">
-              <xsl:call-template name="get-max-header-rows">
-                <xsl:with-param name="columns" select="$columns"/>
-                <xsl:with-param name="column" select="($column + 1)"/>
-                <xsl:with-param name="row" select="$row"/>
-              </xsl:call-template>
-            </xsl:when>
-            <xsl:otherwise>
-              <xsl:call-template name="get-max-header-rows">
-                <xsl:with-param name="columns" select="$columns"/>
-                <xsl:with-param name="column" select="1"/>
-                <xsl:with-param name="row" select="($row - 1)"/>
-              </xsl:call-template>
-            </xsl:otherwise>
-          </xsl:choose>
-        </xsl:variable>
-
-        <xsl:call-template name="max-comparison">
-          <xsl:with-param name="value1" 
select="number(normalize-space($this_result))"/>
-          <xsl:with-param name="value2" 
select="number(normalize-space($recursive_result))"/>
-        </xsl:call-template>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <!--
-  A generic template that generates data-table header rows.
-  Simply calls 'generate-table-header-row' with initial values.
-  Additionally adds a blank header row separating the header cells from
-  value cells.
-  -->
-  <xsl:template name="generate-table-headers">
-    <xsl:param name="columns"/>
-    <xsl:variable name="max-rows">
-      <xsl:call-template name="get-max-header-rows">
-        <xsl:with-param name="columns" select="$columns"/>
-        <xsl:with-param name="column" select="1"/>
-        <xsl:with-param name="row" select="10"/>
-      </xsl:call-template>
-    </xsl:variable>
-    <xsl:call-template name="generate-table-header-row">
-      <xsl:with-param name="columns" select="$columns"/>
-      <xsl:with-param name="row" select="1"/>
-      <xsl:with-param name="max-rows" 
select="number(normalize-space($max-rows))"/>
-    </xsl:call-template>
-    <!--
-    TODO ?? This monstrosity adds an extra space between table headers
-    and table data.
-    -->
-    <fo:table-row>
-      <fo:table-cell padding="2pt">
-        <fo:block/>
-      </fo:table-cell>
-    </fo:table-row>
-  </xsl:template>
-
-  <!--
-  Output data table header row and recursively call itself until all rows
-  are produced.
-  Table header rows are printed using 'generate-table-header-cell' which
-  does merging of the header-cells when the adjacent cells have the same text.
-  See 'generate-table-header-cell' description for an explanation.
-  -->
-  <xsl:template name="generate-table-header-row">
-    <xsl:param name="columns"/>
-    <xsl:param name="row"/>
-    <xsl:param name="max-rows"/>
-    <xsl:if test="count($columns) &gt; 0">
-      <fo:table-row>
-        <xsl:call-template name="generate-table-header-cell">
-          <xsl:with-param name="columns" select="$columns"/>
-          <xsl:with-param name="row" select="$row"/>
-          <xsl:with-param name="last_row" select="boolean($row = $max-rows)"/>
-          <xsl:with-param name="cell" select="1"/>
-        </xsl:call-template>
-      </fo:table-row>
-      <xsl:if test="$row &lt; $max-rows">
-        <xsl:call-template name="generate-table-header-row">
-          <xsl:with-param name="columns" select="$columns"/>
-          <xsl:with-param name="row" select="$row + 1"/>
-          <xsl:with-param name="max-rows" select="$max-rows"/>
-        </xsl:call-template>
-      </xsl:if>
-    </xsl:if>
-  </xsl:template>
-
-  <!--
-  Output cell text (and recursively continue).
-  The main complexity comes from rendering the common header cell prefix
-  spawned over multiple columns. Example:
-    <column>Policy |Year</column>
-    <column>Benefit|Guaranteed</column>
-    <column>Benefit|Current</column>
-  will be rendered like so (ASCII graphics):
-    /===============================\
-    | Policy |       Benefit        |
-    |========+======================|
-    |   Year | Guaranteed | Current |
-    |========+============+=========|
-    |          [table data]         |
-  Note how the common header cell 'Benefit' is spawned over two columns.
-  -->
-  <xsl:template name="generate-table-header-cell">
-    <xsl:param name="columns"/>
-    <xsl:param name="row"/>
-    <xsl:param name="last_row"/>
-    <xsl:param name="cell"/>
-    <xsl:param name="spans" select="1"/>
-    <xsl:variable name="cell_text">
-      <xsl:call-template name="get-text-nth-line">
-        <xsl:with-param name="text" select="string($columns[$cell])"/>
-        <xsl:with-param name="n" select="$row"/>
-      </xsl:call-template>
-    </xsl:variable>
-    <xsl:variable name="next_cell_text">
-      <xsl:if test="$cell &lt; count($columns)">
-        <xsl:call-template name="get-text-nth-line">
-          <xsl:with-param name="text" select="string($columns[$cell + 1])"/>
-          <xsl:with-param name="n" select="$row"/>
-        </xsl:call-template>
-      </xsl:if>
-    </xsl:variable>
-    <xsl:if test="($cell_text != $next_cell_text) or ($cell = 
count($columns))">
-      <fo:table-cell number-columns-spanned="{$spans}">
-        <xsl:call-template name="header-cell"/>
-        <xsl:if test="$spans != 1">
-          <xsl:attribute name="text-align">center</xsl:attribute>
-        </xsl:if>
-        <xsl:choose>
-          <xsl:when test="$last_row or (($spans &gt; 1) and ($cell_text != 
''))">
-            <xsl:attribute name="border-bottom-width">1pt</xsl:attribute>
-          </xsl:when>
-          <xsl:otherwise>
-            <xsl:attribute name="border-bottom-width">0pt</xsl:attribute>
-          </xsl:otherwise>
-        </xsl:choose>
-        <xsl:call-template name="text-word-wrap">
-          <xsl:with-param name="text" select="$cell_text"/>
-        </xsl:call-template>
-      </fo:table-cell>
-    </xsl:if>
-    <xsl:if test="$cell &lt; count($columns)">
-      <xsl:choose>
-        <xsl:when test="$cell_text = $next_cell_text">
-          <xsl:call-template name="generate-table-header-cell">
-            <xsl:with-param name="columns" select="$columns"/>
-            <xsl:with-param name="row" select="$row"/>
-            <xsl:with-param name="last_row" select="$last_row"/>
-            <xsl:with-param name="cell" select="$cell + 1"/>
-            <xsl:with-param name="spans" select="$spans + 1"/>
-          </xsl:call-template>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:call-template name="generate-table-header-cell">
-            <xsl:with-param name="columns" select="$columns"/>
-            <xsl:with-param name="row" select="$row"/>
-            <xsl:with-param name="last_row" select="$last_row"/>
-            <xsl:with-param name="cell" select="$cell + 1"/>
-          </xsl:call-template>
-        </xsl:otherwise>
-      </xsl:choose>
-    </xsl:if>
-  </xsl:template>
-
-  <!--
-  A single character indicates that a column title has to be spawned over
-  multiple cells in the table header. Example:
-    <column>Policy |Year</column>
-    <column>Benefit|Current</column>
-  will be rendered like so (ASCII graphics):
-    /==================\
-    | Policy | Benefit |
-    |========+=========|
-    |   Year | Current |
-    |========+=========|
-    |   [table data]   |
-  -->
-  <xsl:variable name="CELL_WRAPPER" select="'|'"/>
-
-  <xsl:template name="get-text-nth-line">
-    <!-- The text to split into lines -->
-    <xsl:param name="text"/>
-    <!-- Index (starting from 1) of the line to return -->
-    <xsl:param name="n"/>
-    <xsl:choose>
-      <xsl:when test="starts-with($text, ' ')">
-        <!-- chop off the leading junk character -->
-        <xsl:call-template name="get-text-nth-line">
-          <xsl:with-param name="text" select="substring($text, 2)"/>
-          <xsl:with-param name="n" select="$n"/>
-        </xsl:call-template>
-      </xsl:when>
-      <xsl:when test="($n = 1) and contains($text, $CELL_WRAPPER)">
-        <xsl:value-of select="normalize-space(substring-before($text, 
$CELL_WRAPPER))"/>
-      </xsl:when>
-      <xsl:when test="($n = 1)"><!-- and not(contains($text, $CELL_WRAPPER)) 
-->
-        <xsl:value-of select="normalize-space($text)"/>
-      </xsl:when>
-      <xsl:when test="contains($text, $CELL_WRAPPER)"><!-- and ($n != 1) -->
-        <xsl:call-template name="get-text-nth-line">
-          <xsl:with-param name="text" select="substring-after($text, 
$CELL_WRAPPER)"/>
-          <xsl:with-param name="n" select="($n - 1)"/>
-        </xsl:call-template>
-      </xsl:when>
-      <xsl:otherwise><!-- ($n != 1) and not(contains($text, $CELL_WRAPPER)) -->
-        <!-- The text does not have nth line. Return nothing -->
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <!--
-  A single character that indicates that a column title has to be split
-  in this place into two separate lines.
-  For example if a column has title 'Policy _Year', then the output file
-  will contain:
-    <fo:block>Policy</fo:block>
-    <fo:block>Year</fo:block>
-  Which will result in two separate lines.
-  Note: TEXT_LINE_WRAPPER must be exactly one symbol.
-  -->
-  <xsl:variable name="TEXT_LINE_WRAPPER" select="'_'"/>
-  <!--
-  Prepare the column title for a table-header cell - split it into lines using
-  the special symbol $TEXT_LINE_WRAPPER (underscore by default), and wrap-up
-  each line into <fo:block> so that FOP does not change word wrapping.
-  This way we control the way the column titles are shown.
-  -->
-  <xsl:template name="text-word-wrap">
-    <!-- The text to split into lines -->
-    <xsl:param name="text"/>
-    <!-- Do we treat the leading $TEXT_LINE_WRAPPERs as junk? -->
-    <xsl:param name="is_dirty" select="boolean(0)"/>
-    <xsl:choose>
-      <xsl:when test="starts-with($text, ' ') or ($is_dirty and 
starts-with($text, $TEXT_LINE_WRAPPER))">
-        <!-- chop off the leading junk character -->
-        <xsl:call-template name="text-word-wrap">
-          <xsl:with-param name="text" select="substring($text, 2)"/>
-          <xsl:with-param name="is_dirty" select="boolean($is_dirty) and 
starts-with($text, $TEXT_LINE_WRAPPER)"/>
-        </xsl:call-template>
-      </xsl:when>
-      <xsl:when test="contains($text, $TEXT_LINE_WRAPPER)">
-        <xsl:call-template name="text-word-wrap">
-          <xsl:with-param name="text" select="substring-before($text, 
$TEXT_LINE_WRAPPER)"/>
-          <xsl:with-param name="is_dirty" select="boolean(1)"/>
-        </xsl:call-template>
-        <xsl:call-template name="text-word-wrap">
-          <xsl:with-param name="text" select="substring-after($text, 
$TEXT_LINE_WRAPPER)"/>
-          <xsl:with-param name="is_dirty" select="boolean(1)"/>
-        </xsl:call-template>
-      </xsl:when>
-      <xsl:otherwise><!-- not(contains($text, $TEXT_LINE_WRAPPER)) -->
-        <!-- Finally wrap the line in the <fo:block> tags -->
-        <fo:block><xsl:value-of select="normalize-space($text)"/></fo:block>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <!--
-  Print out table body. Each column from $columns defines the data source
-  for the table column.
-    - column/@name   - values are read from address@hidden
-    - column/name    - same as above for compatibility with supplemental 
reports
-    - column/@scalar - values are read from $scalars/*[name(.)=$scalar_name]
-    - column/@special - call 'get-special-column-value' to get values - it is
-                        a hook for any special case, i.e. a column
-                        which is not present in the input XML, but is 
calculated
-                        on the fly.
-  Parameters:
-    - columns       - nodeset containing table-columns meta information.
-    - counter       - row counter (incrementing with each table data row)
-    - max-counter   - upper limit for 'counter' (including)
-    - inforceyear   - alignment parameter for 'counter'
-    - special-param - an untouched value passed through
-                      directly to 'get-special-column-value'
-  -->
-  <xsl:template name="generate-table-values">
-    <xsl:param name="columns"/>
-    <xsl:param name="counter"/>
-    <xsl:param name="max-counter"/>
-    <xsl:param name="inforceyear"/>
-    <xsl:param name="special-param" select="NaN"/>
-    <xsl:param name="add-dummy-row-if-empty" select="boolean(1)"/>
-    <xsl:if test="$counter &lt;= $max-counter">
-      <fo:table-row>
-        <xsl:for-each select="$columns">
-          <fo:table-cell padding="1pt .5pt 0">
-            <!-- Add some space after each 5th year -->
-            <xsl:if test="($counter + $inforceyear) mod 5 = 0">
-              <!-- but only if it's not the last row of the table -->
-              <xsl:if test="$counter &lt; $max-counter">
-                <xsl:attribute name="padding-bottom">8pt</xsl:attribute>
-              </xsl:if>
-            </xsl:if>
-            <fo:block text-align="right">
-              <xsl:choose>
-                <xsl:when test="./name">
-                  <xsl:variable name="column_name" select="string(./name)"/>
-                  <xsl:value-of 
select="address@hidden/duration[$counter]/@column_value"/>
-                </xsl:when>
-                <xsl:when test="@name">
-                  <xsl:variable name="column_name" select="@name"/>
-                  <xsl:value-of 
select="address@hidden/duration[$counter]/@column_value"/>
-                </xsl:when>
-                <xsl:when test="@scalar">
-                  <xsl:variable name="scalar_name" select="@scalar"/>
-                  <xsl:value-of select="$scalars/*[name(.)=$scalar_name]"/>
-                </xsl:when>
-                <xsl:when test="@special">
-                  <xsl:call-template name="get-special-column-value">
-                    <xsl:with-param name="special" select="@special"/>
-                    <xsl:with-param name="column" select="."/>
-                    <xsl:with-param name="counter" select="$counter"/>
-                    <xsl:with-param name="special-param" 
select="$special-param"/>
-                  </xsl:call-template>
-                </xsl:when>
-              </xsl:choose>
-            </fo:block>
-          </fo:table-cell>
-        </xsl:for-each>
-        <!--
-        Ensure that a group of 5 rows is never split across multiple pages.
-        Add a dummy cell, that spans 5 rows. Since FOP avoids breaking cells,
-        this cell remains on one page, so will the group of 5 rows.
-        -->
-        <xsl:if test="($counter + $inforceyear) mod 5 = 1">
-          <fo:table-cell number-rows-spanned="5">
-            <fo:block/>
-          </fo:table-cell>
-        </xsl:if>
-      </fo:table-row>
-      <xsl:call-template name="generate-table-values">
-        <xsl:with-param name="columns" select="$columns"/>
-        <xsl:with-param name="counter" select="$counter + 1"/>
-        <xsl:with-param name="max-counter" select="$max-counter"/>
-        <xsl:with-param name="inforceyear" select="$inforceyear"/>
-        <xsl:with-param name="special-param" select="$special-param"/>
-      </xsl:call-template>
-    </xsl:if>
-    <!--
-    If there is no data at all, then FOP would complain because
-    the specification does not allow empty <fo:table-body/> tag.
-    As a workaround add an empty row.
-    -->
-    <xsl:if test="not($max-counter) and $add-dummy-row-if-empty">
-      <fo:table-row>
-        <fo:table-cell>
-          <fo:block/>
-        </fo:table-cell>
-      </fo:table-row>
-    </xsl:if>
-  </xsl:template>
-
-  <xsl:variable name="TEXT_ELLIPSIS" select="'...'"/>
-  <!--
-  Truncate string $passString if its length is more than $length.
-  -->
-  <xsl:template name="limitstring">
-    <xsl:param name="passString"/>
-    <xsl:param name="length"/>
-    <xsl:choose>
-      <xsl:when test="string-length($passString) &lt;= $length">
-        <xsl:value-of select="$passString"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:value-of select="substring($passString, 1, $length)"/>
-        <xsl:value-of select="$TEXT_ELLIPSIS"/>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <!--
-    Use a smaller logo after the first page, but no smaller than this.
-  -->
-  <xsl:template name="company-logo">
-    <xsl:if test="not($hide-company-logo)">
-      <fo:external-graphic width="1.5in" src="company_logo.jpg"/>
-    </xsl:if>
-  </xsl:template>
-
-  <!-- Generic cover page -->
-  <xsl:template name="generic-cover">
-    <fo:page-sequence master-reference="cover" force-page-count="no-force">
-      <fo:flow flow-name="xsl-region-body">
-        <fo:block border="2pt solid #002F6C" font-size="14pt" 
font-family="sans-serif" text-align="center">
-
-          <fo:block font-size="20pt" font-weight="bold" padding-top="5em">
-            <xsl:value-of select="$scalars/PolicyMktgName"/>
-          </fo:block>
-          <fo:block font-size="20pt" font-weight="bold">
-            <xsl:choose>
-              <xsl:when test="$scalars/IsInforce!='1'">
-                Life Insurance Illustration
-              </xsl:when>
-              <xsl:otherwise>
-                In Force Life Insurance Illustration
-              </xsl:otherwise>
-            </xsl:choose>
-          </fo:block>
-
-          <fo:block font-weight="bold" padding-top="8em">
-            Prepared for:
-          </fo:block>
-          <fo:block padding-top="1em" margin="0 .15in">
-            <xsl:variable name="prepared-for-raw">
-              <xsl:choose>
-                <xsl:when test="not($is_composite)">
-                  <xsl:value-of select="$scalars/Insured1"/>
-                </xsl:when>
-                <xsl:otherwise>
-                  <xsl:value-of select="$scalars/CorpName"/>
-                </xsl:otherwise>
-              </xsl:choose>
-            </xsl:variable>
-            <xsl:variable name="prepared-for" 
select="normalize-space($prepared-for-raw)"/>
-            <!-- Properly adjust for long user input strings: limit output to 
140 characters for approximately two lines. -->
-            <xsl:call-template name="limitstring">
-              <xsl:with-param name="passString" select="$prepared-for"/>
-              <xsl:with-param name="length" select="140"/>
-            </xsl:call-template>
-            <xsl:if test="string-length($prepared-for) &lt; 70">
-              <fo:block padding=".5em"/>
-            </xsl:if>
-            <xsl:if test="string-length($prepared-for) = 0">
-              <fo:block padding=".5em"/>
-            </xsl:if>
-          </fo:block>
-
-          <fo:block text-align="center">
-            <fo:block font-weight="bold" padding="4em 0 1em">
-              Presented by:
-            </fo:block>
-            <fo:block>
-              <xsl:value-of select="$scalars/ProducerName"/>
-            </fo:block>
-            <fo:block>
-              <xsl:value-of select="$scalars/ProducerStreet"/>
-            </fo:block>
-            <fo:block>
-              <xsl:value-of select="$scalars/ProducerCity"/>
-            </fo:block>
-            <fo:block padding-top="2em">
-              <xsl:call-template name="date-prepared"/>
-            </fo:block>
-          </fo:block>
-
-          <!--
-            Use a larger logo for the cover page.
-          -->
-          <fo:block padding="0.8in">
-            <fo:external-graphic width="2.5in" src="company_logo.jpg"/>
-          </fo:block>
-
-          <fo:block font-size="9pt" padding-bottom="1em">
-            <xsl:value-of select="$scalars/MarketingNameFootnote"/>
-          </fo:block>
-
-          <fo:block padding-bottom="1em" font-size="9pt" text-align="left" 
text-indent="4em">
-            <xsl:value-of select="$scalars/StateMarketingImprimatur"/>
-          </fo:block>
-        </fo:block>
-      </fo:flow>
-    </fo:page-sequence>
-  </xsl:template>
-
-  <!--
-  Helper template - specify page footer using less code.
-  |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
-  |                 $top-block                 |
-  |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
-  |               $subtop-block                |
-  |============================================|
-  | $left-block | $center-block | $right-block |
-  \~~~~~~~~~~~-~+~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~/
-  -->
-  <xsl:template name="generic-footer">
-    <xsl:param name="top-block" select="''"/>
-    <xsl:param name="subtop-block" select="''"/>
-    <xsl:param name="left-block" select="''"/>
-    <xsl:param name="center-block" select="''"/>
-    <xsl:param name="right-block" select="''"/>
-    <fo:static-content flow-name="xsl-region-after">
-      <fo:block font-size="8pt" font-family="sans-serif" text-align="left">
-        <xsl:if test="$top-block">
-          <fo:block padding=".5em 0">
-            <xsl:copy-of select="$top-block"/>
-          </fo:block>
-        </xsl:if>
-        <fo:block padding-top=".5em" border-top-style="solid" 
border-top-width="1pt" border-top-color="#002F6C">
-          <xsl:if test="$subtop-block">
-            <fo:block padding=".5em 0">
-              <xsl:copy-of select="$subtop-block"/>
-            </fo:block>
-          </xsl:if>
-          <fo:table table-layout="fixed" width="100%">
-            <fo:table-column column-width="proportional-column-width(1)"/>
-            <fo:table-column column-width="proportional-column-width(1)"/>
-            <fo:table-column column-width="proportional-column-width(1)"/>
-            <fo:table-body>
-              <fo:table-row>
-                <fo:table-cell>
-                  <fo:block text-align="left">
-                    <xsl:copy-of select="$left-block"/>
-                  </fo:block>
-                </fo:table-cell>
-                <fo:table-cell>
-                  <fo:block text-align="center">
-                    <xsl:copy-of select="$center-block"/>
-                  </fo:block>
-                </fo:table-cell>
-                <fo:table-cell>
-                  <fo:block text-align="right">
-                    <xsl:copy-of select="$right-block"/>
-                  </fo:block>
-                </fo:table-cell>
-              </fo:table-row>
-            </fo:table-body>
-          </fo:table>
-        </fo:block>
-      </fo:block>
-    </fo:static-content>
-  </xsl:template>
-
-<xsl:template name="print-mastercontractnumber-and-contractnumber">
-  <xsl:param name="omit_policynumber" select="$is_composite"/>
-    <!--
-    This monstrosity truncates 'MasterContractNumber' and 'ContractNumber' to:
-    * 30 characters if both are present;
-    * 15 characters if only one is present.
-    -->
-    <xsl:variable name="has_master_contract" 
select="number($scalars/MasterContractNumber!='')"/>
-    <xsl:variable name="has_polnumber" 
select="number($scalars/ContractNumber!='' and not($omit_policynumber))"/>
-    <xsl:variable name="contracts" select="$has_master_contract + 
$has_polnumber"/>
-    <xsl:if test="$contracts">
-      <xsl:variable name="number_length" select="floor(30 div $contracts)"/>
-      <fo:block>
-        <xsl:if test="$has_master_contract">
-          Master contract:
-          <xsl:call-template name="limitstring">
-            <xsl:with-param name="passString" 
select="$scalars/MasterContractNumber"/>
-            <xsl:with-param name="length" select="$number_length"/>
-          </xsl:call-template>
-        </xsl:if>
-        <xsl:if test="$has_polnumber">
-          Contract number:
-          <xsl:call-template name="limitstring">
-            <xsl:with-param name="passString" 
select="$scalars/ContractNumber"/>
-            <xsl:with-param name="length" select="$number_length"/>
-          </xsl:call-template>
-        </xsl:if>
-      </fo:block>
-    </xsl:if>
-  </xsl:template>
-
-  <!-- Print 'Page n of N' text snippet. -->
-  <xsl:template name="page-of">
-    Page <fo:page-number/> of <fo:page-number-citation ref-id="endofdoc"/>
-  </xsl:template>
-
-  <!-- Empty stub for special table column values retrieval hook template -->
-  <xsl:template name="get-special-column-value"/>
-
-  <!--
-  Custom table headers for 'illustration-assumption-report'.
-  The special feature requested: the cell 'Net Crediting Rate'
-  to be nicely centered over two cells.
-  -->
-  <xsl:template name="illustration-assumption-custom-headers">
-    <fo:table-row>
-      <fo:table-cell number-rows-spanned="2">
-        <xsl:call-template name="header-cell-with-border"/>
-        <fo:block>Policy</fo:block>
-        <fo:block>Year</fo:block>
-      </fo:table-cell>
-      <fo:table-cell number-rows-spanned="2">
-        <xsl:call-template name="header-cell-with-border"/>
-        <fo:block>End of</fo:block>
-        <fo:block>Year Age</fo:block>
-      </fo:table-cell>
-      <fo:table-cell number-rows-spanned="2">
-        <xsl:call-template name="header-cell-with-border"/>
-        <fo:block/>
-      </fo:table-cell>
-      <fo:table-cell number-rows-spanned="2">
-        <xsl:call-template name="header-cell-with-border"/>
-        <fo:block>Sep Acct Net</fo:block>
-        <fo:block>Int Rate</fo:block>
-      </fo:table-cell>
-      <fo:table-cell number-rows-spanned="2">
-        <xsl:call-template name="header-cell-with-border"/>
-        <fo:block>Gen Acct</fo:block>
-        <fo:block>Current Rate</fo:block>
-      </fo:table-cell>
-      <fo:table-cell number-rows-spanned="2">
-        <xsl:call-template name="header-cell-with-border"/>
-        <fo:block>M&amp;E</fo:block>
-      </fo:table-cell>
-      <fo:table-cell number-rows-spanned="2">
-        <xsl:call-template name="header-cell-with-border"/>
-        <fo:block>Indiv</fo:block>
-        <fo:block>Pmt Mode</fo:block>
-      </fo:table-cell>
-      <fo:table-cell number-rows-spanned="2">
-        <xsl:call-template name="header-cell-with-border"/>
-        <fo:block>Corp</fo:block>
-        <fo:block>Pmt Mode</fo:block>
-      </fo:table-cell>
-      <fo:table-cell number-rows-spanned="2">
-        <xsl:call-template name="header-cell-with-border"/>
-        <fo:block>Assumed</fo:block>
-        <fo:block>Loan Interest</fo:block>
-      </fo:table-cell>
-    </fo:table-row>
-    <fo:table-row>
-      <fo:table-cell padding="2pt">
-        <fo:block/>
-      </fo:table-cell>
-    </fo:table-row>
-  </xsl:template>
-
-</xsl:stylesheet>
diff --git a/illustration_reg.xsl b/illustration_reg.xsl
deleted file mode 100644
index c80dd14..0000000
--- a/illustration_reg.xsl
+++ /dev/null
@@ -1,1805 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Life insurance illustrations.
-
-    Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 
2014, 2015, 2016, 2017, 2018 Gregory W. Chicares.
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License version 2 as
-    published by the Free Software Foundation.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-
-    http://savannah.nongnu.org/projects/lmi
-    email: <address@hidden>
-    snail: Chicares, 186 Belle Woods Drive, Glastonbury CT 06033, USA
--->
-<!DOCTYPE stylesheet [
-<!ENTITY nbsp "&#xA0;">
-]>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
xmlns:fo="http://www.w3.org/1999/XSL/Format"; version="1.0">
-  <xsl:import href="fo_common.xsl"/>
-  <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
-
-  <xsl:variable name="ModifiedSinglePremium">
-    <xsl:call-template name="set_modified_single_premium"/>
-  </xsl:variable>
-  <xsl:variable name="ModifiedSinglePremium0">
-    <xsl:call-template name="set_modified_single_premium0"/>
-  </xsl:variable>
-  <xsl:variable name="SinglePremium">
-    <xsl:call-template name="set_single_premium"/>
-  </xsl:variable>
-  <xsl:variable name="GroupExperienceRating">
-    <xsl:call-template name="set_group_experience_rating"/>
-  </xsl:variable>
-  <xsl:variable name="GroupCarveout">
-    <xsl:call-template name="set_group_carveout"/>
-  </xsl:variable>
-  <xsl:variable name="FlexiblePremium">
-    <xsl:call-template name="set_flexible_premium"/>
-  </xsl:variable>
-
-  <xsl:template match="/">
-    <fo:root>
-      <fo:layout-master-set>
-
-        <!-- Define the cover page. -->
-        <fo:simple-page-master master-name="cover">
-          <xsl:call-template name="set-page-size"/>
-          <fo:region-body margin=".1in .1in 0"/>
-        </fo:simple-page-master>
-
-        <!-- Define the narrative summary page. -->
-        <fo:simple-page-master master-name="narrative-summary">
-          <xsl:call-template name="set-page-size"/>
-          <!-- Central part of page -->
-          <fo:region-body margin=".5in 0 1in"/>
-          <!-- Header -->
-          <fo:region-before extent="3in"/>
-          <!-- Footer -->
-          <fo:region-after extent=".5in"/>
-        </fo:simple-page-master>
-
-        <!-- Define the column headings and key terms page. -->
-        <fo:simple-page-master master-name="column-headings-and-key-terms">
-          <xsl:call-template name="set-page-size"/>
-          <!-- Central part of page -->
-          <fo:region-body margin=".15in 0 .45in"/>
-          <!-- Header -->
-          <fo:region-before extent="2in"/>
-          <!-- Footer -->
-          <fo:region-after extent="0.45in"/>
-        </fo:simple-page-master>
-
-        <!-- Define the Numeric Summary page. -->
-        <fo:simple-page-master master-name="numeric-summary">
-          <xsl:call-template name="set-page-size"/>
-          <!-- Central part of page -->
-          <fo:region-body margin="3.1in 0 .52in"/>
-          <!-- Header -->
-          <fo:region-before extent="3.1in"/>
-          <!-- Footer -->
-          <fo:region-after extent="0.52in"/>
-        </fo:simple-page-master>
-
-        <!-- Define the Tabular Detail page. -->
-        <fo:simple-page-master master-name="tabular-detail">
-          <xsl:call-template name="set-page-size"/>
-          <!-- Central part of page -->
-          <fo:region-body margin="3.1in 0 1.3in"/>
-          <!-- Header -->
-          <fo:region-before extent="3.1in"/>
-          <!-- Footer -->
-          <fo:region-after extent="1.27in"/>
-        </fo:simple-page-master>
-
-        <!-- Define the Tabular Detail (Report 2) page. -->
-        <fo:simple-page-master master-name="tabular-detail-report2">
-          <xsl:call-template name="set-page-size"/>
-          <!-- Central part of page -->
-          <fo:region-body margin="3.2in 0 1.35in"/>
-          <!-- Header -->
-          <fo:region-before extent="3.1in"/>
-          <!-- Footer -->
-          <fo:region-after extent="1.27in"/>
-        </fo:simple-page-master>
-
-        <!-- Define the Supplemental Report page. -->
-        <xsl:if test="$has_supplemental_report">
-          <fo:simple-page-master master-name="supplemental-report">
-            <xsl:call-template name="set-page-size"/>
-            <!-- Central part of page -->
-            <fo:region-body margin="3in 0 1.25in"/>
-            <!-- Header -->
-            <fo:region-before extent="3.0in"/>
-            <!-- Footer -->
-            <fo:region-after extent="1.27in"/>
-          </fo:simple-page-master>
-        </xsl:if>
-
-        <!-- Define the Numeric Summary Attachment page. -->
-        <fo:simple-page-master master-name="numeric-summary-attachment">
-          <xsl:call-template name="set-page-size"/>
-          <!-- Central part of page -->
-          <fo:region-body margin="3.1in 0 .52in"/>
-          <!-- Header -->
-          <fo:region-before extent="3.1in"/>
-          <!-- Footer -->
-          <fo:region-after extent="0.52in"/>
-        </fo:simple-page-master>
-
-      </fo:layout-master-set>
-
-      <!-- The data to be displayed in the pages, cover page first. -->
-      <xsl:call-template name="generic-cover"/>
-
-      <!-- NARRATIVE SUMMARY - begins here -->
-      <fo:page-sequence master-reference="narrative-summary" 
initial-page-number="1">
-
-        <!-- Define the contents of the header. -->
-        <fo:static-content flow-name="xsl-region-before">
-          <fo:block text-align="left">
-            <xsl:call-template name="company-logo"/>
-          </fo:block>
-        </fo:static-content>
-
-        <!-- Define the contents of the footer. -->
-        <xsl:call-template name="standardfooter"/>
-
-        <!-- Narrative Summary Body  -->
-        <fo:flow flow-name="xsl-region-body">
-          <xsl:call-template name="standardheader"/>
-          <fo:block text-align="center" font-size="10pt" padding-top="1em">
-            NARRATIVE SUMMARY
-          </fo:block>
-          <fo:block text-align="left" font-size="9pt" font-family="sans-serif">
-            <fo:block padding-top="1em">
-              <!-- Single Premium Logic -->
-              <xsl:choose>
-                <xsl:when test="$SinglePremium!='1'">
-                  <xsl:value-of select="$scalars/PolicyMktgName"/> is a
-                  <!-- Group Experience Rating Logic -->
-                  <xsl:if test="$GroupExperienceRating='1'">
-                    group
-                  </xsl:if>
-                  <xsl:if test="$GroupCarveout='1'">
-                    group
-                  </xsl:if>
-                  flexible premium adjustable life insurance contract.
-                  <!-- Group Experience Rating Logic -->
-                  <xsl:if test="$GroupExperienceRating='1'">
-                    It is a no-load policy and is intended for large case 
sales.
-                    It is primarily marketed to financial institutions
-                    to fund certain corporate liabilities.
-                  </xsl:if>
-                  It features accumulating account values, adjustable benefits,
-                  and flexible premiums.
-                </xsl:when>
-                <xsl:when test="$ModifiedSinglePremium='1' or 
$ModifiedSinglePremium0='1'">
-                  <xsl:value-of select="$scalars/PolicyMktgName"/>
-                  is a modified single premium adjustable life
-                  insurance contract. It features accumulating
-                  account values, adjustable benefits, and single premium.
-                </xsl:when>
-                <xsl:otherwise>
-                  <xsl:value-of select="$scalars/PolicyMktgName"/>
-                  is a single premium adjustable life insurance contract.
-                  It features accumulating account values,
-                  adjustable benefits, and single premium.
-                </xsl:otherwise>
-              </xsl:choose>
-            </fo:block>
-            <xsl:if test="$scalars/IsInforce!='1'">
-              <fo:block padding-top="1em">
-                Coverage may be available on a Guaranteed Standard Issue basis.
-                All proposals are based on case characteristics and must
-                be approved by the <xsl:value-of 
select="$scalars/InsCoShortName"/>
-                Home Office. For details regarding underwriting
-                and coverage limitations refer to your offer letter
-                or contact your <xsl:value-of 
select="$scalars/InsCoShortName"/>
-                representative.
-              </fo:block>
-            </xsl:if>
-            <!-- Group Experience Rating Logic -->
-            <fo:block padding-top="1em">
-              <xsl:value-of select="$scalars/AvName"/>&nbsp;
-              <xsl:value-of select="$scalars/MonthlyChargesPaymentFootnote"/>
-            </fo:block>
-            <fo:block padding-top="1em">
-              <xsl:choose>
-                <!-- Single Premium Logic -->
-                <xsl:when test="$SinglePremium!='1'">
-                  Premiums are assumed to be paid on
-                  a<xsl:if 
test="address@hidden'ErMode']/duration[1]/@column_value='Annual'">n </xsl:if>
-                  <xsl:value-of 
select="translate(address@hidden'ErMode']/duration[1]/@column_value,$ucletters,$lcletters)"/>
-                  basis and received at the beginning of the contract year.
-                </xsl:when>
-                <xsl:otherwise>
-                  The single premium is assumed to be paid at the beginning
-                  of the contract year.
-                </xsl:otherwise>
-              </xsl:choose>
-              <xsl:value-of select="$scalars/AvName"/> Values,
-              <xsl:value-of select="$scalars/CsvName"/> Values,
-              and death benefits are illustrated as of the end
-              of the contract year. The method we use to allocate
-              overhead expenses is the fully allocated expense method.
-            </fo:block>
-            <!-- Single Premium Logic -->
-            <xsl:if test="$SinglePremium!='1'">
-              <fo:block padding-top="1em">
-                In order to guarantee coverage to age
-                <xsl:value-of select="$scalars/EndtAge"/>,
-                a<xsl:if 
test="address@hidden'ErMode']/duration[1]/@column_value='Annual'">n </xsl:if>
-                <xsl:value-of 
select="translate(address@hidden'ErMode']/duration[1]/@column_value,$ucletters,$lcletters)"/>
-                premium
-                <xsl:choose>
-                  <xsl:when test="$scalars/GuarPrem!='0'">
-                    of $<xsl:value-of select="$scalars/GuarPrem"/>
-                    must be paid.
-                  </xsl:when>
-                  <xsl:otherwise>
-                    is defined.
-                  </xsl:otherwise>
-                </xsl:choose>
-                This amount is based on the guaranteed monthly charges
-                and the guaranteed interest crediting rate.
-                <xsl:if test="$scalars/DefnLifeIns='GPT'">
-                  This premium may be in excess of the maximum premium 
allowable
-                  in order to qualify this policy as life insurance.
-                </xsl:if>
-              </fo:block>
-            </xsl:if>
-            <fo:block padding-top="1em">
-              Loaned amounts of the <xsl:value-of select="$scalars/AvName"/>
-              Value will be credited a rate equal to the loan interest rate 
less
-              a spread, guaranteed not to exceed
-              <xsl:choose>
-                <xsl:when test="$GroupCarveout='1'">
-<!-- This is what it should really be, but it needs to be made available
-to the xsl files first.
-              <xsl:value-of select="$scalars/GuarRegLoanSpread"/>.
--->
-                  1.25%
-                </xsl:when>
-                <xsl:otherwise>
-                  3.00%.
-                </xsl:otherwise>
-              </xsl:choose>
-            </fo:block>
-            <xsl:if test="$scalars/HasTerm='1'">
-              <fo:block padding-top="1em">
-                The term rider provides the option to purchase monthly
-                term insurance on the life of the insured. The term rider
-                selected face amount supplements the selected face amount
-                of the contract. If the term rider is attached, the policy
-                to which it is attached may have a lower annual cutoff premium
-                and, as a result, the lower overall sales loads paid may be
-                lower than a contract having the same total face amount,
-                but with no term rider.
-                <xsl:if test="$scalars/NoLapse='1'">
-                  Also, the lapse protection feature of the contract's
-                  <xsl:value-of select="$scalars/NoLapseProvisionName"/>
-                  does not apply to the term rider's selected face amount.
-                </xsl:if>
-              </fo:block>
-            </xsl:if>
-            <xsl:if test="$scalars/HasWP='1'">
-              <fo:block padding-top="1em">
-                The Waiver of Monthly Charges Rider provides for waiver
-                of monthly charges in the event of the disability
-                of the insured that begins before attained age 65
-                and continues for at least 6 months, as described in the rider.
-                An additional charge is associated with this rider. Please 
refer
-                to your contract for specific provisions and a detailed 
schedule
-                of charges.
-              </fo:block>
-            </xsl:if>
-            <xsl:if test="$scalars/HasADD='1'">
-              <fo:block padding-top="1em">
-                The Accidental Death benefit provides an additional benefit
-                if death is due to accident. An additional charge is associated
-                with this rider. Please refer to your contract
-                for specific provisions and a detailed schedule of charges.
-              </fo:block>
-            </xsl:if>
-            <fo:block padding-top="1em">
-              The definition of life insurance for this contract is the
-              <xsl:choose>
-                <xsl:when test="$scalars/DefnLifeIns='GPT'">
-                  guideline premium test. The guideline single premium
-                  is $<xsl:value-of select="$scalars/InitGSP"/>
-                  and the guideline level premium
-                  is $<xsl:value-of select="$scalars/InitGLP"/>
-                </xsl:when>
-                <xsl:otherwise>
-                  cash value accumulation test.
-                </xsl:otherwise>
-              </xsl:choose>
-            </fo:block>
-            <fo:block padding-top="1em">
-              This is an illustration only. An illustration is not intended
-              to predict actual performance. Interest rates
-              <xsl:if test="$scalars/Participating='1'">, dividends,</xsl:if>
-              and values set forth in the illustration are not guaranteed.
-            </fo:block>
-            <fo:block padding-top="1em">
-<!-- Retain this logic in case the inforce footnotes are ever needed again.
-              <xsl:choose>
-                <xsl:when test="$scalars/IsInforce='1'">
-                  <xsl:if test="$SinglePremium='1'">
-                    <xsl:value-of 
select="$scalars/InforceNonGuaranteedFootnote0"/>
-                  </xsl:if>
-                  <xsl:if test="$FlexiblePremium='1'">
-                    <xsl:value-of 
select="$scalars/InforceNonGuaranteedFootnote0"/>
-                  </xsl:if>
-                  <xsl:if test="$SinglePremium!='1'">
-                    <xsl:if test="$FlexiblePremium!='1'">
-                      <fo:block>
-                        <xsl:choose>
-                          <xsl:when test="$scalars/StatePostalAbbrev!='TX'">
-                            This illustration assumes that the currently 
illustrated
-                            non-guaranteed elements will continue unchanged
-                            for all years shown. This is not likely to occur
-                            and actual results may be more or less favorable 
than shown.
-                            The non-guaranteed benefits and values are not 
guaranteed
-                            and are based on assumptions such as interest 
credited
-                            and current monthly charges, which are subject to 
change by
-                            <xsl:value-of select="$scalars/InsCoName"/>.
-                          </xsl:when>
-                          <xsl:otherwise>
-                            This illustration is based on both non-guaranteed
-                            and guaranteed assumptions. Non-guaranteed 
assumptions
-                            include interest rates and monthly charges.
-                            This illustration assumes that the currently 
illustrated
-                            non-guaranteed elements will continue unchanged
-                            for all years shown. This is not likely to occur
-                            and actual results may be more or less favorable 
than shown.
-                            Factors that may affect future policy performance 
include
-                            the company's expectations for future mortality, 
investments,
-                            persistency, profits and expenses.
-                          </xsl:otherwise>
-                        </xsl:choose>
-                      </fo:block>
-                    </xsl:if>
-                  </xsl:if>
-                </xsl:when>
-                <xsl:otherwise>
--->
-                  <fo:block>
-                    <xsl:choose>
-                      <xsl:when test="$scalars/StatePostalAbbrev!='TX'">
-                        This illustration assumes that the currently 
illustrated
-                        non-guaranteed elements will continue unchanged
-                        for all years shown. This is not likely to occur
-                        and actual results may be more or less favorable than 
shown.
-                        The non-guaranteed benefits and values are not 
guaranteed
-                        and are based on assumptions such as interest credited
-                        and current monthly charges, which are subject to 
change by
-                        <xsl:value-of select="$scalars/InsCoName"/>.
-                      </xsl:when>
-                      <xsl:otherwise>
-                        This illustration is based on both non-guaranteed
-                        and guaranteed assumptions. Non-guaranteed assumptions
-                        include interest rates and monthly charges.
-                        This illustration assumes that the currently 
illustrated
-                        non-guaranteed elements will continue unchanged
-                        for all years shown. This is not likely to occur
-                        and actual results may be more or less favorable than 
shown.
-                        Factors that may affect future policy performance 
include
-                        the company's expectations for future mortality, 
investments,
-                        persistency, profits and expenses.
-                      </xsl:otherwise>
-                    </xsl:choose>
-                  </fo:block>
-<!-- Retain this logic in case the inforce footnotes are ever needed again.
-                </xsl:otherwise>
-              </xsl:choose>
--->
-            </fo:block>
-<!-- Retain this logic in case the inforce footnotes are ever needed again.
-            <xsl:if test="$scalars/IsInforce='1'">
-              <fo:block font-weight="bold" font-style="italic" 
text-align="center" padding-top="10em">
-                <xsl:value-of select="$scalars/InforceNonGuaranteedFootnote1"/>
-              </fo:block>
-              <fo:block font-weight="bold" font-style="italic" 
padding-top="1em">
-                <xsl:value-of select="$scalars/InforceNonGuaranteedFootnote2"/>
-              </fo:block>
-            </xsl:if>
--->
-          </fo:block>
-
-          <!-- Force Second Page -->
-          <fo:block break-after="page"/>
-          <fo:block text-align="center" font-size="10pt">
-            NARRATIVE SUMMARY (Continued)
-          </fo:block>
-          <fo:block text-align="left" font-size="9pt" font-family="sans-serif">
-            <xsl:if test="$scalars/SalesLoadRefund!='0%'">
-              <fo:block padding-top="2em">
-                Sales Load Refund: We will refund a portion of the sales load
-                to you, as part of your <xsl:value-of 
select="$scalars/CsvName"/>
-                Value, if you surrender your contract within the first two
-                policy years. In policy year 1, we will refund
-                <xsl:value-of select="$scalars/SalesLoadRefundRate0"/>
-                of the first contract year sales load collected
-                and in contract year 2, we will refund
-                <xsl:value-of select="$scalars/SalesLoadRefundRate1"/>
-                of the first contract year sales load collected.
-              </fo:block>
-            </xsl:if>
-            <xsl:if test="$scalars/NoLapse='1'">
-              <fo:block padding-top="1em">
-                <xsl:value-of select="$scalars/NoLapseProvisionName"/>:
-                The contract will remain in force after the first premium
-                has been paid, even if there is insufficient
-                <xsl:value-of select="$scalars/AvName"/> Value
-                to cover the monthly charges provided that the insured
-                is not in a substandard rating class and the policy debt
-                does not exceed <xsl:value-of select="$scalars/AvName"/> Value.
-              </fo:block>
-            </xsl:if>
-            <fo:block padding-top="1em">
-              <xsl:value-of select="$scalars/GuarMortalityFootnote"/>
-            </fo:block>
-            <fo:block padding-top="1em">
-              This illustration assumes death of the insured
-              at age <xsl:value-of select="$scalars/EndtAge"/>.
-            </fo:block>
-            <fo:block padding-top="1em">
-              The loan interest rate is fixed
-              at <xsl:value-of select="$scalars/InitAnnLoanDueRate"/> per year.
-            </fo:block>
-            <fo:block padding-top="1em">
-              The state of issue
-              is <xsl:value-of select="$scalars/StatePostalAbbrev"/>.
-            </fo:block>
-            <fo:block padding-top="1em">
-              This illustration assumes an initial Selected Face Amount of
-              $<xsl:value-of select="$scalars/InitBaseSpecAmt"/>. Selected Face
-              Amount reductions assumed in this illustration (if any) are shown
-              in the Tabular Detail.
-            </fo:block>
-            <xsl:if test="$scalars/IsInforce='1'">
-              <fo:block padding-top="1em">
-                This illustration assumes a beginning account value of
-                $<xsl:value-of select="$scalars/InforceUnloanedAV"/> as
-                of the date of this illustration.
-              </fo:block>
-            </xsl:if>
-            <xsl:if test="$scalars/IsInforce='1'">
-              <fo:block padding-top="1em">
-                This illustration assumes a beginning cost basis of
-                $<xsl:value-of select="$scalars/InforceTaxBasis"/> as
-                of the date of this illustration; the actual cost basis
-                may be higher or lower. Consult the Home Office for cost
-                basis information.
-              </fo:block>
-            </xsl:if>
-            <xsl:if test="$is_composite">
-              <fo:block padding-top="1em">
-                Please see the attached census, listing the face amounts,
-                underwriting classes and issue ages for individual 
participants.
-              </fo:block>
-            </xsl:if>
-            <xsl:if test="$scalars/StatePostalAbbrev='NC' or 
$scalars/StatePostalAbbrev='SC'">
-              <fo:block padding-top="1em">
-                In the states of North Carolina and South Carolina,
-                Guaranteed Issue Underwriting is referred
-                to as "Limited Underwriting" and Simplified
-                Issue Underwriting is referred to as "Simplified Underwriting".
-              </fo:block>
-            </xsl:if>
-            <xsl:if test="$scalars/StatePostalAbbrev='MD'">
-              <fo:block padding-top="1em">
-                In the state of Maryland, Guaranteed Issue Underwriting
-                is referred to as "Nonstandard Limited Underwriting"
-                and Simplified Issue Underwriting is referred to as
-                "Nonstandard Simplified Underwriting".
-              </fo:block>
-            </xsl:if>
-            <!-- Group Experience Rating Logic -->
-            <xsl:if test="$GroupExperienceRating='1'">
-              <fo:block padding-top="1em">
-                We may assess a Market Value Adjustment upon a surrender
-                of the certificate when the surrender proceeds are intended
-                to be applied to an insurance policy issued by an insurer
-                unaffiliated with
-                <xsl:value-of select="$scalars/InsCoShortName"/>
-                with an intent to qualify the exchange as a tax free exchange
-                under IRC section 1035.
-              </fo:block>
-              <xsl:if test="$scalars/UseExperienceRating!='1'">
-                <fo:block padding-top="1em">
-                  This illustration does not reflect experience rating.
-                </fo:block>
-              </xsl:if>
-              <fo:block padding-top="1em">
-                The guaranteed values reflect the maximum charges permitted
-                by the contract, which may include an Experience Rating
-                Risk Charge.
-              </fo:block>
-              <fo:block padding-top="1em">
-                No Experience Rating Risk Charge or a distribution
-                of an Experience Rating Reserve Credit is reflected
-                in the current, non-guaranteed values. Actual charges
-                and credits will be based on the actual experience of the 
group.
-              </fo:block>
-            </xsl:if>
-            <xsl:if test="$scalars/Has1035ExchCharge='1'">
-              <!-- Single Premium Logic -->
-              <xsl:choose>
-                <xsl:when test="$SinglePremium!='1'">
-                  <xsl:if test="$scalars/Has1035ExchCharge='1'">
-                    <fo:block padding-top="1em">
-                      Upon surrender of this policy, where the surrender
-                      proceeds are intended to be applied to an insurance 
policy
-                      or certificate issued in conjunction with an intent
-                      to qualify the exchange as a tax free exchange
-                      under Section 1035 of the Internal Revenue Code,
-                      we may assess an Exchange Charge. The Exchange Charge
-                      is the greater of the Market Value Adjustment Charge
-                      and the Percentage of Premium Charge. In the states
-                      of Florida or Indiana, the Exchange charge
-                      (referred to as Assignment Charge in Florida)
-                      will be the Percentage of Premium Charge only.
-                      The Exchange Charge will potentially reduce
-                      the surrender proceeds, but will never increase
-                      the surrender proceeds. Please refer to your policy
-                      for details.
-                    </fo:block>
-                  </xsl:if>
-                </xsl:when>
-                <xsl:otherwise>
-                  <fo:block padding-top="1em">
-                    Upon surrender of this policy, where the surrender proceeds
-                    are intended to be applied to an insurance policy
-                    or certificate issued in conjunction with an intent
-                    to qualify the exchange as a tax free exchange
-                    under Section 1035 of the Internal Revenue Code (1035
-                    Exchange), we may assess an Exchange Charge. The Exchange
-                    Charge will potentially reduce the surrender proceeds,
-                    but will never increase the surrender proceeds.
-                    Please refer to your policy for details.
-                  </fo:block>
-                </xsl:otherwise>
-              </xsl:choose>
-            </xsl:if>
-            <xsl:if test="$scalars/HasSpouseRider='1'">
-              <fo:block padding-top="1em">
-                The $<xsl:value-of select="$scalars/SpouseRiderAmount"/> Spouse
-                rider provides term life insurance on the spouse
-                (issue age <xsl:value-of select="$scalars/SpouseIssueAge"/>)
-                for a limited duration, for an extra charge.
-                Please refer to your contract for specific provisions
-                and a detailed schedule of charges.
-              </fo:block>
-            </xsl:if>
-            <xsl:if test="$scalars/HasChildRider='1'">
-              <fo:block padding-top="1em">
-                The $<xsl:value-of select="$scalars/ChildRiderAmount"/> Child
-                rider provides term life insurance on the insured's children
-                for a limited duration, for an extra charge. Please refer
-                to your contract for specific provisions
-                and a detailed schedule of charges.
-              </fo:block>
-            </xsl:if>
-            <fo:block padding-top="1em">
-              <xsl:value-of select="$scalars/SurrenderFootnote"/>
-            </fo:block>
-            <fo:block padding-top="1em">
-             <xsl:value-of select="$scalars/FundRateFootnote"/>
-            </fo:block>
-            <fo:block>
-              &nbsp;&nbsp;<xsl:value-of select="$scalars/FundRateFootnote0"/>
-            </fo:block>
-            <fo:block>
-              &nbsp;&nbsp;<xsl:value-of select="$scalars/FundRateFootnote1"/>
-            </fo:block>
-
-            <fo:block font-weight="bold" text-align="center" padding-top="1em">
-              IMPORTANT TAX DISCLOSURE
-            </fo:block>
-            <fo:block padding-top="1em">
-              As illustrated, this contract
-              <xsl:choose>
-                <xsl:when test="$scalars/IsMec='1'">
-                  becomes
-                </xsl:when>
-                <xsl:otherwise>
-                  would not become
-                </xsl:otherwise>
-              </xsl:choose>
-              a Modified Endowment Contract (MEC)
-              under the Internal Revenue Code<!-- prevent trailing space -->
-              <xsl:if test="$scalars/IsMec='1'">
-                in year <xsl:value-of select="$scalars/MecYear+1"/>
-              </xsl:if>.
-              To the extent of gain in the contract, loans, distributions
-              and withdrawals from a MEC are subject to income tax
-              and may also trigger a penalty tax.
-            </fo:block>
-            <!-- Single Premium Logic -->
-            <xsl:if test="$SinglePremium!='1' and $scalars/IsInforce!='1'">
-              <fo:block padding-top="1em">
-                The initial 7-pay premium limit
-                is $<xsl:value-of select="$scalars/InitSevenPayPrem"/>.
-              </fo:block>
-            </xsl:if>
-            <fo:block font-weight="bold" padding-top="1em">
-              The information contained in this illustration is not written
-              or intended as tax or legal advice, and may not be relied upon
-              for purposes of avoiding any federal tax penalties.
-              Neither <xsl:value-of select="$scalars/InsCoShortName"/> nor any
-              of its employees or representatives are authorized to give tax
-              or legal advice. For more information pertaining
-              to the tax consequences of purchasing or owning this policy,
-              consult with your own independent tax or legal counsel.
-            </fo:block>
-          </fo:block>
-        </fo:flow>
-      </fo:page-sequence>
-
-      <!-- Column Headings and Key Terms - begins here -->
-      <fo:page-sequence master-reference="column-headings-and-key-terms">
-
-        <!-- Define the contents of the header. -->
-        <fo:static-content flow-name="xsl-region-before">
-          <fo:block text-align="left">
-            <xsl:call-template name="company-logo"/>
-          </fo:block>
-        </fo:static-content>
-
-        <!-- Define the contents of the footer. -->
-        <xsl:call-template name="standardfooter"/>
-
-        <!-- Column Headings and Key Terms Body  -->
-        <fo:flow flow-name="xsl-region-body">
-          <fo:block text-align="center" font-size="10pt" padding-top="1em">
-            Column Headings and Key Terms Used in This Illustration
-          </fo:block>
-          <fo:block text-align="left" font-size="9pt" font-family="sans-serif" 
padding-top="1em">
-            <fo:block>
-              <fo:inline font-weight="bold">
-                <xsl:value-of select="$scalars/AvName"/> Value:
-              </fo:inline>
-              The accumulation at interest of the net premiums paid,
-              <xsl:if test="$SinglePremium!='1'">
-                less any withdrawals,
-              </xsl:if>
-              less any monthly charges deducted.
-            </fo:block>
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">
-                <xsl:value-of select="$scalars/CsvName"/> Value:
-              </fo:inline>
-              <xsl:value-of select="$scalars/AvName"/> Value less policy debt.
-              <xsl:if test="$scalars/Has1035ExchCharge='1'">
-                <xsl:value-of select="$scalars/CashSurrValueFootnote"/>
-              </xsl:if>
-            </fo:block>
-            <xsl:if test="$scalars/IsInforce!='1'">
-              <fo:block padding-top="1em">
-                <fo:inline font-weight="bold">
-                  Current Illustrated Crediting Rate:
-                </fo:inline>
-                  <xsl:value-of select="$scalars/CreditingRateFootnote"/>
-              </fo:block>
-            </xsl:if>
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">
-                Current Values:
-              </fo:inline>
-              Values assuming current interest crediting rates
-              and current monthly charges. These values are not guaranteed
-              and are based on the assumption that premium is paid
-              as illustrated.
-            </fo:block>
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">
-                Death Benefit:
-              </fo:inline>
-              The amount of benefit provided by the Death Benefit Option
-              in effect on the date of death, prior to adjustments
-              for policy debt and monthly charges payable to the date of death.
-            </fo:block>
-<!--
-Presumably the description of death benefit options should be moved into
-'ProductDescription' (as has already been done in other '.xsl' files).
--->
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">
-                Death Benefit Option 1:
-              </fo:inline>
-              Option in which the death benefit is equal to the selected
-              face amount of the contract on the date of death of the insured,
-              or if greater the <xsl:value-of select="$scalars/AvName"/> Value
-              <xsl:if test="$scalars/SalesLoadRefund!='0%'">
-                plus the refund of sales loads (if applicable)
-              </xsl:if>
-              on the insured's date of death multiplied by the minimum face
-              amount percentage for the insured's attained age at death
-              (minimum face amount). Please refer to the contract
-              for a detailed schedule of death benefit factors.
-            </fo:block>
-            <!-- Group Experience Rating Logic -->
-            <xsl:if test="$GroupExperienceRating!='1'">
-              <fo:block padding-top="1em">
-                <fo:inline font-weight="bold">
-                  Death Benefit Option 2:
-                </fo:inline>
-                Option in which the death benefit is equal to the selected
-                face amount of the contract
-                plus the <xsl:value-of select="$scalars/AvName"/> Value
-                on the date of death of the insured, or if greater,
-                the <xsl:value-of select="$scalars/AvName"/> Value
-                <xsl:if test="$scalars/SalesLoadRefund!='0%'">
-                  plus the refund of sales loads (if applicable)
-                </xsl:if>
-                on the insured's date of death multiplied
-                by the death benefit factor for the insured's attained age
-                at death (minimum face amount). Please refer to the contract
-                for a detailed schedule of death benefit factors.
-              </fo:block>
-            </xsl:if>
-            <!-- Group Experience Rating Logic -->
-            <xsl:if test="$GroupExperienceRating='1'">
-              <fo:block padding-top="1em">
-                <fo:inline font-weight="bold">
-                  Experience Rating Risk Charge:
-                </fo:inline>
-                Applies only to certain experience rated groups.
-                This charge is based on the cost of insurance charges
-                assessed during the certificate year. It may be assessed 
against
-                the account value once per certificate anniversary date
-                and upon surrender of the group policy.
-              </fo:block>
-            </xsl:if>
-            <!-- Group Experience Rating Logic -->
-            <xsl:if test="$GroupExperienceRating!='1'">
-              <xsl:if test="$scalars/Has1035ExchCharge='1'">
-                <fo:block padding-top="1em">
-                  <fo:inline font-weight="bold">
-                    Exchange Charge:
-                  </fo:inline>
-                    <xsl:value-of select="$scalars/ExchangeChargeFootnote1"/>
-                </fo:block>
-              </xsl:if>
-            </xsl:if>
-
-            <!-- Single Premium Logic -->
-            <xsl:if test="$SinglePremium='0'">
-              <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">
-                Flexible Premiums:
-              </fo:inline>
-              Premiums that may be increased, reduced, or not paid,
-              if the account value is sufficient to cover the monthly charges.
-              </fo:block>
-            </xsl:if>
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">
-                Guaranteed Values:
-              </fo:inline>
-              Values assuming the guaranteed crediting rate
-              and the guaranteed maximum monthly charges. These values
-              are based on the assumption that premium is paid as illustrated.
-            </fo:block>
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">
-                MEC:
-              </fo:inline>
-              Modified Endowment Contract - this classification is given
-              to a contract in violation of TAMRA
-              (Technical and Miscellaneous Revenue Act), which limits
-              the amount of premium that can be paid into a life
-              insurance contract. To the extent of gain in the contract, loans,
-              distributions and withdrawals from a MEC are subject
-              to income tax and may also trigger a tax penalty.
-            </fo:block>
-            <xsl:if test="$scalars/IsInforce!='1'">
-              <fo:block padding-top="1em">
-                <fo:inline font-weight="bold">
-                  Midpoint Values:
-                </fo:inline>
-                Values assuming interest rates that are the average
-                of the illustrated current crediting rates
-                and the guaranteed minimum interest rate, and monthly charges
-                that are the average of the current monthly charges
-                and the guaranteed monthly charges.
-                These values are not guaranteed and are based on the assumption
-                that premium is paid as illustrated.
-              </fo:block>
-            </xsl:if>
-            <!-- Single Premium Logic -->
-            <xsl:if test="$ModifiedSinglePremium='1' or 
$ModifiedSinglePremium0='1'">
-              <fo:block padding-top="1em">
-                <fo:inline font-weight="bold">
-                  Modified Single Premium:
-                </fo:inline>
-                After the single premium is paid, additional payment
-                under this policy will only be accepted for repayment
-                of policy debt, payment required to keep the policy
-                from lapsing, or payment required to reinstate the policy.
-              </fo:block>
-            </xsl:if>
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">
-                Monthly Charges:
-              </fo:inline>
-              The monthly charges for the following month which include:
-              cost of insurance, plus face amount charges (if applicable),
-              plus the administrative charge shown
-              on the contract schedule page.
-            </fo:block>
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">
-                Premium Outlay:
-              </fo:inline>
-              The amount of premium assumed to be paid by the contract owner
-              or other premium payor.
-            </fo:block>
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">
-                Selected Face Amount:
-              </fo:inline>
-              The Selected Face Amount may be decreased upon written 
application
-              satisfactory to <xsl:value-of select="$scalars/InsCoName"/>. A
-              requested decrease is allowed only once per Policy Year, and the
-              resulting Selected Face Amount after decrease must meet the
-              minimum defined in your policy.
-            </fo:block>
-            <!-- Single Premium Logic -->
-            <xsl:if test="$SinglePremium='1' and $ModifiedSinglePremium0='0' 
and $ModifiedSinglePremium='0'">
-              <fo:block padding-top="1em">
-                <fo:inline font-weight="bold">
-                  Single Premium:
-                </fo:inline>
-                After the single premium is paid, additional payment
-                under this policy will only be accepted for repayment
-                of policy debt, payment required to keep the policy
-                from lapsing, or payment required to reinstate the policy.
-              </fo:block>
-            </xsl:if>
-            <!-- Single Premium Logic -->
-            <xsl:if test="$SinglePremium='1'">
-              <fo:block padding-top="1em">
-                <fo:inline font-weight="bold">
-                  Ultimate Illustrated Crediting Rate:
-                </fo:inline>
-                  <xsl:value-of select="$scalars/UltCreditingRateFootnote"/>
-              </fo:block>
-            </xsl:if>
-          </fo:block>
-        </fo:flow>
-      </fo:page-sequence>
-
-      <xsl:if test="$scalars/IsInforce!='1'">
-        <!-- Numeric Summary (only for new business)-->
-        <!-- Body page -->
-        <fo:page-sequence master-reference="numeric-summary">
-          <!-- Define the contents of the header. -->
-          <fo:static-content flow-name="xsl-region-before">
-            <fo:block text-align="left">
-              <xsl:call-template name="company-logo"/>
-            </fo:block>
-            <xsl:call-template name="standardheader"/>
-            <fo:block text-align="center" font-size="10.0pt" 
space-before="5pt">
-              Numeric Summary
-            </fo:block>
-            <xsl:call-template name="dollar-units"/>
-          </fo:static-content>
-
-          <!-- Define the contents of the footer. -->
-          <xsl:call-template name="standardfooter"/>
-
-          <xsl:call-template name="numeric-summary-report"/>
-        </fo:page-sequence>
-      </xsl:if>
-
-      <!-- Tabular Detail -->
-      <!-- Body page -->
-      <fo:page-sequence master-reference="tabular-detail">
-
-        <!-- Define the contents of the header. -->
-        <fo:static-content flow-name="xsl-region-before">
-          <fo:block text-align="left">
-            <xsl:call-template name="company-logo"/>
-          </fo:block>
-          <xsl:call-template name="standardheader"/>
-          <fo:block text-align="center" font-size="10pt" space-before="5.0pt">
-            Tabular Detail
-          </fo:block>
-          <xsl:call-template name="dollar-units"/>
-        </fo:static-content>
-
-        <!-- Define the contents of the footer. -->
-        <xsl:call-template name="standardfooter">
-          <xsl:with-param name="disclaimer">
-            <fo:block padding-top="1em">
-              <xsl:choose>
-                <xsl:when test="$scalars/IsInforce!='1'">
-                  <xsl:value-of select="$scalars/NonGuaranteedFootnote"/>
-                </xsl:when>
-                <xsl:otherwise>
-                  <fo:block>
-                    <xsl:value-of 
select="$scalars/InforceNonGuaranteedFootnote0"/>
-                  </fo:block>
-                  <fo:block font-weight="bold">
-                    <xsl:value-of 
select="$scalars/InforceNonGuaranteedFootnote3"/>
-                  </fo:block>
-                </xsl:otherwise>
-              </xsl:choose>
-            </fo:block>
-          </xsl:with-param>
-        </xsl:call-template>
-
-        <fo:flow flow-name="xsl-region-body">
-          <xsl:variable name="tabular-detail-report-columns">
-            <column name="PolicyYear">                               | Policy 
_Year    </column>
-            <column composite="0" name="AttainedAge">                | End of 
_Year Age</column>
-            <column name="GrossPmt">                                 | Premium 
_Outlay </column>
-            <column name="AcctVal_Guaranteed">      Guaranteed Values| Account 
_Value  </column>
-            <column name="CSVNet_Guaranteed">       Guaranteed Values| Cash 
Surr _Value</column>
-            <column name="EOYDeathBft_Guaranteed">  Guaranteed Values| Death 
_Benefit  </column>
-            <column/>
-            <column name="AcctVal_Current">     Non-Guaranteed Values| Account 
_Value  </column>
-            <column name="CSVNet_Current">      Non-Guaranteed Values| Cash 
Surr _Value</column>
-            <column name="EOYDeathBft_Current"> Non-Guaranteed Values| Death 
_Benefit  </column>
-          </xsl:variable>
-          <xsl:variable name="tabular-detail-report-columns-raw" 
select="document('')//xsl:address@hidden'tabular-detail-report-columns']/column"/>
-          <xsl:variable name="columns" 
select="$tabular-detail-report-columns-raw[not(@composite) or 
boolean(boolean(@composite='1')=$is_composite)]"/>
-
-          <fo:block font-size="9pt" font-family="serif">
-            <fo:table table-layout="fixed" width="100%">
-              <xsl:call-template name="generate-table-columns">
-                <xsl:with-param name="columns" select="$columns"/>
-              </xsl:call-template>
-
-              <fo:table-header>
-                <xsl:call-template name="generate-table-headers">
-                  <xsl:with-param name="columns" select="$columns"/>
-                </xsl:call-template>
-              </fo:table-header>
-
-              <fo:table-body>
-                <xsl:call-template name="generate-table-values">
-                  <xsl:with-param name="columns" select="$columns"/>
-                  <xsl:with-param name="counter" select="$scalars/InforceYear 
+ 1"/>
-                  <xsl:with-param name="max-counter" select="$max-lapse-year"/>
-                  <xsl:with-param name="inforceyear" select="0 - 
$scalars/InforceYear"/>
-                </xsl:call-template>
-              </fo:table-body>
-            </fo:table>
-          </fo:block>
-        </fo:flow>
-      </fo:page-sequence>
-
-      <!-- Tabular Detail (Report 2)-->
-      <!-- Body page -->
-      <fo:page-sequence master-reference="tabular-detail-report2">
-        <!-- Define the contents of the header. -->
-        <fo:static-content flow-name="xsl-region-before">
-          <fo:block text-align="left">
-            <xsl:call-template name="company-logo"/>
-          </fo:block>
-          <xsl:call-template name="standardheader"/>
-          <fo:block text-align="center" font-size="10pt" space-before="5.0pt">
-            Tabular Detail, continued
-          </fo:block>
-<!-- These units don't make sense for the ratios that are actually displayed.
-          <xsl:call-template name="dollar-units"/>
--->
-        </fo:static-content>
-
-        <!-- Define the contents of the footer. -->
-        <xsl:call-template name="standardfooter">
-          <xsl:with-param name="disclaimer">
-            <fo:block padding-top="1em">
-              <xsl:choose>
-                <xsl:when test="$scalars/IsInforce!='1'">
-                  <xsl:value-of select="$scalars/NonGuaranteedFootnote"/>
-                </xsl:when>
-                <xsl:otherwise>
-                  <fo:block>
-                    <xsl:value-of 
select="$scalars/InforceNonGuaranteedFootnote0"/>
-                  </fo:block>
-                  <fo:block font-weight="bold">
-                    <xsl:value-of 
select="$scalars/InforceNonGuaranteedFootnote3"/>
-                  </fo:block>
-                </xsl:otherwise>
-              </xsl:choose>
-            </fo:block>
-          </xsl:with-param>
-        </xsl:call-template>
-
-        <fo:flow flow-name="xsl-region-body">
-          <xsl:variable name="tabular-detail-report2-columns">
-            <column name="PolicyYear">Policy _Year</column>
-            <column composite="0" name="AttainedAge">End of _Year Age</column>
-            <column name="AnnGAIntRate_Current">Illustrated _Crediting 
Rate</column>
-            <column name="SpecAmt">Selected_Face Amount</column>
-          </xsl:variable>
-          <xsl:variable name="tabular-detail-report2-columns-raw" 
select="document('')//xsl:address@hidden'tabular-detail-report2-columns']/column"/>
-          <xsl:variable name="columns" 
select="$tabular-detail-report2-columns-raw[not(@composite) or 
boolean(boolean(@composite='1')=$is_composite)]"/>
-
-          <fo:block font-size="9pt" font-family="serif">
-            <fo:table table-layout="fixed" width="{8*count($columns)}em">
-              <xsl:call-template name="generate-table-columns">
-                <xsl:with-param name="columns" select="$columns"/>
-              </xsl:call-template>
-
-              <fo:table-header>
-                <xsl:call-template name="generate-table-headers">
-                  <xsl:with-param name="columns" select="$columns"/>
-                </xsl:call-template>
-              </fo:table-header>
-
-              <fo:table-body>
-                <xsl:call-template name="generate-table-values">
-                  <xsl:with-param name="columns" select="$columns"/>
-                  <xsl:with-param name="counter" select="$scalars/InforceYear 
+ 1"/>
-                  <xsl:with-param name="max-counter" select="$max-lapse-year"/>
-                  <xsl:with-param name="inforceyear" select="0 - 
$scalars/InforceYear"/>
-                </xsl:call-template>
-              </fo:table-body>
-            </fo:table>
-          </fo:block>
-          <!-- endofdoc block id implemented as the "otherwise" condition in
-               an xsl:choose instead of xsl:if !='1' so that the XML item
-             'Supplemental Report' need not exist in the XML document for
-             page numbering to work properly -->
-          <xsl:if test="not($has_supplemental_report)">
-            <fo:block id="endofdoc"/>
-          </xsl:if>
-        </fo:flow>
-      </fo:page-sequence>
-
-      <!-- Supplemental Report -->
-      <!-- Body page -->
-      <xsl:if test="$has_supplemental_report">
-        <fo:page-sequence master-reference="supplemental-report">
-          <!-- Define the contents of the header. -->
-          <fo:static-content flow-name="xsl-region-before">
-            <fo:block text-align="left">
-              <xsl:call-template name="company-logo"/>
-            </fo:block>
-            <xsl:call-template name="standardheader"/>
-            <fo:block text-align="center" font-size="10.0pt" 
space-before="3.0pt">
-              <xsl:value-of select="illustration/supplementalreport/title"/>
-            </fo:block>
-            <xsl:call-template name="dollar-units"/>
-          </fo:static-content>
-
-          <!-- Define the contents of the footer. -->
-          <xsl:call-template name="standardfooter">
-            <xsl:with-param name="disclaimer">
-            <fo:block padding-top="1em">
-              <xsl:choose>
-                <xsl:when test="$scalars/IsInforce!='1'">
-                  <xsl:value-of select="$scalars/NonGuaranteedFootnote"/>
-                </xsl:when>
-                <xsl:otherwise>
-                  <fo:block>
-                    <xsl:value-of 
select="$scalars/InforceNonGuaranteedFootnote0"/>
-                  </fo:block>
-                  <fo:block font-weight="bold">
-                    <xsl:value-of 
select="$scalars/InforceNonGuaranteedFootnote3"/>
-                  </fo:block>
-                </xsl:otherwise>
-              </xsl:choose>
-            </fo:block>
-            </xsl:with-param>
-          </xsl:call-template>
-
-          <!-- Supplemental report body -->
-          <xsl:call-template name="supplemental-report-body"/>
-        </fo:page-sequence>
-      </xsl:if>
-
-      <xsl:if test="$scalars/IsInforce!='1'">
-        <!-- Numeric Summary Attachment - (Only for New Business) -->
-        <!-- Body page -->
-        <fo:page-sequence master-reference="numeric-summary-attachment">
-          <!-- Define the contents of the header. -->
-          <fo:static-content flow-name="xsl-region-before">
-            <fo:block text-align="left">
-              <xsl:call-template name="company-logo"/>
-            </fo:block>
-            <xsl:call-template name="standardheader"/>
-            <fo:block text-align="center" font-size="10.0pt">
-              Numeric Summary
-            </fo:block>
-            <xsl:call-template name="dollar-units"/>
-          </fo:static-content>
-
-          <!-- Define the contents of the footer. -->
-          <xsl:call-template name="standardfooter">
-            <xsl:with-param name="omit-pagenumber" select="1"/>
-          </xsl:call-template>
-
-          <xsl:call-template name="numeric-summary-report"/>
-        </fo:page-sequence>
-      </xsl:if>
-    </fo:root>
-  </xsl:template>
-
-  <xsl:template name="standardheader">
-    <fo:block text-align="center" font-size="9.0pt" padding-bottom="1em">
-      <fo:block>
-        <xsl:choose>
-          <xsl:when test="$scalars/IsInforce='1'">
-            LIFE INSURANCE IN FORCE BASIC ILLUSTRATION
-          </xsl:when>
-          <xsl:otherwise>
-            LIFE INSURANCE BASIC ILLUSTRATION
-          </xsl:otherwise>
-        </xsl:choose>
-      </fo:block>
-      <fo:block>
-        <xsl:value-of select="$scalars/InsCoName"/>
-      </fo:block>
-      <xsl:if test="$scalars/ProducerName!='0'">
-        <fo:block>
-          Presented by: <xsl:value-of select="$scalars/ProducerName"/>
-        </fo:block>
-      </xsl:if>
-      <xsl:if test="$scalars/ProducerStreet!='0'">
-        <fo:block>
-          <xsl:value-of select="$scalars/ProducerStreet"/>
-        </fo:block>
-      </xsl:if>
-      <xsl:if test="$scalars/ProducerCity!='0'">
-        <fo:block>
-          <xsl:value-of select="$scalars/ProducerCity"/>
-        </fo:block>
-      </xsl:if>
-    </fo:block>
-
-    <fo:block padding-before="5pt" font-size="9pt" font-family="sans-serif">
-      <fo:table table-layout="fixed" width="100%">
-        <fo:table-column column-width="125mm"/>
-        <fo:table-column column-width="proportional-column-width(1)"/>
-        <fo:table-body>
-          <fo:table-row>
-            <fo:table-cell text-align="left">
-              <fo:block>
-                Prepared for:
-              </fo:block>
-              <fo:block>
-                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Group Name:
-                <xsl:call-template name="limitstring">
-                  <xsl:with-param name="passString" 
select="$scalars/CorpName"/>
-                  <xsl:with-param name="length" select="50"/>
-                </xsl:call-template>
-              </fo:block>
-              <fo:block>
-                <xsl:choose>
-                  <xsl:when test="$is_composite">
-                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Composite 
Illustration
-                  </xsl:when>
-                  <xsl:otherwise>
-                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Insured:
-                    <xsl:call-template name="limitstring">
-                      <xsl:with-param name="passString" 
select="$scalars/Insured1"/>
-                      <xsl:with-param name="length" select="50"/>
-                    </xsl:call-template>
-                  </xsl:otherwise>
-                </xsl:choose>
-              </fo:block>
-              <xsl:if test="not($is_composite)">
-                <fo:block>
-                  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Age:
-                  <xsl:value-of select="$scalars/Age"/>
-                </fo:block>
-              </xsl:if>
-              <fo:block>
-                Product: <xsl:value-of select="$scalars/PolicyForm"/>
-                &nbsp;<xsl:value-of select="$scalars/PolicyMktgName"/>
-              </fo:block>
-              <fo:block>
-                <!-- Single Premium Logic -->
-                <xsl:choose>
-                  <xsl:when test="$ModifiedSinglePremium='1'">
-                    Modified Single Premium Adjustable Life Insurance Policy
-                  </xsl:when>
-                  <xsl:otherwise>
-                    <xsl:value-of select="$scalars/PolicyLegalName"/>
-                  </xsl:otherwise>
-                </xsl:choose>
-              </fo:block>
-            <xsl:if test="$scalars/IsInforce!='1'">
-              <fo:block>
-                <!-- Single Premium Logic -->
-                 <xsl:choose>
-                  <xsl:when test="$SinglePremium!='1'">
-                    Initial Premium:
-                  </xsl:when>
-                  <xsl:otherwise>
-                    Single Premium:
-                  </xsl:otherwise>
-                </xsl:choose>
-                &nbsp;$<xsl:value-of select="$scalars/InitPrem"/>
-              </fo:block>
-            </xsl:if>
-              <xsl:if test="not($is_composite)">
-                <fo:block>
-                  Initial Death Benefit Option:
-                  <xsl:value-of select="$scalars/InitDBOpt"/>
-                </fo:block>
-              </xsl:if>
-              <xsl:call-template 
name="print-mastercontractnumber-and-contractnumber"/>
-            </fo:table-cell>
-            <fo:table-cell text-align="left">
-              <fo:block>
-                Initial <xsl:if test="$scalars/HasTerm!='0'">Total</xsl:if>
-                Selected Face Amount: $<xsl:value-of 
select="$scalars/InitTotalSA"/>
-              </fo:block>
-              <!-- Remove date prepared....now exists in footer
-              <fo:block>
-                Date Prepared: <xsl:call-template name="date-prepared"/>
-              </fo:block> -->
-              <xsl:if test="$scalars/HasTerm!='0'">
-                <fo:block>
-                  Initial Base Face Amount:
-                  $<xsl:value-of select="$scalars/InitBaseSpecAmt"/>
-                </fo:block>
-                <fo:block>
-                  Initial Term Face Amount:
-                  $<xsl:value-of select="$scalars/InitTermSpecAmt"/>
-                </fo:block>
-              </xsl:if>
-              <fo:block>
-                Guaranteed Crediting Rate:
-                <xsl:value-of select="$scalars/InitAnnGenAcctInt_Guaranteed"/>
-              </fo:block>
-              <fo:block>
-                <xsl:choose>
-                  <xsl:when test="$scalars/InforceYear!=0">
-                    Current Illustrated Crediting Rate:
-                    <xsl:call-template name="ultimate_interest_rate">
-                      <xsl:with-param name="counter" 
select="$scalars/InforceYear + 1"/>
-                    </xsl:call-template>
-                  </xsl:when>
-                  <xsl:otherwise>
-                    Current Illustrated Crediting Rate:
-                    <xsl:value-of select="$scalars/InitAnnGenAcctInt_Current"/>
-                  </xsl:otherwise>
-                </xsl:choose>
-              </fo:block>
-              <xsl:if test="$SinglePremium='1' and $scalars/InforceYear &lt;= 
4">
-                <!-- Single Premium Logic -->
-                <fo:block>
-                  Ultimate Illustrated Crediting Rate:
-                <xsl:choose>
-                  <xsl:when test="$ModifiedSinglePremium0='1'">
-                    <xsl:value-of 
select="address@hidden'AnnGAIntRate_Current']/duration[11]/@column_value"/>
-                  </xsl:when>
-                  <xsl:otherwise>
-                     <xsl:value-of 
select="address@hidden'AnnGAIntRate_Current']/duration[6]/@column_value"/>
-                  </xsl:otherwise>
-                </xsl:choose>
-                </fo:block>
-              </xsl:if>
-              <!-- Update with "FriendlyUWType" - Get From Greg -->
-              <!-- "&IF(UWType="Medical","Fully underwritten",
-              IF(AND(State="TX",UWType="Guaranteed issue"),"Substandard 
*",UWType))) -->
-              <xsl:if test="not($is_composite)">
-                <fo:block>
-                  Underwriting Type:
-                  <xsl:choose>
-                    <xsl:when test="$scalars/UWType='Medical'">
-                      Fully underwritten
-                    </xsl:when>
-                    <xsl:otherwise>
-                      <xsl:value-of select="$scalars/UWType"/>
-                    </xsl:otherwise>
-                  </xsl:choose>
-                </fo:block>
-                <fo:block>
-                  Rate Classification:
-                  <xsl:value-of select="$scalars/UWClass"/>,
-                  <xsl:value-of select="$scalars/Smoker"/>,
-                  <xsl:value-of select="$scalars/Gender"/>
-                </fo:block>
-                <xsl:if test="$scalars/UWClass='Rated'">
-                  <fo:block>
-                    &nbsp;&nbsp;&nbsp;Table Rating:
-                    <xsl:value-of select="$scalars/SubstandardTable"/>
-                  </fo:block>
-                </xsl:if>
-              </xsl:if>
-            </fo:table-cell>
-          </fo:table-row>
-        </fo:table-body>
-      </fo:table>
-    </fo:block>
-  </xsl:template>
-
-  <xsl:template name="numeric-summary-values">
-    <xsl:param name="columns"/>
-    <xsl:param name="counter"/>
-    <xsl:param name="age70"/>
-    <xsl:param name="prioryears"/>
-    <xsl:variable name="PolicyYear_is_not_zero" 
select="address@hidden'PolicyYear']/duration[$counter]/@column_value!='0'"/>
-    <fo:table-row>
-      <xsl:for-each select="$columns">
-        <fo:table-cell padding-top=".2pt" padding-bottom=".2pt">
-          <xsl:if test="position()=1">
-            <xsl:attribute name="padding-right">6pt</xsl:attribute>
-          </xsl:if>
-          <fo:block text-align="right">
-            <xsl:choose>
-              <xsl:when test="not(@name)">
-              </xsl:when>
-              <xsl:when test="(position() = 1) and ($age70 = 1)">
-                Age 70
-              </xsl:when>
-              <xsl:when test="$PolicyYear_is_not_zero">
-                <xsl:variable name="name" select="./@name"/>
-                <xsl:value-of 
select="address@hidden/duration[$counter]/@column_value"/>
-              </xsl:when>
-              <xsl:when test="position() = 1">
-                <xsl:value-of select="$counter"/>
-              </xsl:when>
-              <xsl:otherwise>
-                0
-              </xsl:otherwise>
-            </xsl:choose>
-          </fo:block>
-        </fo:table-cell>
-      </xsl:for-each>
-    </fo:table-row>
-    <!-- Display Only Summary Years -->
-    <xsl:if test="$age70!=1">
-      <xsl:if test="$prioryears!=1">
-        <xsl:choose>
-          <xsl:when test="$counter &lt; 30">
-            <xsl:choose>
-              <xsl:when test="$counter=5">
-                <!-- Display lapse years that occur prior to year 10 -->
-                <xsl:if test="$scalars/LapseYear_Guaranteed &lt; 9">
-                  <xsl:if test="$scalars/LapseYear_Guaranteed &gt; 4">
-                    <xsl:call-template name="numeric-summary-values">
-                      <xsl:with-param name="columns" select="$columns"/>
-                      <xsl:with-param name="counter" 
select="$scalars/LapseYear_Guaranteed + 1"/>
-                      <xsl:with-param name="age70" select="0"/>
-                      <xsl:with-param name="prioryears" select="1"/>
-                    </xsl:call-template>
-                  </xsl:if>
-                </xsl:if>
-                <xsl:if test="$scalars/LapseYear_Midpoint &lt; 9">
-                  <xsl:if test="$scalars/LapseYear_Midpoint &gt; 4">
-                    <xsl:if test="$scalars/LapseYear_Midpoint &gt; 
$scalars/LapseYear_Guaranteed">
-                      <xsl:call-template name="numeric-summary-values">
-                        <xsl:with-param name="columns" select="$columns"/>
-                        <xsl:with-param name="counter" 
select="$scalars/LapseYear_Midpoint + 1"/>
-                        <xsl:with-param name="age70" select="0"/>
-                        <xsl:with-param name="prioryears" select="1"/>
-                      </xsl:call-template>
-                    </xsl:if>
-                  </xsl:if>
-                </xsl:if>
-                <xsl:if test="$scalars/LapseYear_Current &lt; 9">
-                  <xsl:if test="$scalars/LapseYear_Current &gt; 4">
-                    <xsl:if test="$scalars/LapseYear_Current &gt; 
$scalars/LapseYear_Midpoint">
-                      <xsl:call-template name="numeric-summary-values">
-                        <xsl:with-param name="columns" select="$columns"/>
-                        <xsl:with-param name="counter" 
select="$scalars/LapseYear_Current + 1"/>
-                        <xsl:with-param name="age70" select="0"/>
-                        <xsl:with-param name="prioryears" select="1"/>
-                      </xsl:call-template>
-                    </xsl:if>
-                  </xsl:if>
-                </xsl:if>
-                <!-- Create year 10 values -->
-                <xsl:call-template name="numeric-summary-values">
-                  <xsl:with-param name="columns" select="$columns"/>
-                  <xsl:with-param name="counter" select="$counter + 5"/>
-                  <xsl:with-param name="age70" select="0"/>
-                </xsl:call-template>
-              </xsl:when>
-              <xsl:otherwise>
-                <!-- Display lapse years that occur prior to next display year 
-->
-                <xsl:if test="$scalars/LapseYear_Guaranteed &lt; $counter + 9">
-                  <xsl:if test="$scalars/LapseYear_Guaranteed &lt; 
$scalars/MaxDuration">
-                    <xsl:if test="$scalars/LapseYear_Guaranteed &gt; $counter 
- 1">
-                      <xsl:call-template name="numeric-summary-values">
-                        <xsl:with-param name="columns" select="$columns"/>
-                        <xsl:with-param name="counter" 
select="$scalars/LapseYear_Guaranteed + 1"/>
-                        <xsl:with-param name="age70" select="0"/>
-                        <xsl:with-param name="prioryears" select="1"/>
-                      </xsl:call-template>
-                    </xsl:if>
-                  </xsl:if>
-                </xsl:if>
-                <xsl:if test="$scalars/LapseYear_Midpoint &lt; $counter + 9">
-                  <xsl:if test="$scalars/LapseYear_Midpoint &lt; 
$scalars/MaxDuration">
-                    <xsl:if test="$scalars/LapseYear_Midpoint &gt; $counter - 
1">
-                      <xsl:if test="$scalars/LapseYear_Midpoint &gt; 
$scalars/LapseYear_Guaranteed">
-                        <xsl:call-template name="numeric-summary-values">
-                          <xsl:with-param name="columns" select="$columns"/>
-                          <xsl:with-param name="counter" 
select="$scalars/LapseYear_Midpoint + 1"/>
-                          <xsl:with-param name="age70" select="0"/>
-                          <xsl:with-param name="prioryears" select="1"/>
-                        </xsl:call-template>
-                      </xsl:if>
-                    </xsl:if>
-                  </xsl:if>
-                </xsl:if>
-                <xsl:if test="$scalars/LapseYear_Current &lt; $counter + 9">
-                  <xsl:if test="$scalars/LapseYear_Current &lt; 
$scalars/MaxDuration">
-                    <xsl:if test="$scalars/LapseYear_Current &gt; $counter - 
1">
-                      <xsl:if test="$scalars/LapseYear_Current &gt; 
$scalars/LapseYear_Midpoint">
-                        <xsl:call-template name="numeric-summary-values">
-                          <xsl:with-param name="columns" select="$columns"/>
-                          <xsl:with-param name="counter" 
select="$scalars/LapseYear_Current + 1"/>
-                          <xsl:with-param name="age70" select="0"/>
-                          <xsl:with-param name="prioryears" select="1"/>
-                        </xsl:call-template>
-                      </xsl:if>
-                    </xsl:if>
-                  </xsl:if>
-                </xsl:if>
-                <!-- Create year 20 and 30 values -->
-                <xsl:call-template name="numeric-summary-values">
-                  <xsl:with-param name="columns" select="$columns"/>
-                  <xsl:with-param name="counter" select="$counter + 10"/>
-                  <xsl:with-param name="age70" select="0"/>
-                </xsl:call-template>
-              </xsl:otherwise>
-            </xsl:choose>
-          </xsl:when>
-          <xsl:otherwise>
-            <xsl:if test="$scalars/LapseYear_Guaranteed &lt; 
$scalars/MaxDuration">
-              <!-- Display lapse years that occur prior to next display year 
-->
-              <xsl:if test="$scalars/LapseYear_Guaranteed &gt; $counter - 1">
-                <xsl:call-template name="numeric-summary-values">
-                  <xsl:with-param name="columns" select="$columns"/>
-                  <xsl:with-param name="counter" 
select="$scalars/LapseYear_Guaranteed + 1"/>
-                  <xsl:with-param name="age70" select="0"/>
-                  <xsl:with-param name="prioryears" select="1"/>
-                </xsl:call-template>
-              </xsl:if>
-            </xsl:if>
-            <xsl:if test="$scalars/LapseYear_Midpoint &lt; 
$scalars/MaxDuration">
-              <xsl:if test="$scalars/LapseYear_Midpoint &gt; $counter - 1">
-                <xsl:if test="$scalars/LapseYear_Midpoint &gt; 
$scalars/LapseYear_Guaranteed">
-                  <xsl:call-template name="numeric-summary-values">
-                    <xsl:with-param name="columns" select="$columns"/>
-                    <xsl:with-param name="counter" 
select="$scalars/LapseYear_Midpoint + 1"/>
-                    <xsl:with-param name="age70" select="0"/>
-                    <xsl:with-param name="prioryears" select="1"/>
-                  </xsl:call-template>
-                </xsl:if>
-              </xsl:if>
-            </xsl:if>
-            <xsl:if test="$scalars/LapseYear_Current &lt; 
$scalars/MaxDuration">
-              <xsl:if test="$scalars/LapseYear_Current &gt; $counter - 1">
-                <xsl:if test="$scalars/LapseYear_Current &gt; 
$scalars/LapseYear_Midpoint">
-                  <xsl:call-template name="numeric-summary-values">
-                    <xsl:with-param name="columns" select="$columns"/>
-                    <xsl:with-param name="counter" 
select="$scalars/LapseYear_Current + 1"/>
-                    <xsl:with-param name="age70" select="0"/>
-                    <xsl:with-param name="prioryears" select="1"/>
-                  </xsl:call-template>
-                </xsl:if>
-              </xsl:if>
-            </xsl:if>
-          </xsl:otherwise>
-        </xsl:choose>
-      </xsl:if>
-    </xsl:if>
-  </xsl:template>
-
-  <xsl:template name="numeric-summary-report">
-    <xsl:variable name="numeric-summary-report-columns">
-      <column name="PolicyYear">                               |               
|Policy _Year    </column>
-      <column name="GrossPmt">                                 |               
|Premium _Outlay </column>
-      <column name="AcctVal_Guaranteed">    Guaranteed Values  |               
|Account _Value  </column>
-      <column name="CSVNet_Guaranteed">     Guaranteed Values  |               
|Cash Surr _Value</column>
-      <column name="EOYDeathBft_Guaranteed">Guaranteed Values  |               
|Death _Benefit  </column>
-      <column/>
-      <column name="AcctVal_Midpoint">    Non-Guaranteed Values|Midpoint 
Values|Account _Value  </column>
-      <column name="CSVNet_Midpoint">     Non-Guaranteed Values|Midpoint 
Values|Cash Surr _Value</column>
-      <column name="EOYDeathBft_Midpoint">Non-Guaranteed Values|Midpoint 
Values|Death _Benefit  </column>
-      <column>                            Non-Guaranteed Values|</column>
-      <column name="AcctVal_Current">     Non-Guaranteed Values| Current 
Values|Account _Value  </column>
-      <column name="CSVNet_Current">      Non-Guaranteed Values| Current 
Values|Cash Surr _Value</column>
-      <column name="EOYDeathBft_Current"> Non-Guaranteed Values| Current 
Values|Death _Benefit  </column>
-    </xsl:variable>
-    <xsl:variable name="columns" 
select="document('')//xsl:address@hidden'numeric-summary-report-columns']/column"/>
-
-    <!-- The main contents of the body page -->
-    <fo:flow flow-name="xsl-region-body">
-      <fo:block font-size="9pt" font-family="serif">
-        <fo:table table-layout="fixed" width="100%">
-          <xsl:call-template name="generate-table-columns">
-            <xsl:with-param name="columns" select="$columns"/>
-          </xsl:call-template>
-
-          <fo:table-header>
-            <xsl:call-template name="generate-table-headers">
-              <xsl:with-param name="columns" select="$columns"/>
-            </xsl:call-template>
-          </fo:table-header>
-
-          <!-- Create Numeric Summary Values -->
-          <fo:table-body>
-              <!-- Display summary values if policy lapses prior to year 5 -->
-            <xsl:if test="$scalars/LapseYear_Guaranteed &lt; 4">
-              <xsl:call-template name="numeric-summary-values">
-                <xsl:with-param name="columns" select="$columns"/>
-                <xsl:with-param name="counter" 
select="$scalars/LapseYear_Guaranteed + 1"/>
-                <xsl:with-param name="age70" select="0"/>
-                <xsl:with-param name="prioryears" select="1"/>
-              </xsl:call-template>
-            </xsl:if>
-            <xsl:if test="$scalars/LapseYear_Midpoint &lt; 4">
-              <xsl:if test="$scalars/LapseYear_Midpoint &gt; 
$scalars/LapseYear_Guaranteed">
-                <xsl:call-template name="numeric-summary-values">
-                  <xsl:with-param name="columns" select="$columns"/>
-                  <xsl:with-param name="counter" 
select="$scalars/LapseYear_Midpoint + 1"/>
-                  <xsl:with-param name="age70" select="0"/>
-                  <xsl:with-param name="prioryears" select="1"/>
-                </xsl:call-template>
-              </xsl:if>
-            </xsl:if>
-            <xsl:if test="$scalars/LapseYear_Current &lt; 4">
-              <xsl:if test="$scalars/LapseYear_Current &gt; 
$scalars/LapseYear_Midpoint">
-                <xsl:call-template name="numeric-summary-values">
-                  <xsl:with-param name="columns" select="$columns"/>
-                  <xsl:with-param name="counter" 
select="$scalars/LapseYear_Current + 1"/>
-                  <xsl:with-param name="age70" select="0"/>
-                  <xsl:with-param name="prioryears" select="1"/>
-                </xsl:call-template>
-              </xsl:if>
-            </xsl:if>
-            <xsl:call-template name="numeric-summary-values">
-              <xsl:with-param name="columns" select="$columns"/>
-              <xsl:with-param name="counter" select="5"/>
-              <xsl:with-param name="age70" select="0"/>
-            </xsl:call-template>
-            <xsl:if test="not($is_composite)">
-              <xsl:if test="$scalars/Age &lt; 70">
-                <fo:table-row>
-                  <fo:table-cell padding="8pt">
-                    <fo:block/>
-                  </fo:table-cell>
-                </fo:table-row>
-                <xsl:call-template name="numeric-summary-values">
-                  <xsl:with-param name="columns" select="$columns"/>
-                  <xsl:with-param name="counter" select="70 - $scalars/Age"/>
-                  <xsl:with-param name="age70" select="1"/>
-                </xsl:call-template>
-              </xsl:if>
-            </xsl:if>
-          </fo:table-body>
-        </fo:table>
-      </fo:block>
-
-      <fo:block text-align="left" font-size="9pt">
-        <xsl:choose>
-          <xsl:when test="$is_composite">
-            <fo:block padding-top="2em">
-              The year of policy lapse on a guaranteed, midpoint
-              and current basis is not depicted in the above table of values
-              for this composite illustration because it is not applicable
-              on a case basis.
-            </fo:block>
-          </xsl:when>
-          <xsl:when test="$scalars/LapseYear_Guaranteed &lt; 
$scalars/MaxDuration">
-            <fo:block padding-top="2em">
-              Additional premium will be required
-              in year <xsl:value-of select="$scalars/LapseYear_Guaranteed+1"/>
-              or contract will lapse based on guaranteed monthly charges
-              and interest rate.
-            </fo:block>
-            <xsl:if test="$scalars/LapseYear_Midpoint &lt; 
$scalars/MaxDuration">
-              <fo:block>
-                Additional premium will be required
-                in year <xsl:value-of select="$scalars/LapseYear_Midpoint+1"/>
-                or contract will lapse based on midpoint monthly charges
-                and interest rate.
-              </fo:block>
-            </xsl:if>
-            <xsl:if test="$scalars/LapseYear_Current &lt; 
$scalars/MaxDuration">
-              <fo:block>
-                Additional premium will be required
-                in year <xsl:value-of select="$scalars/LapseYear_Current+1"/>
-                or contract will lapse based on current monthly charges
-                and interest rate.
-              </fo:block>
-            </xsl:if>
-          </xsl:when>
-        </xsl:choose>
-        <xsl:if test="$scalars/IsMec='1'">
-          <fo:block padding-top="1em">
-            IMPORTANT TAX DISCLOSURE: This is a Modified Endowment Contract.
-            Please refer to the Narrative Summary for additional information.
-          </fo:block>
-        </xsl:if>
-        <fo:block padding-top="2em" text-align="center">
-          Certification Statements
-        </fo:block>
-        <fo:block padding-top="1em">
-          CONTRACT OWNER / APPLICANT
-        </fo:block>
-        <xsl:if test="$scalars/InterestDisclaimer!=''">
-          <fo:block padding-top="1em">
-            I understand that at the present time higher current interest rates
-            are credited for policies with case premiums in the amount
-            of <xsl:value-of select="$scalars/InterestDisclaimer"/>
-          </fo:block>
-        </xsl:if>
-        <fo:block padding-top="1em">
-          <xsl:choose>
-            <xsl:when test="$scalars/StatePostalAbbrev='IL'">
-              I have received a copy of this illustration and understand
-              that this illustration assumes that the currently illustrated
-              non-guaranteed elements will continue unchanged
-              for all years shown. This is not likely to occur,
-              and actual results may be more or less favorable than those 
shown.
-            </xsl:when>
-            <xsl:when test="$scalars/StatePostalAbbrev='TX'">
-              A copy of this illustration has been provided
-              to the Applicant/Policyowner.
-            </xsl:when>
-            <xsl:otherwise>
-              I have received a copy of this illustration, and I understand
-              that any non-guaranteed elements illustrated are subject
-              to change and could be either higher or lower. Additionally,
-              I have been informed by my agent that these values
-              are not guaranteed.
-            </xsl:otherwise>
-          </xsl:choose>
-        </fo:block>
-        <fo:block text-decoration="overline" padding-top="3em">
-          CONTRACT OWNER OR APPLICANT SIGNATURE &nbsp;&nbsp;&nbsp;
-          <fo:inline 
text-decoration="no-overline">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</fo:inline>
-          DATE 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-        </fo:block>
-        <fo:block padding-top="2em">
-          AGENT / AUTHORIZED REPRESENTATIVE
-        </fo:block>
-        <fo:block padding-top="1em">
-          <xsl:choose>
-            <xsl:when test="$scalars/StatePostalAbbrev='IL'">
-              I have informed the applicant or policyowner
-              that this illustration assumes that the currently illustrated
-              non-guaranteed elements will continue unchanged
-              for all years shown. This is not likely to occur,
-              and actual results may be more or less favorable than those 
shown.
-            </xsl:when>
-            <xsl:when test="$scalars/StatePostalAbbrev='TX'">
-              A copy of this illustration has been provided
-              to the Applicant/Policyowner.
-            </xsl:when>
-            <xsl:otherwise>
-              I certify that this illustration has been presented
-              to the applicant, and that I have explained
-              that any non-guaranteed elements illustrated
-              are subject to change. I have made no statements
-              that are inconsistent with the illustration.
-            </xsl:otherwise>
-          </xsl:choose>
-        </fo:block>
-        <fo:block text-decoration="overline" padding-top="3em">
-          AGENT OR AUTHORIZED REPRESENTATIVE
-          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-          <fo:inline 
text-decoration="no-overline">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</fo:inline>DATE
-          
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-        </fo:block>
-      </fo:block>
-    </fo:flow>
-  </xsl:template>
-
-  <xsl:template name="removeamps">
-    <xsl:param name="title"/>
-    <xsl:if test="contains($title, '&amp;')">
-      <xsl:call-template name="concatenate">
-        <xsl:with-param name="textbefore" 
select="substring-before($title,'amp;')"/>
-        <xsl:with-param name="textafter" 
select="substring-after($title,'amp;')"/>
-      </xsl:call-template>
-    </xsl:if>
-  </xsl:template>
-
-  <xsl:template name="concatenate">
-    <xsl:param name="textbefore"/>
-    <xsl:param name="textafter"/>
-    <xsl:call-template name="removeamps">
-      <xsl:with-param name="title" select="concat($textbefore,$textafter)"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template name="standardfooter">
-    <xsl:param name="omit-pagenumber" select="boolean(0)"/>
-    <xsl:param name="disclaimer" select="string('')"/>
-    <xsl:call-template name="generic-footer">
-      <xsl:with-param name="top-block" select="$disclaimer"/>
-      <xsl:with-param name="left-block">
-        <fo:block>
-          Date Prepared:
-          <xsl:call-template name="date-prepared"/>
-        </fo:block>
-        <!-- Version Number -->
-        <xsl:if test="$scalars/LmiVersion!=''">
-          <fo:block>
-            System Version:
-            <xsl:value-of select="$scalars/LmiVersion"/>
-          </fo:block>
-        </xsl:if>
-      </xsl:with-param>
-      <xsl:with-param name="center-block">
-        <xsl:choose>
-          <xsl:when test="$omit-pagenumber">
-            Attachment
-          </xsl:when>
-          <xsl:otherwise>
-            <xsl:call-template name="page-of"/>
-          </xsl:otherwise>
-        </xsl:choose>
-      </xsl:with-param>
-      <xsl:with-param name="right-block">
-        <!--
-        APACHE !! The '/text()' suffix in the XPath expression is a workaround
-        for Apache-FOP 0.20.5 bug that somehow treats <xsl:value-of/> as
-        <xsl:copy-of/> if it is encountered inside a <xsl:with-param/> as
-        a single child. Therefore we explicitly convert the expression into
-        a string.
-        -->
-        <xsl:value-of select="$scalars/InsCoName/text()"/>
-        <xsl:if test="$compliance_tracking_number">
-          <fo:block>
-            <xsl:value-of select="$compliance_tracking_number"/>
-          </fo:block>
-        </xsl:if>
-      </xsl:with-param>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template name="ultimate_interest_rate">
-    <xsl:param name="counter"/>
-    <xsl:value-of 
select="address@hidden'AnnGAIntRate_Current']/duration[$counter]/@column_value"/>
-  </xsl:template>
-
-  <xsl:template name="set_single_premium">
-    <xsl:variable name="A" select="string-length($scalars/PolicyMktgName) &gt; 
5"/>
-    <xsl:variable name="B" select="substring($scalars/PolicyLegalName, 1, 6) = 
'Single' or substring($scalars/PolicyLegalName, 1, 8) = 'Modified'"/>
-    <xsl:value-of select="number($A and $B)"/>
-  </xsl:template>
-
-  <xsl:template name="set_modified_single_premium">
-    <xsl:variable name="A" select="string-length($scalars/PolicyMktgName) &gt; 
5"/>
-    <xsl:variable name="B" select="substring($scalars/PolicyLegalName, 1, 6) = 
'Single'"/>
-    <xsl:variable name="C" select="$scalars/StatePostalAbbrev = 'MA'"/>
-    <xsl:value-of select="number($A and $B and $C)"/>
-  </xsl:template>
-
-  <xsl:template name="set_modified_single_premium0">
-    <xsl:variable name="A" select="string-length($scalars/PolicyMktgName) &gt; 
5"/>
-    <xsl:variable name="B" select="substring($scalars/PolicyLegalName, 1, 8) = 
'Modified'"/>
-    <xsl:value-of select="number($A and $B)"/>
-  </xsl:template>
-
-  <xsl:template name="set_group_experience_rating">
-    <xsl:value-of select="number($scalars/PolicyLegalName='Group Flexible 
Premium Adjustable Life Insurance Policy')"/>
-  </xsl:template>
-
-  <xsl:template name="set_group_carveout">
-    <xsl:value-of select="number($scalars/PolicyLegalName='Group Flexible 
Premium Adjustable Life Insurance Certificate')"/>
-  </xsl:template>
-
-  <xsl:template name="set_flexible_premium">
-    <xsl:value-of select="number($scalars/PolicyLegalName='Flexible Premium 
Adjustable Life Insurance')"/>
-  </xsl:template>
-
-</xsl:stylesheet>
diff --git a/ledger.hpp b/ledger.hpp
index 478b728..3039b8a 100644
--- a/ledger.hpp
+++ b/ledger.hpp
@@ -107,16 +107,6 @@ class LMI_SO Ledger
 
     ledger_evaluator make_evaluator() const;
 
-    // PDF !! Expunge the following six function declarations:
-
-    void read (xml::element const&);
-    void write(xml::element&) const;
-    int                class_version() const;
-    std::string const& xml_root_name() const;
-
-    void write       (std::ostream& os) const;
-    void write_xsl_fo(std::ostream& os) const;
-
   private:
     LedgerVariant const& GetOneVariantLedger(mcenum_run_basis) const;
     void SetRunBases(int length);
diff --git a/ledger_base.cpp b/ledger_base.cpp
index b67c010..969e572 100644
--- a/ledger_base.cpp
+++ b/ledger_base.cpp
@@ -375,13 +375,6 @@ std::string const& LedgerBase::ScaleUnit() const
 }
 
 //============================================================================
-// PDF !! expunge
-int LedgerBase::ScalePower() const
-{
-    return scale_power_;
-}
-
-//============================================================================
 void LedgerBase::UpdateCRC(CRC& crc) const
 {
     for(auto const& i : AllVectors)
diff --git a/ledger_base.hpp b/ledger_base.hpp
index 499a1e8..866bb26 100644
--- a/ledger_base.hpp
+++ b/ledger_base.hpp
@@ -178,9 +178,7 @@ class LMI_SO LedgerBase
     void               apply_scale_factor(int decimal_power);
 
     minmax<double>     scalable_extrema() const;
-    std::string const& ScaleUnit() const;
-// PDF !! expunge ScalePower(); rename ScaleUnit()
-    int                ScalePower() const;
+    std::string const& ScaleUnit() const; // PDF !! rename to scale_unit()
     std::string        value_str(std::string const& map_key, int index) const;
     std::string        value_str(std::string const& map_key) const;
 
diff --git a/ledger_pdf.cpp b/ledger_pdf.cpp
index 82238aa..7a71768 100644
--- a/ledger_pdf.cpp
+++ b/ledger_pdf.cpp
@@ -24,16 +24,10 @@
 #include "ledger_pdf.hpp"
 
 #include "configurable_settings.hpp"
-#include "contains.hpp" // PDF !! expunge
-#include "global_settings.hpp" // PDF !! expunge
 #include "ledger.hpp"
-#include "ledger_invariant.hpp" // PDF !! expunge
-#include "ledger_xsl.hpp" // PDF !! expunge
 #include "path_utility.hpp"             // unique_filepath()
 #include "pdf_command.hpp"
 
-#include <iostream>                     // cerr // PDF !! expunge
-
 /// Write a scaled copy of the ledger to a PDF file.
 ///
 /// PDF !! Does the following block comment actually apply here? and
@@ -49,39 +43,6 @@
 
 std::string write_ledger_as_pdf(Ledger const& ledger, fs::path const& filepath)
 {
-    global_settings const& g = global_settings::instance();
-    bool const ash_nazg      = g.ash_nazg();
-    bool const pyx_only_new  = contains(g.pyx(), "only_new_pdf");
-    bool const pyx_only_old  = contains(g.pyx(), "only_old_pdf");
-    bool const do_the_old    = ash_nazg ? !pyx_only_new : true;
-    bool const skip_the_new  = ash_nazg ?  pyx_only_old : true;
-    // Without secret password, preserve old behavior exactly:
-    if(!ash_nazg) return write_ledger_as_pdf_via_xsl(ledger, filepath);
-    // PDF !! Expunge this conditional block and everything above it:
-    if(do_the_old)
-        {
-        std::string z;
-        try
-            {
-            // Execute both the new and the old code so that their results
-            // may be compared.
-            z = write_ledger_as_pdf_via_xsl(ledger, filepath);
-            }
-        // The developer-only password having been specified, show
-        // diagnostics only on the console, and don't let them escape
-        // (so that any error in the old code doesn't prevent the new
-        // code from running).
-        catch(std::exception const& e)
-            {
-            std::cerr << e.what() << std::endl;
-            }
-        catch(...)
-            {
-            throw;
-            }
-        if(skip_the_new) return z;
-        }
-
     throw_if_interdicted(ledger);
 
     fs::path print_dir(configurable_settings::instance().print_directory());
@@ -90,8 +51,6 @@ std::string write_ledger_as_pdf(Ledger const& ledger, 
fs::path const& filepath)
     fs::path pdf_out_file = unique_filepath(print_dir / filepath, ".pdf");
 
     Ledger scaled_ledger(ledger);
-    // PDF !! Expunge this 'if' line (but not the statement it controls):
-    if(0 == scaled_ledger.GetLedgerInvariant().ScalePower())
     scaled_ledger.AutoScale();
     pdf_command(scaled_ledger, pdf_out_file);
 
diff --git a/ledger_xml_io.cpp b/ledger_xml_io.cpp
deleted file mode 100644
index 10e58f1..0000000
--- a/ledger_xml_io.cpp
+++ /dev/null
@@ -1,955 +0,0 @@
-// Ledger xml input and output.
-//
-// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 
2014, 2015, 2016, 2017, 2018 Gregory W. Chicares.
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-//
-// http://savannah.nongnu.org/projects/lmi
-// email: <address@hidden>
-// snail: Chicares, 186 Belle Woods Drive, Glastonbury CT 06033, USA
-
-#include "pchfile.hpp"
-
-#include "ledger.hpp"
-
-#include "alert.hpp"
-#include "authenticity.hpp"
-#include "calendar_date.hpp"
-#include "configurable_settings.hpp"
-#include "contains.hpp"
-#include "global_settings.hpp"
-#include "handle_exceptions.hpp"
-#include "ledger_invariant.hpp"
-#include "ledger_text_formats.hpp"      // ledger_format()
-#include "ledger_variant.hpp"
-#include "ledger_xsl.hpp"               // xsl_filepath()
-#include "mc_enum_aux.hpp"              // mc_e_vector_to_string_vector()
-#include "miscellany.hpp"               // each_equal(), ios_out_trunc_binary()
-#include "oecumenic_enumerations.hpp"
-#include "path_utility.hpp"             // fs::path inserter
-#include "ssize_lmi.hpp"
-#include "value_cast.hpp"
-#include "version.hpp"
-#include "xml_lmi.hpp"
-
-#include <boost/filesystem/fstream.hpp>
-#include <boost/filesystem/operations.hpp>
-#include <boost/filesystem/path.hpp>
-
-#include <xsltwrapp/xsltwrapp.h>
-
-#include <algorithm>                    // transform()
-#include <functional>                   // minus
-#include <map>
-#include <ostream>
-#include <utility>                      // pair
-
-namespace
-{
-int const n = 7;
-
-char const* char_p_suffixes[n] =
-    {"_Current"        // mce_run_gen_curr_sep_full
-    ,"_Guaranteed"     // mce_run_gen_guar_sep_full
-    ,"_Midpoint"       // mce_run_gen_mdpt_sep_full
-    ,"_CurrentZero"    // mce_run_gen_curr_sep_zero
-    ,"_GuaranteedZero" // mce_run_gen_guar_sep_zero
-    ,"_CurrentHalf"    // mce_run_gen_curr_sep_half
-    ,"_GuaranteedHalf" // mce_run_gen_guar_sep_half
-    };
-
-std::vector<std::string> const suffixes
-    (char_p_suffixes
-    ,char_p_suffixes + n
-    );
-
-typedef std::map<std::string, std::pair<int,oenum_format_style>> format_map_t;
-typedef std::map<std::string, std::string> title_map_t;
-
-// For all numbers (so-called 'scalars' and 'vectors', but not
-// 'strings') grabbed from all ledgers, look for a format. If one
-// is found, use it to turn the number into a string. If not, and
-// the field is named in unavailable(), then it's ignored. Otherwise,
-// format_exists() displays a warning and ignores the field (because
-// throwing an exception would cause only the first warning to be
-// displayed).
-//
-// Rationale: Silently falling back on some default format can't be
-// right, because it masks defects that should be fixed: no default
-// can be universally appropriate.
-//
-// For names formed as
-//   basename + '_' + suffix
-// only the basename is used as a map key. Lookups in the format map
-// are strict, as they must be, else one key like "A" would match
-// anything beginning with that letter.
-//
-// Some of the unavailable fields could easily be made available
-// someday; perhaps others should be eliminated from class Ledger.
-
-bool unavailable(std::string const& s)
-{
-    static std::vector<std::string> const v
-        {"DateOfBirthJdn"        // used by group quotes
-        ,"EffDateJdn"            // used by group quotes
-        ,"ListBillDateJdn"       // probably not needed
-        ,"InforceAsOfDateJdn"    // probably not needed
-        ,"InitDacTaxRate"        // used by PrintRosterTabDelimited(); not 
cents
-        ,"InitPremTaxRate"       // used by PrintRosterTabDelimited(); not 
cents
-        ,"SubstdTable"           // probably not needed
-        ,"InitMlyPolFee"         // used by PrintRosterTabDelimited()
-        ,"InitTgtPremHiLoadRate" // used by PrintRosterTabDelimited(); not 
cents
-        };
-    return contains(v, s);
-}
-
-bool format_exists
-    (std::string  const& s
-    ,std::string  const& suffix
-    ,format_map_t const& m
-    )
-{
-    if(contains(m, s))
-        {
-        return true;
-        }
-    else if(unavailable(s))
-        {
-        return false;
-        }
-    else
-        {
-        warning() << "No format found for " << s << suffix << LMI_FLUSH;
-        return false;
-        }
-}
-
-} // Unnamed namespace.
-
-void Ledger::write(xml::element& x) const
-{
-    title_map_t title_map;
-
-// Can't seem to get a literal &nbsp; into the output.
-
-// Original:   title_map["AttainedAge"                     ] = " 
&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; 
End of &#xA0;&#xA0;Year Age";
-// No good:    title_map["AttainedAge"                     ] = " 
&&#xA0;&&#xA0;&&#xA0;&&#xA0;&&#xA0;&&#xA0;&&#xA0;&&#xA0;&&#xA0;&&#xA0;&&#xA0;&&#xA0;&&#xA0;
 End of &&#xA0;&&#xA0;Year Age";
-// No good:    title_map["AttainedAge"                     ] = " 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
End of &nbsp;&nbsp;Year Age";
-// No good:    title_map["AttainedAge"                     ] = " 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 End of &amp;nbsp;&amp;nbsp;Year Age";
-// No good:    title_map["AttainedAge"                     ] = "<![CDATA[ 
&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0; 
End of &#xA0;&#xA0;Year Age]]>";
-// No good:    title_map["AttainedAge"                     ] = " ááááááááááááá 
End of ááYear Age";
-// No good:    title_map["AttainedAge"                     ] = " 
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 
End of &#160;&#160;Year Age";
-
-//  Here are the columns to be listed in the user interface
-//  as well as their corresponding titles.
-
-    // Current and guaranteed variants are generally given for columns
-    // that vary by basis. Some offer only a current variant because
-    // they are defined only on a current basis--experience-rating
-    // columns, e.g.
-
-    title_map["AVGenAcct_CurrentZero"           ] = "Curr Charges Account 
Value Gen Acct";
-    title_map["AVGenAcct_GuaranteedZero"        ] = "Guar Charges Account 
Value Gen Acct";
-    title_map["AVRelOnDeath_Current"            ] = "Account Value 
____Released on Death";
-    title_map["AVSepAcct_CurrentZero"           ] = "Curr Charges 0% Account 
Value Sep Acct";
-    title_map["AVSepAcct_GuaranteedZero"        ] = "Guar Charges 0% Account 
Value Sep Acct";
-    title_map["AcctVal_Current"                 ] = " _____________ Curr 
Account Value";
-    title_map["AcctVal_CurrentZero"             ] = "Curr Charges 0% Account 
Value";
-    title_map["AcctVal_Guaranteed"              ] = " _____________ Guar 
Account Value";
-    title_map["AcctVal_GuaranteedZero"          ] = "Guar Charges 0% Account 
Value";
-    title_map["AddonCompOnAssets"               ] = "Additional Comp on 
Assets";
-    title_map["AddonCompOnPremium"              ] = "Additional Comp on 
Premium";
-    title_map["AddonMonthlyFee"                 ] = "Additional Monthly Fee";
-    title_map["AnnGAIntRate_Current"            ] = " _____________ Curr Ann 
Gen Acct Int Rate";
-    title_map["AnnGAIntRate_Guaranteed"         ] = " _____________ Guar Ann 
Gen Acct Int Rate";
-    title_map["AnnHoneymoonValueRate_Current"   ] = "Curr Ann Honeymoon Value 
Rate";
-    title_map["AnnHoneymoonValueRate_Guaranteed"] = "Guar Ann Honeymoon Value 
Rate";
-    title_map["AnnLoanDueRate"                  ] = "Loan\nInt Rate";
-    title_map["AnnPostHoneymoonRate_Current"    ] = "Curr Post Honeymoon Rate";
-    title_map["AnnPostHoneymoonRate_Guaranteed" ] = "Guar Post Honeymoon Rate";
-    title_map["AnnSAIntRate_Current"            ] = " _____________ Curr Ann 
Sep Acct Int Rate";
-    title_map["AnnSAIntRate_Guaranteed"         ] = " _____________ Guar Ann 
Sep Acct Int Rate";
-    title_map["AttainedAge"                     ] = " _____________ 
_____________ End of __Year Age";
-    title_map["AvgDeathBft_Current"             ] = "Curr Avg Death Benefit";
-    title_map["AvgDeathBft_Guaranteed"          ] = "Guar Avg Death Benefit";
-    title_map["BaseDeathBft_Current"            ] = " _____________ Curr Base 
Death Benefit";
-    title_map["BaseDeathBft_Guaranteed"         ] = " _____________ Guar Base 
Death Benefit";
-    title_map["COICharge_Current"               ] = " _____________ 
_____________ Curr COI Charge";
-    title_map["COICharge_Guaranteed"            ] = " _____________ 
_____________ Guar COI Charge";
-    title_map["CSVNet_Current"                  ] = " _____________ Curr Net 
Cash Surr Value";
-    title_map["CSVNet_CurrentZero"              ] = "Curr Charges 0% Net Cash 
Surr Value";
-    title_map["CSVNet_Guaranteed"               ] = " _____________ Guar Net 
Cash Surr Value";
-    title_map["CSVNet_GuaranteedZero"           ] = "Guar Charges 0% Net Cash 
Surr Value";
-    title_map["CV7702_Current"                  ] = "Curr 7702 Cash Value";
-    title_map["CV7702_Guaranteed"               ] = "Guar 7702 Cash Value";
-    title_map["ClaimsPaid_Current"              ] = " _____________ _______ 
Curr ___Claims ___Paid";
-    title_map["ClaimsPaid_Guaranteed"           ] = " _____________ _______ 
Guar ___Claims ___Paid";
-    title_map["CorpTaxBracket"                  ] = " _____________ Corp Tax 
Bracket";
-    title_map["CorridorFactor"                  ] = " _____________ 
_____________ Corridor Factor";
-    title_map["CurrMandE"                       ] = "Mortality and Expense 
Charge";
-    title_map["DBOpt"                           ] = "Death Benefit Option";
-    title_map["DacTaxLoad_Current"              ] = " _____________ Curr DAC 
Tax Load";
-    title_map["DacTaxLoad_Guaranteed"           ] = " _____________ Guar DAC 
Tax Load";
-    title_map["DacTaxRsv_Current"               ] = "Curr DAC Tax Reserve";
-    title_map["DacTaxRsv_Guaranteed"            ] = "Guar DAC Tax Reserve";
-    title_map["DeathProceedsPaid_Current"       ] = " _____________ Curr Death 
Proceeds Paid";
-    title_map["DeathProceedsPaid_Guaranteed"    ] = " _____________ Guar Death 
Proceeds Paid";
-    title_map["EOYDeathBft_Current"             ] = " _____________ Curr EOY 
Death Benefit";
-    title_map["EOYDeathBft_Guaranteed"          ] = " _____________ Guar EOY 
Death Benefit";
-    title_map["EeGrossPmt"                      ] = " _____________ ______ EE 
Gross Payment";
-    title_map["EeModalMinimumPremium"           ] = "EE Modal Minimum Premium";
-    title_map["EeMode"                          ] = "EE Payment Mode";
-    title_map["ErGrossPmt"                      ] = " _____________ ______ ER 
Gross Payment";
-    title_map["ErModalMinimumPremium"           ] = "ER Modal Minimum Premium";
-    title_map["ErMode"                          ] = "ER Payment Mode";
-    title_map["ExpenseCharges_Current"          ] = "Curr Expense Charge";
-    title_map["ExpenseCharges_Guaranteed"       ] = "Guar Expense Charge";
-    title_map["ExperienceReserve_Current"       ] = " _____________ Experience 
Rating Reserve";
-    title_map["GptForceout"                     ] = "Forceout";
-    title_map["GrossIntCredited_Current"        ] = "Curr Gross Int Credited";
-    title_map["GrossIntCredited_Guaranteed"     ] = "Guar Gross Int Credited";
-    title_map["GrossPmt"                        ] = " _____________ 
_____________ Premium Outlay";
-    title_map["HoneymoonValueSpread"            ] = "Honeymoon Value Spread";
-    title_map["IndvTaxBracket"                  ] = " _____________ EE Tax 
Bracket";
-    title_map["InforceLives"                    ] = " _____________ ______BOY 
_______Lives _______Inforce";
-    title_map["IrrCsv_Current"                  ] = " _____________ 
_____________ Curr IRR on CSV";
-    title_map["IrrCsv_Guaranteed"               ] = " _____________ 
_____________ Guar IRR on CSV";
-    title_map["IrrDb_Current"                   ] = " _____________ 
_____________ Curr IRR on DB";
-    title_map["IrrDb_Guaranteed"                ] = " _____________ 
_____________ Guar IRR on DB";
-    title_map["KFactor_Current"                 ] = " _____________ Experience 
_______Rating K Factor";
-    title_map["LoanIntAccrued_Current"          ] = " _____________ ____Curr 
Loan Int __Accrued";
-    title_map["LoanIntAccrued_Guaranteed"       ] = " _____________ ____Guar 
Loan Int __Accrued";
-    title_map["MlyGAIntRate_Current"            ] = "Curr Monthly Gen Acct Int 
Rate";
-    title_map["MlyGAIntRate_Guaranteed"         ] = "Guar Monthly Gen Acct Int 
Rate";
-    title_map["MlyHoneymoonValueRate_Current"   ] = "Curr Monthly Honeymoon 
Value Rate";
-    title_map["MlyHoneymoonValueRate_Guaranteed"] = "Guar Monthly Honeymoon 
Value Rate";
-    title_map["MlyPostHoneymoonRate_Current"    ] = "Curr Monthly Post 
Honeymoon Rate";
-    title_map["MlyPostHoneymoonRate_Guaranteed" ] = "Guar Monthly Post 
Honeymoon Rate";
-    title_map["MlySAIntRate_Current"            ] = "Curr Monthly Sep Acct Int 
Rate";
-    title_map["MlySAIntRate_Guaranteed"         ] = "Guar Monthly Sep Acct Int 
Rate";
-    title_map["ModalMinimumPremium"             ] = "Modal Minimum Premium";
-    title_map["AnnualFlatExtra"                 ] = " _____________ Annual 
Flat Extra";
-//    title_map["NaarForceout"                    ] = "Forced Withdrawal due 
to NAAR Limit";
-    title_map["NetCOICharge_Current"            ] = "Experience _______Rating 
_______Net COI Charge";
-    title_map["NetClaims_Current"               ] = " _____________ 
_____________ Curr Net Claims";
-    title_map["NetClaims_Guaranteed"            ] = " _____________ 
_____________ Guar Net Claims";
-    title_map["NetIntCredited_Current"          ] = " _____________ Curr Net 
Int Credited";
-    title_map["NetIntCredited_Guaranteed"       ] = " _____________ Guar Net 
Int Credited";
-    title_map["NetPmt_Current"                  ] = " _____________ Curr Net 
Payment";
-    title_map["NetPmt_Guaranteed"               ] = " _____________ Guar Net 
Payment";
-    title_map["NetWD"                           ] = " _____________ 
_____________ _____________ Withdrawal";
-    title_map["NewCashLoan"                     ] = " _____________ 
_____________ Annual Loan";
-    title_map["Outlay"                          ] = " _____________ 
_____________ ____Net Outlay";
-    title_map["PartMortTableMult"               ] = "Partial Mortality 
Muliplier";
-    title_map["PolicyFee_Current"               ] = "Curr ____Policy Fee";
-    title_map["PolicyFee_Guaranteed"            ] = "Guar ____Policy Fee";
-    title_map["PolicyYear"                      ] = " _____________ 
_____________ Policy __Year";
-    title_map["PrefLoanBalance_Current"         ] = "Curr Preferred Loan Bal";
-    title_map["PrefLoanBalance_Guaranteed"      ] = "Guar Preferred Loan Bal";
-    title_map["PremTaxLoad_Current"             ] = "Curr Premium Tax Load";
-    title_map["PremTaxLoad_Guaranteed"          ] = "Guar Premium Tax Load";
-    title_map["ProjectedCoiCharge_Current"      ] = "Experience Rating 
Projected COI Charge";
-    title_map["RefundableSalesLoad"             ] = " _____________ Refundable 
Sales Load";
-    title_map["RiderCharges_Current"            ] = " _____________ 
_____________ Curr Rider Charges";
-    title_map["Salary"                          ] = " _____________ 
_____________ Salary";
-    title_map["SepAcctCharges_Current"          ] = "Curr Sep Acct Charges";
-    title_map["SepAcctCharges_Guaranteed"       ] = "Guar Sep Acct Charges";
-    title_map["SpecAmt"                         ] = " _____________ 
_____________ Specified Amount";
-    title_map["SpecAmtLoad_Current"             ] = " _____________ Curr Spec 
Amt Load";
-    title_map["SpecAmtLoad_Guaranteed"          ] = " _____________ Guar Spec 
Amt Load";
-    title_map["SurrChg_Current"                 ] = " _____________ Curr Surr 
Charge";
-    title_map["SurrChg_Guaranteed"              ] = " _____________ Guar Surr 
Charge";
-    title_map["TermPurchased_Current"           ] = " _____________ Curr Term 
Amt Purchased";
-    title_map["TermPurchased_Guaranteed"        ] = " _____________ Guar Term 
Amt Purchased";
-    title_map["TermSpecAmt"                     ] = " _____________ Term 
Specified Amount";
-    title_map["TgtPrem"                         ] = " _____________ Target 
Premium";
-    title_map["TotalIMF"                        ] = "Total Investment Mgt Fee";
-    title_map["TotalLoanBalance_Current"        ] = " _____________ Curr Total 
Loan Balance";
-    title_map["TotalLoanBalance_Guaranteed"     ] = " _____________ Guar Total 
Loan Balance";
-
-    // TODO ?? Titles ought to be read from an external file that
-    // permits flexible customization. Compliance might require that
-    // 'AcctVal_Current' be called "Cash Value" for one policy form,
-    // and "Account Value" for another, in order to match the terms
-    // used in the contract exactly. Therefore, these titles probably
-    // belong in the product database, which permits variation by
-    // product--though it does not accommodate strings as this is
-    // written in 2006-07. DATABASE !! So consider adding them there
-    // when the database is revamped.
-
-// Here's my top-level analysis of the formatting specification.
-//
-// Formats
-//
-// F0: zero decimals
-// F1: zero decimals, commas
-// F2: two decimals, commas
-// F3: scaled by 100, zero decimals, with '%' at end:
-// F4: scaled by 100, two decimals, with '%' at end:
-//
-// Presumably all use commas as thousands-separators, so that
-// an IRR of 12345.67% would be formatted as "12,345.67%".
-//
-// So the differences are:
-//   'precision' (number of decimal places)
-//   percentage (scaled by 100, '%' at end) or not
-// and therefore F0 is equivalent to F1
-
-    std::pair<int,oenum_format_style> f1(0, oe_format_normal);
-    std::pair<int,oenum_format_style> f2(2, oe_format_normal);
-    std::pair<int,oenum_format_style> f3(0, oe_format_percentage);
-    std::pair<int,oenum_format_style> f4(2, oe_format_percentage);
-
-    format_map_t format_map;
-
-// > Special Formatting for Scalar Items
-// >
-// F4: scaled by 100, two decimals, with '%' at end:
-// > Format as percentage "0.00%"
-// >
-    format_map["GuarMaxMandE"                      ] = f4;
-    format_map["InitAnnGenAcctInt"                 ] = f4;
-    format_map["InitAnnLoanCredRate"               ] = f4;
-    format_map["InitAnnLoanDueRate"                ] = f4;
-    format_map["InitAnnSepAcctCurrGross0Rate"      ] = f4;
-    format_map["InitAnnSepAcctCurrGrossHalfRate"   ] = f4;
-    format_map["InitAnnSepAcctCurrNet0Rate"        ] = f4;
-    format_map["InitAnnSepAcctCurrNetHalfRate"     ] = f4;
-    format_map["InitAnnSepAcctGrossInt"            ] = f4;
-    format_map["InitAnnSepAcctGuarGross0Rate"      ] = f4;
-    format_map["InitAnnSepAcctGuarGrossHalfRate"   ] = f4;
-    format_map["InitAnnSepAcctGuarNet0Rate"        ] = f4;
-    format_map["InitAnnSepAcctGuarNetHalfRate"     ] = f4;
-    format_map["InitAnnSepAcctNetInt"              ] = f4;
-    format_map["PostHoneymoonSpread"               ] = f4;
-    format_map["Preferred"                         ] = f4;
-    format_map["PremTaxRate"                       ] = f4;
-
-// F3: scaled by 100, zero decimals, with '%' at end:
-// > Format as percentage with no decimal places (##0%)
-    format_map["SalesLoadRefund"                   ] = f3;
-    format_map["SalesLoadRefundRate0"              ] = f3;
-    format_map["SalesLoadRefundRate1"              ] = f3;
-
-// >
-// F2: two decimals, commas
-// > Format as a number with thousand separators and two decimal places 
(#,###,###.00)
-// >
-    format_map["CurrentCoiMultiplier"              ] = f2;
-    format_map["EeListBillPremium"                 ] = f2;
-    format_map["ErListBillPremium"                 ] = f2;
-    format_map["GuarPrem"                          ] = f2;
-    format_map["InforceTaxBasis"                   ] = f2;
-    format_map["InforceUnloanedAV"                 ] = f2;
-    format_map["InitGLP"                           ] = f2;
-    format_map["InitGSP"                           ] = f2;
-    format_map["InitPrem"                          ] = f2;
-    format_map["InitSevenPayPrem"                  ] = f2;
-    format_map["InitTgtPrem"                       ] = f2;
-    format_map["InitMinPrem"                       ] = f2;
-    format_map["ListBillPremium"                   ] = f2;
-    format_map["ModalMinimumDumpin"                ] = f2;
-// >
-// F1: zero decimals, commas
-// > Format as a number with thousand separators and no decimal places 
(#,###,###)
-// >
-    format_map["Age"                               ] = f1;
-    format_map["AllowDbo3"                         ] = f1;
-    format_map["AvgFund"                           ] = f1;
-    format_map["ChildRiderAmount"                  ] = f1;
-    format_map["CustomFund"                        ] = f1;
-    format_map["Dumpin"                            ] = f1;
-    format_map["EndtAge"                           ] = f1;
-    format_map["External1035Amount"                ] = f1;
-    format_map["GenAcctAllocation"                 ] = f1;
-    format_map["GenderBlended"                     ] = f1;
-    format_map["GenderDistinct"                    ] = f1;
-    format_map["Has1035ExchCharge"                 ] = f1;
-    format_map["HasADD"                            ] = f1;
-    format_map["HasChildRider"                     ] = f1;
-    format_map["HasHoneymoon"                      ] = f1;
-    format_map["HasSpouseRider"                    ] = f1;
-    format_map["HasSupplSpecAmt"                   ] = f1;
-    format_map["HasTerm"                           ] = f1;
-    format_map["HasWP"                             ] = f1;
-    format_map["InforceIsMec"                      ] = f1;
-    format_map["InforceMonth"                      ] = f1;
-    format_map["InforceYear"                       ] = f1;
-    format_map["InitBaseSpecAmt"                   ] = f1;
-    format_map["InitTermSpecAmt"                   ] = f1;
-    format_map["InitTotalSA"                       ] = f1;
-    format_map["Internal1035Amount"                ] = f1;
-    format_map["IsInforce"                         ] = f1;
-    format_map["IsMec"                             ] = f1;
-    format_map["LapseMonth"                        ] = f1;
-    format_map["LapseYear"                         ] = f1;
-    format_map["MaxDuration"                       ] = f1;
-    format_map["MecMonth"                          ] = f1;
-    format_map["MecYear"                           ] = f1;
-    format_map["NoLapse"                           ] = f1;
-    format_map["NoLapseAlwaysActive"               ] = f1;
-    format_map["NoLapseMinAge"                     ] = f1;
-    format_map["NoLapseMinDur"                     ] = f1;
-    format_map["RetAge"                            ] = f1;
-    format_map["SmokerBlended"                     ] = f1;
-    format_map["SmokerDistinct"                    ] = f1;
-    format_map["SplitFundAllocation"               ] = f1;
-    format_map["SplitMinPrem"                      ] = f1;
-    format_map["SpouseIssueAge"                    ] = f1;
-    format_map["SupplementalReport"                ] = f1;
-    format_map["UseExperienceRating"               ] = f1;
-    format_map["GroupIndivSelection"               ] = f1;
-    format_map["UsePartialMort"                    ] = f1;
-
-// > Vector Formatting
-// >
-// > Here are the vectors enumerated
-// >
-// F3: scaled by 100, zero decimals, with '%' at end:
-// > Format as percentage with no decimal places (##0%)
-// >
-    format_map["CorridorFactor"                    ] = f3;
-    format_map["FundAllocations"                   ] = f3;
-    format_map["MaleProportion"                    ] = f3;
-    format_map["NonsmokerProportion"               ] = f3;
-    format_map["PartMortTableMult"                 ] = f3;
-
-// >
-// F4: scaled by 100, two decimals, with '%' at end:
-// > Format as percentage with two decimal places (##0.00%)
-// >
-    format_map["AnnGAIntRate"                      ] = f4;
-    format_map["AnnHoneymoonValueRate"             ] = f4;
-    format_map["AnnLoanDueRate"                    ] = f4;
-    format_map["AnnPostHoneymoonRate"              ] = f4;
-    format_map["AnnSAIntRate"                      ] = f4;
-    format_map["CorpTaxBracket"                    ] = f4;
-    format_map["CurrMandE"                         ] = f4;
-    format_map["HoneymoonValueSpread"              ] = f4;
-    format_map["IndvTaxBracket"                    ] = f4;
-    format_map["InforceHMVector"                   ] = f4;
-
-    format_map["IrrCsv_Current"                    ] = f4;
-    format_map["IrrCsv_CurrentZero"                ] = f4;
-    format_map["IrrCsv_Guaranteed"                 ] = f4;
-    format_map["IrrCsv_GuaranteedZero"             ] = f4;
-    format_map["IrrDb_Current"                     ] = f4;
-    format_map["IrrDb_CurrentZero"                 ] = f4;
-    format_map["IrrDb_Guaranteed"                  ] = f4;
-    format_map["IrrDb_GuaranteedZero"              ] = f4;
-
-    format_map["MlyGAIntRate"                      ] = f4;
-    format_map["MlyHoneymoonValueRate"             ] = f4;
-    format_map["MlyPostHoneymoonRate"              ] = f4;
-    format_map["MlySAIntRate"                      ] = f4;
-    format_map["TotalIMF"                          ] = f4;
-// >
-// F0: zero decimals
-// > Format as a number no thousand separator or decimal point (##0%)
-// >
-    format_map["AttainedAge"                       ] = f1;
-    format_map["Duration"                          ] = f1;
-    format_map["LapseYears"                        ] = f1;
-    format_map["PolicyYear"                        ] = f1;
-// >
-// F2: two decimals, commas
-// > Format as a number with thousand separators and two decimal places 
(#,###,###.00)
-// >
-    format_map["AddonMonthlyFee"                   ] = f2;
-// TODO ?? The precision of 'InforceLives' and 'KFactor' is inadequate.
-// Is every other format OK?
-    format_map["InforceLives"                      ] = f2;
-    format_map["KFactor"                           ] = f2;
-    format_map["AnnualFlatExtra"                   ] = f2;
-// >
-// F1: zero decimals, commas
-// > Format as a number with thousand separators and no decimal places 
(#,###,##0)
-// >
-    format_map["AcctVal"                           ] = f1;
-    format_map["AccumulatedPremium"                ] = f1;
-    format_map["AddonCompOnAssets"                 ] = f1;
-    format_map["AddonCompOnPremium"                ] = f1;
-    format_map["AvgDeathBft"                       ] = f1;
-    format_map["AVGenAcct"                         ] = f1;
-    format_map["AVRelOnDeath"                      ] = f1;
-    format_map["AVSepAcct"                         ] = f1;
-    format_map["BaseDeathBft"                      ] = f1;
-    format_map["BOYAssets"                         ] = f1;
-    format_map["ClaimsPaid"                        ] = f1;
-    format_map["COICharge"                         ] = f1;
-    format_map["Composite"                         ] = f1;
-    format_map["CSVNet"                            ] = f1;
-    format_map["CV7702"                            ] = f1;
-    format_map["DacTaxLoad"                        ] = f1;
-    format_map["DacTaxRsv"                         ] = f1;
-    format_map["DeathProceedsPaid"                 ] = f1;
-    format_map["EeGrossPmt"                        ] = f1;
-    format_map["EeModalMinimumPremium"             ] = f1;
-//    format_map["EeMode"                            ] = f1; // Not numeric.
-    format_map["EOYDeathBft"                       ] = f1;
-    format_map["ErGrossPmt"                        ] = f1;
-    format_map["ErModalMinimumPremium"             ] = f1;
-//    format_map["ErMode"                            ] = f1; // Not numeric.
-    format_map["ExpenseCharges"                    ] = f1;
-    format_map["ExperienceReserve"                 ] = f1;
-    format_map["FundNumbers"                       ] = f1;
-    format_map["GptForceout"                       ] = f1;
-    format_map["GrossIntCredited"                  ] = f1;
-    format_map["GrossPmt"                          ] = f1;
-    format_map["Loads"                             ] = f1;
-    format_map["LoanInt"                           ] = f1;
-    format_map["LoanIntAccrued"                    ] = f1;
-    format_map["ModalMinimumPremium"               ] = f1;
-    format_map["NaarForceout"                      ] = f1;
-    format_map["NetClaims"                         ] = f1;
-    format_map["NetCOICharge"                      ] = f1;
-    format_map["NetIntCredited"                    ] = f1;
-    format_map["NetPmt"                            ] = f1;
-    format_map["NetWD"                             ] = f1;
-    format_map["NewCashLoan"                       ] = f1;
-    format_map["Outlay"                            ] = f1;
-    format_map["PolicyFee"                         ] = f1;
-    format_map["PrefLoanBalance"                   ] = f1;
-    format_map["PremTaxLoad"                       ] = f1;
-    format_map["ProjectedCoiCharge"                ] = f1;
-    format_map["RefundableSalesLoad"               ] = f1;
-    format_map["RiderCharges"                      ] = f1;
-    format_map["Salary"                            ] = f1;
-    format_map["SepAcctCharges"                    ] = f1;
-    format_map["SpecAmt"                           ] = f1;
-    format_map["SpecAmtLoad"                       ] = f1;
-    format_map["SpouseRiderAmount"                 ] = f1;
-    format_map["SurrChg"                           ] = f1;
-    format_map["TermPurchased"                     ] = f1;
-    format_map["TermSpecAmt"                       ] = f1;
-    format_map["TgtPrem"                           ] = f1;
-    format_map["TotalLoanBalance"                  ] = f1;
-
-    // This is a little tricky. We have some stuff that
-    // isn't in the maps inside the ledger classes. We're going to
-    // stuff it into a copy of the invariant-ledger class's data.
-    // To avoid copying, we'll use pointers to the data. Most of
-    // this stuff is invariant anyway, so that's a reasonable
-    // place to put it.
-    //
-    // First we make a copy of the invariant ledger:
-
-    double_vector_map   vectors = ledger_invariant_->AllVectors;
-    scalar_map          scalars = ledger_invariant_->AllScalars;
-    string_map          strings = ledger_invariant_->Strings;
-
-    // Now we add the stuff that wasn't in the invariant
-    // ledger's class's maps (indexable by name). Because we're
-    // working with maps of pointers, we need pointers here.
-
-    ledger_invariant_->CalculateIrrs(*this);
-
-    vectors["IrrCsv_GuaranteedZero" ] = &ledger_invariant_->IrrCsvGuar0    ;
-    vectors["IrrDb_GuaranteedZero"  ] = &ledger_invariant_->IrrDbGuar0     ;
-    vectors["IrrCsv_CurrentZero"    ] = &ledger_invariant_->IrrCsvCurr0    ;
-    vectors["IrrDb_CurrentZero"     ] = &ledger_invariant_->IrrDbCurr0     ;
-    vectors["IrrCsv_Guaranteed"     ] = &ledger_invariant_->IrrCsvGuarInput;
-    vectors["IrrDb_Guaranteed"      ] = &ledger_invariant_->IrrDbGuarInput ;
-    vectors["IrrCsv_Current"        ] = &ledger_invariant_->IrrCsvCurrInput;
-    vectors["IrrDb_Current"         ] = &ledger_invariant_->IrrDbCurrInput ;
-
-    double MaxDuration = ledger_invariant_->EndtAge - ledger_invariant_->Age;
-    scalars["MaxDuration"] = &MaxDuration;
-    int max_duration = static_cast<int>(MaxDuration);
-
-    std::vector<double> PolicyYear;
-    std::vector<double> AttainedAge;
-
-    PolicyYear .resize(max_duration);
-    AttainedAge.resize(max_duration);
-
-    int issue_age = static_cast<int>(ledger_invariant_->Age);
-    for(int j = 0; j < max_duration; ++j)
-        {
-        PolicyYear[j]  = 1 + j;
-        AttainedAge[j] = 1 + j + issue_age;
-        }
-
-// TODO ?? An attained-age column is meaningless in a composite. So
-// are several others--notably those affected by partial mortaility.
-    vectors["AttainedAge"] = &AttainedAge;
-    vectors["PolicyYear" ] = &PolicyYear ;
-
-    vectors["InforceLives"] = &ledger_invariant_->InforceLives;
-
-    vectors["FundNumbers"    ] = &ledger_invariant_->FundNumbers    ;
-    vectors["FundAllocations"] = &ledger_invariant_->FundAllocations;
-
-    // The Ledger object should contain a basic minimal set of columns
-    // from which others may be derived. It must be kept small because
-    // its size imposes a practical limit on the number of lives that
-    // can be run as part of a single census.
-    //
-    // TODO ?? A really good design would give users the power to
-    // define and store their own derived-column definitions. For now,
-    // however, code changes are required, and this is as appropriate
-    // a place as any to make them.
-
-    LedgerInvariant const& Invar = GetLedgerInvariant();
-    LedgerVariant   const& Curr_ = GetCurrFull();
-    LedgerVariant   const& Guar_ = GetGuarFull();
-
-    // ET !! Easier to write as
-    //   std::vector<double> NetDeathBenefit =
-    //     Curr_.EOYDeathBft - Curr_.TotalLoanBalance;
-    std::vector<double> NetDeathBenefit(Curr_.EOYDeathBft);
-    std::transform
-        (NetDeathBenefit.begin()
-        ,NetDeathBenefit.end()
-        ,Curr_.TotalLoanBalance.begin()
-        ,NetDeathBenefit.begin()
-        ,std::minus<double>()
-        );
-    vectors   ["NetDeathBenefit"] = &NetDeathBenefit;
-    title_map ["NetDeathBenefit"] = " _____________ __Net __Death Benefit";
-    format_map["NetDeathBenefit"] = f1;
-
-    std::vector<double> SupplDeathBft_Current   (Curr_.TermPurchased);
-    std::vector<double> SupplDeathBft_Guaranteed(Guar_.TermPurchased);
-    vectors   ["SupplDeathBft_Current"   ] = &SupplDeathBft_Current;
-    vectors   ["SupplDeathBft_Guaranteed"] = &SupplDeathBft_Guaranteed;
-    title_map ["SupplDeathBft_Current"   ] = " _____________ Curr Suppl Death 
Benefit";
-    title_map ["SupplDeathBft_Guaranteed"] = " _____________ Guar Suppl Death 
Benefit";
-    format_map["SupplDeathBft_Current"   ] = f1;
-    format_map["SupplDeathBft_Guaranteed"] = f1;
-
-    std::vector<double> SupplSpecAmt(Invar.TermSpecAmt);
-    vectors   ["SupplSpecAmt"            ] = &SupplSpecAmt;
-    title_map ["SupplSpecAmt"            ] = " _____________ Suppl Specified 
Amount";
-    format_map["SupplSpecAmt"            ] = f1;
-
-    // [End of derived columns.]
-
-    double Composite = is_composite();
-    scalars["Composite"] = &Composite;
-
-    double NoLapse =
-            0 != ledger_invariant_->NoLapseMinDur
-        ||  0 != ledger_invariant_->NoLapseMinAge
-        ;
-    scalars["NoLapse"] = &NoLapse;
-
-    std::string LmiVersion(LMI_VERSION);
-    calendar_date prep_date;
-
-    // Skip authentication for non-interactive regression testing.
-    if(!global_settings::instance().regression_testing())
-        {
-        authenticate_system();
-        }
-    else
-        {
-        // For regression tests,
-        //   - use an invariant string as version
-        //   - use EffDate as date prepared
-        // in order to avoid gratuitous failures.
-        LmiVersion = "Regression testing";
-        
prep_date.julian_day_number(static_cast<int>(ledger_invariant_->EffDateJdn));
-        }
-
-    strings["LmiVersion"] = &LmiVersion;
-
-    std::string PrepYear  = value_cast<std::string>(prep_date.year());
-    std::string PrepMonth = month_name(prep_date.month());
-    std::string PrepDay   = value_cast<std::string>(prep_date.day());
-
-    strings["PrepYear" ] = &PrepYear;
-    strings["PrepMonth"] = &PrepMonth;
-    strings["PrepDay"  ] = &PrepDay;
-
-    double SalesLoadRefund =
-        !each_equal(ledger_invariant_->RefundableSalesLoad, 0.0);
-    double SalesLoadRefundRate0 = ledger_invariant_->RefundableSalesLoad[0];
-    double SalesLoadRefundRate1 = ledger_invariant_->RefundableSalesLoad[1];
-
-    scalars["SalesLoadRefund"     ] = &SalesLoadRefund     ;
-    scalars["SalesLoadRefundRate0"] = &SalesLoadRefundRate0;
-    scalars["SalesLoadRefundRate1"] = &SalesLoadRefundRate1;
-
-    std::string ScaleUnit = ledger_invariant_->ScaleUnit();
-    strings["ScaleUnit"] = &ScaleUnit;
-
-    double InitTotalSA =
-            ledger_invariant_->InitBaseSpecAmt
-        +   ledger_invariant_->InitTermSpecAmt
-        ;
-    scalars["InitTotalSA"] = &InitTotalSA;
-
-    // Maps to hold the results of formatting numeric data.
-
-    std::map<std::string, std::string> stringscalars;
-    std::map<std::string, std::vector<std::string>> stringvectors;
-
-    stringvectors["FundNames"] = ledger_invariant_->FundNames;
-
-    // Map the data, formatting it as necessary.
-
-    // First we'll get the invariant stuff--the copy we made,
-    // along with all the stuff we plugged into it above.
-    {
-    std::string suffix = "";
-    for(auto const& j : scalars)
-        {
-        if(format_exists(j.first, suffix, format_map))
-            stringscalars[j.first + suffix] = ledger_format(*j.second, 
format_map[j.first]);
-        }
-    for(auto const& j : strings)
-        {
-        stringscalars[j.first + suffix] = *j.second;
-        }
-    for(auto const& j : vectors)
-        {
-        if(format_exists(j.first, suffix, format_map))
-            stringvectors[j.first + suffix] = ledger_format(*j.second, 
format_map[j.first]);
-        }
-    }
-
-//    stringscalars["GuarMaxMandE"] = ledger_format(*scalars["GuarMaxMandE"], 
2, true);
-//    stringvectors["CorridorFactor"] = 
ledger_format(*vectors["CorridorFactor"], 0, true);
-//    stringscalars["InitAnnGenAcctInt_Current"] = 
ledger_format(*scalars["InitAnnGenAcctInt_Current"], 0, true);
-
-    // That was the tricky part. Now it's all downhill.
-
-    for(auto const& i : ledger_map_->held())
-        {
-        std::string suffix = suffixes[i.first];
-        for(auto const& j : i.second.AllScalars)
-            {
-//            scalars[j.first + suffix] = j.second;
-            if(format_exists(j.first, suffix, format_map))
-                stringscalars[j.first + suffix] = ledger_format(*j.second, 
format_map[j.first]);
-            }
-        for(auto const& j : i.second.Strings)
-            {
-            strings[j.first + suffix] = j.second;
-            }
-        for(auto const& j : i.second.AllVectors)
-            {
-//            vectors[j.first + suffix] = j.second;
-            if(format_exists(j.first, suffix, format_map))
-                stringvectors[j.first + suffix] = ledger_format(*j.second, 
format_map[j.first]);
-            }
-        }
-
-    stringvectors["EeMode"] = 
mc_e_vector_to_string_vector(ledger_invariant_->EeMode);
-    stringvectors["ErMode"] = 
mc_e_vector_to_string_vector(ledger_invariant_->ErMode);
-    stringvectors["DBOpt"]  = 
mc_e_vector_to_string_vector(ledger_invariant_->DBOpt );
-
-// TODO ?? Here I copied some stuff from the ledger class files: the
-// parts that speak of odd members that aren't in those class's
-// maps. This may reveal incomplete or incorrect systems analysis.
-
-// Invariant
-//
-//    // Special-case vectors (not <double>, or different length than others).
-//    EeMode              .reserve(Length);
-//    ErMode              .reserve(Length);
-//    DBOpt               .reserve(Length);
-//
-//    std::vector<int>            FundNumbers; [not handled yet]
-//    std::vector<std::string>    FundNames;   [not handled yet]
-//    std::vector<int>            FundAllocs;  [not handled yet]
-//
-//    std::vector<double> InforceLives;
-//
-//    // Special-case strings.
-//    std::string     EffDate; [furnished as PrepYear, PrepMonth, PrepDay]
-//
-// Variant
-//
-// [None of these are written to xml, and I think none is wanted.]
-//
-//    // special cases
-//    int              Length;
-//    mcenum_gen_basis GenBasis_;
-//    mcenum_sep_basis SepBasis_;
-//    bool             FullyInitialized;   // I.e. by Init(BasicValues const* 
b)
-
-// Now we're ready to write the xml.
-
-    xml::element scalar("scalar");
-    xml::element data("data");
-    for(auto const& j : stringscalars)
-        {
-        std::string node_tag = j.first;
-        std::string value = j.second;
-        scalar.push_back(xml::element(node_tag.c_str(), value.c_str()));
-        }
-    for(auto const& j : stringvectors)
-        {
-        xml::element newcolumn("newcolumn");
-        xml::element column("column");
-        xml_lmi::set_attr(column, "name", j.first.c_str());
-        std::vector<std::string> const& v = j.second;
-// TODO ?? InforceLives shows an extra value past the end; should it
-// be truncated here?
-        for(int k = 0; k < lmi::ssize(v); ++k)
-            {
-            xml::element duration("duration");
-            xml_lmi::set_attr(duration, "number", 
value_cast<std::string>(k).c_str());
-            xml_lmi::set_attr(duration, "column_value", v[k].c_str());
-            column.push_back(duration);
-            }
-// TODO ?? Is <newcolumn> really useful?
-        newcolumn.push_back(column);
-        data.push_back(newcolumn);
-        }
-
-    std::vector<std::string> SupplementalReportColumns;
-    if(ledger_invariant_->SupplementalReport)
-        {
-        
SupplementalReportColumns.push_back(ledger_invariant_->SupplementalReportColumn00);
-        
SupplementalReportColumns.push_back(ledger_invariant_->SupplementalReportColumn01);
-        
SupplementalReportColumns.push_back(ledger_invariant_->SupplementalReportColumn02);
-        
SupplementalReportColumns.push_back(ledger_invariant_->SupplementalReportColumn03);
-        
SupplementalReportColumns.push_back(ledger_invariant_->SupplementalReportColumn04);
-        
SupplementalReportColumns.push_back(ledger_invariant_->SupplementalReportColumn05);
-        
SupplementalReportColumns.push_back(ledger_invariant_->SupplementalReportColumn06);
-        
SupplementalReportColumns.push_back(ledger_invariant_->SupplementalReportColumn07);
-        
SupplementalReportColumns.push_back(ledger_invariant_->SupplementalReportColumn08);
-        
SupplementalReportColumns.push_back(ledger_invariant_->SupplementalReportColumn09);
-        
SupplementalReportColumns.push_back(ledger_invariant_->SupplementalReportColumn10);
-        
SupplementalReportColumns.push_back(ledger_invariant_->SupplementalReportColumn11);
-        }
-
-    xml::element supplementalreport("supplementalreport");
-    if(ledger_invariant_->SupplementalReport)
-        {
-        // Eventually customize the report name.
-        supplementalreport.push_back(xml::element("title", "Supplemental 
Report"));
-
-        for(auto const& j : SupplementalReportColumns)
-            {
-            xml::element columns("columns");
-            columns.push_back(xml::element("name", j.c_str()));
-            columns.push_back(xml::element("title", title_map[j].c_str()));
-            supplementalreport.push_back(columns);
-            }
-        }
-
-/*
-<supplementalreport>
-    <title>Some Report</title>
-    <columns>
-      <name>TotalLoanBalance_Current</name>
-      <title>Curr Total Loan Balance</title>
-    </columns>
-    <columns>
-      <name>etc...</name>
-      <title>etc...</title>
-    </columns>
-</supplementalreport>
-*/
-
-// SOMEDAY !! It is inefficient to push_back() data into xml elements
-// and then push_back() those populated elements into the root. Avoid
-// needless copying by using insert() to create the intermediate
-// elements and using the iterator it returns to write leaf elements.
-    x.push_back(scalar);
-    x.push_back(data);
-    x.push_back(supplementalreport);
-
-    if(is_composite() && contains(global_settings::instance().pyx(), 
"values_tsv"))
-        {
-        throw_if_interdicted(*this);
-
-        configurable_settings const& z = configurable_settings::instance();
-        fs::path filepath
-            (   z.print_directory()
-            +   "/values"
-            +   z.spreadsheet_file_extension()
-            );
-        fs::ofstream ofs(filepath, ios_out_trunc_binary());
-
-        for(auto const& j : stringvectors)
-            {
-            ofs << j.first << '\t';
-            }
-        ofs << '\n';
-
-        for(int i = 0; i < greatest_lapse_dur(); ++i)
-            {
-            for(auto const& j : stringvectors)
-                {
-                std::vector<std::string> const& v = j.second;
-                if(i < lmi::ssize(v))
-                    {
-                    ofs << v[i] << '\t';
-                    }
-                else
-                    {
-                    ofs << '\t';
-                    }
-                }
-            ofs << '\n';
-            }
-        if(!ofs)
-            {
-            alarum() << "Unable to write '" << filepath << "'." << LMI_FLUSH;
-            }
-        }
-}
-
-int Ledger::class_version() const
-{
-    return 0;
-}
-
-std::string const& Ledger::xml_root_name() const
-{
-    static std::string const s("illustration");
-    return s;
-}
-
-void Ledger::write(std::ostream& os) const
-{
-    xml_lmi::xml_document document(xml_root_name());
-    xml::element& root = document.root_node();
-    write(root);
-    os << root;
-}
-
-/// Write a scaled copy of the ledger as xsl-fo.
-///
-/// The original ledger must not be modified because scaling is not
-/// reentrant. However, copying does not prevent that problem here,
-/// because what is scaled is actually not copied due to use of
-/// shared_ptr; see comment on
-///   https://savannah.nongnu.org/bugs/?13599
-/// in the ledger-class implementation.
-
-void Ledger::write_xsl_fo(std::ostream& os) const
-{
-    try
-        {
-        Ledger scaled_ledger(*this);
-        scaled_ledger.AutoScale();
-
-        xml_lmi::xml_document d(xml_root_name());
-        scaled_ledger.write(d.root_node());
-
-        xslt::stylesheet z(xsl_filepath(scaled_ledger).string().c_str());
-        os << z.apply(d.document());
-        }
-    catch(...)
-        {
-        report_exception();
-        }
-}
-
diff --git a/ledger_xsl.cpp b/ledger_xsl.cpp
deleted file mode 100644
index 176cf1c..0000000
--- a/ledger_xsl.cpp
+++ /dev/null
@@ -1,163 +0,0 @@
-// Ledger xsl operations.
-//
-// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 
2014, 2015, 2016, 2017, 2018 Gregory W. Chicares.
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-//
-// http://savannah.nongnu.org/projects/lmi
-// email: <address@hidden>
-// snail: Chicares, 186 Belle Woods Drive, Glastonbury CT 06033, USA
-
-#include "pchfile.hpp"
-
-#include "ledger_xsl.hpp"
-
-#include "alert.hpp"
-#include "configurable_settings.hpp"
-#include "contains.hpp"
-#include "global_settings.hpp"
-#include "ledger.hpp"
-#include "miscellany.hpp"
-#include "path_utility.hpp"
-#include "system_command.hpp"
-
-#include <boost/filesystem/convenience.hpp> // create_directories()
-#include <boost/filesystem/fstream.hpp>
-#include <boost/filesystem/operations.hpp>
-
-#include <ios>
-#include <sstream>
-
-namespace
-{
-std::string xsl_filename(Ledger const& ledger)
-{
-    mcenum_ledger_type const z = ledger.ledger_type();
-    switch(z)
-        {
-        case mce_ill_reg:                      return "illustration_reg.xsl";
-        case mce_finra:                        return "nasd.xsl";
-        case mce_group_private_placement:      return "reg_d_group.xsl";
-        case mce_individual_private_placement: return "reg_d_individual.xsl";
-        case mce_prospectus_obsolete:                 // fall through
-        case mce_offshore_private_placement_obsolete: // fall through
-        case mce_ill_reg_private_placement_obsolete:  // fall through
-        case mce_variable_annuity_obsolete:
-            {
-            alarum() << "Case '" << z << "' not supported." << LMI_FLUSH;
-            }
-        }
-    throw "Unreachable--silences a compiler diagnostic.";
-}
-} // Unnamed namespace.
-
-/// File path for xsl-fo file appropriate for the given ledger.
-
-fs::path xsl_filepath(Ledger const& ledger)
-{
-    std::string xsl_name = xsl_filename(ledger);
-    fs::path xsl_file(global_settings::instance().data_directory() / xsl_name);
-    if(!fs::exists(xsl_file))
-        {
-        alarum()
-            << "Unable to read file '"
-            << xsl_file
-            << "' required for ledger type '"
-            << ledger.ledger_type()
-            << "'."
-            << LMI_FLUSH
-            ;
-        }
-    return xsl_file;
-}
-
-/// Write ledger as pdf via xsl-fo.
-///
-/// Ensure that the output filename is portable. Apache fop rejects
-/// some names for '-xml' that it accepts for pdf output, without
-/// documenting what names it considers valid, so using the boost
-///   
http://www.boost.org/doc/libs/1_37_0/libs/filesystem/doc/portability_guide.htm
-/// conventions here is just a guess. Nonportable names that apache
-/// fop accepts for pdf output seem not to work well with the most
-/// popular msw pdf viewer, at least in a msw 'dde conversation',
-/// so use a similar portable name for pdf output.
-///
-/// USER !! This filename change should be documented for users.
-/// Ultimately, for fop, the reason why their nonportable msw
-/// filenames must be transformed is that apache fop is java, and
-/// java is "portable".
-
-std::string write_ledger_as_pdf_via_xsl(Ledger const& ledger, fs::path const& 
filepath)
-{
-    throw_if_interdicted(ledger);
-
-    fs::path print_dir(configurable_settings::instance().print_directory());
-    if(global_settings::instance().ash_nazg())
-        {
-        // Old implementation: write to a distinctive subdirectory,
-        // but only for testing. For production (until the new PDF
-        // implementation is accepted), keep the old behavior (i.e.,
-        // don't execute this line).
-        print_dir = print_dir / "old";
-        fs::create_directories(print_dir);
-        }
-
-    fs::path real_filepath(orthodox_filename(filepath.leaf()));
-    LMI_ASSERT(fs::portable_name(real_filepath.string()));
-
-    if(contains(global_settings::instance().pyx(), "xml"))
-        {
-        fs::path xml_file = unique_filepath(print_dir / real_filepath, ".xml");
-
-        fs::ofstream ofs(xml_file, ios_out_trunc_binary());
-        ledger.write(ofs);
-        ofs.close();
-        if(!ofs.good())
-            {
-            alarum()
-                << "Unable to write output file '"
-                << xml_file
-                << "'."
-                << LMI_FLUSH
-                ;
-            }
-        }
-
-    fs::path xml_fo_file = unique_filepath(print_dir / real_filepath, 
".fo.xml");
-
-    fs::ofstream ofs(xml_fo_file, ios_out_trunc_binary());
-    ledger.write_xsl_fo(ofs);
-    ofs.close();
-    if(!ofs.good())
-        {
-        alarum()
-            << "Unable to write output file '"
-            << xml_fo_file
-            << "'."
-            << LMI_FLUSH
-            ;
-        }
-
-    fs::path pdf_out_file = unique_filepath(print_dir / real_filepath, ".pdf");
-
-    std::ostringstream oss;
-    oss
-        << configurable_settings::instance().xsl_fo_command()
-        << " -fo "  << '"' << xml_fo_file  << '"'
-        << " -pdf " << '"' << pdf_out_file << '"'
-        ;
-    system_command(oss.str());
-    return pdf_out_file.string();
-}
-
diff --git a/ledger_xsl.hpp b/ledger_xsl.hpp
deleted file mode 100644
index 6f99f31..0000000
--- a/ledger_xsl.hpp
+++ /dev/null
@@ -1,38 +0,0 @@
-// Ledger xsl operations.
-//
-// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 
2014, 2015, 2016, 2017, 2018 Gregory W. Chicares.
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software Foundation,
-// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-//
-// http://savannah.nongnu.org/projects/lmi
-// email: <address@hidden>
-// snail: Chicares, 186 Belle Woods Drive, Glastonbury CT 06033, USA
-
-#ifndef ledger_xsl_hpp
-#define ledger_xsl_hpp
-
-#include "config.hpp"
-
-#include <boost/filesystem/path.hpp>
-
-#include <string>
-
-class Ledger;
-
-std::string write_ledger_as_pdf_via_xsl(Ledger const&, fs::path const&);
-
-fs::path xsl_filepath(Ledger const&);
-
-#endif // ledger_xsl_hpp
-
diff --git a/nasd.xsl b/nasd.xsl
deleted file mode 100644
index 0a22b5a..0000000
--- a/nasd.xsl
+++ /dev/null
@@ -1,1283 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Life insurance illustrations.
-
-    Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 
2014, 2015, 2016, 2017, 2018 Gregory W. Chicares.
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License version 2 as
-    published by the Free Software Foundation.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-
-    http://savannah.nongnu.org/projects/lmi
-    email: <address@hidden>
-    snail: Chicares, 186 Belle Woods Drive, Glastonbury CT 06033, USA
--->
-<!DOCTYPE stylesheet [
-<!ENTITY nbsp "&#xA0;">
-]>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
xmlns:fo="http://www.w3.org/1999/XSL/Format"; version="1.0">
-  <xsl:import href="fo_common.xsl"/>
-  <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
-
-  <xsl:variable name="lowerAZ" select="'abcdefghijklmnopqrstuvwxyz'"/>
-  <xsl:variable name="upperAZ" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
-
-  <xsl:variable name="GroupCarveout">
-    <xsl:call-template name="set_group_carveout"/>
-  </xsl:variable>
-
-  <xsl:variable name="TexasFootnote">
-    <xsl:call-template name="set_texas_footnote"/>
-  </xsl:variable>
-
-  <xsl:template match="/">
-    <fo:root>
-      <fo:layout-master-set>
-
-        <!-- Define the cover page. -->
-        <fo:simple-page-master master-name="cover">
-          <xsl:call-template name="set-page-size"/>
-          <fo:region-body margin=".1in .1in 0"/>
-        </fo:simple-page-master>
-
-        <!-- Define the Column Definitions page. -->
-        <fo:simple-page-master master-name="column-definitions">
-          <xsl:call-template name="set-page-size"/>
-          <!-- Central part of page -->
-          <fo:region-body margin="2.25in 0 1in"/>
-          <!-- Header -->
-          <fo:region-before extent="3.0in"/>
-          <!-- Footer -->
-          <fo:region-after extent="1.25in"/>
-        </fo:simple-page-master>
-
-        <!-- Define the explanatory notes page. -->
-        <fo:simple-page-master master-name="explanatory-notes">
-          <xsl:call-template name="set-page-size"/>
-          <!-- Central part of page -->
-          <fo:region-body margin="2.35in 0 .9in"/>
-          <!-- Header -->
-          <fo:region-before extent="3.0in"/>
-          <!-- Footer -->
-          <fo:region-after extent="1.25in"/>
-        </fo:simple-page-master>
-
-        <!-- Define the explanatory notes page. -->
-        <fo:simple-page-master 
master-name="explanatory-notes-separate-account">
-          <xsl:call-template name="set-page-size"/>
-          <!-- Central part of page -->
-          <!-- column-count="2" -->
-          <fo:region-body margin="2.35in 0 1.3in"/>
-          <!-- Header -->
-          <fo:region-before extent="3in"/>
-          <!-- Footer -->
-          <fo:region-after extent="1.25in"/>
-        </fo:simple-page-master>
-
-        <!-- Define the Basic Illustration page. -->
-        <fo:simple-page-master master-name="basic-illustration">
-          <xsl:call-template name="set-page-size"/>
-          <!-- Central part of page -->
-          <fo:region-body margin="3in 0 1in"/>
-          <!-- Header -->
-          <fo:region-before extent="3in"/>
-          <!-- Footer -->
-          <fo:region-after extent="1.25in"/>
-        </fo:simple-page-master>
-
-        <!-- Define the Supplemental Illustration page. -->
-        <fo:simple-page-master master-name="supplemental-illustration">
-          <xsl:call-template name="set-page-size"/>
-          <!-- Central part of page -->
-          <fo:region-body margin="2.5in 0 1in"/>
-          <!-- Header -->
-          <fo:region-before extent="3in"/>
-          <!-- Footer -->
-          <fo:region-after extent="1.25in"/>
-        </fo:simple-page-master>
-
-        <!-- Define the Illustration Assumption Detail page. -->
-        <xsl:if test="not($is_composite)">
-          <fo:simple-page-master master-name="illustration-assumption">
-            <xsl:call-template name="set-page-size"/>
-            <!-- Central part of page -->
-            <fo:region-body margin="2.5in 0 1in"/>
-            <!-- Header -->
-            <fo:region-before extent="3in"/>
-            <!-- Footer -->
-            <fo:region-after extent="1.25in"/>
-          </fo:simple-page-master>
-        </xsl:if>
-
-        <!-- Define the Supplemental Report page. -->
-        <xsl:if test="$has_supplemental_report">
-          <fo:simple-page-master master-name="supplemental-report">
-            <xsl:call-template name="set-page-size"/>
-            <!-- Central part of page -->
-            <fo:region-body margin="2.8in 0 1.1in"/>
-            <!-- Header -->
-            <fo:region-before extent="3in"/>
-            <!-- Footer -->
-            <fo:region-after extent="1.25in"/>
-          </fo:simple-page-master>
-        </xsl:if>
-      </fo:layout-master-set>
-
-      <!-- The data to be displayed in the pages, cover page first. -->
-      <xsl:call-template name="generic-cover"/>
-
-      <!-- Basic Illustration -->
-      <!-- Body page -->
-      <fo:page-sequence master-reference="basic-illustration" 
initial-page-number="1">
-
-        <!-- Define the contents of the header. -->
-        <fo:static-content flow-name="xsl-region-before">
-          <fo:block text-align="left">
-            <xsl:call-template name="company-logo"/>
-          </fo:block>
-          <xsl:call-template name="standardheader">
-            <xsl:with-param name="reporttitle">
-              <xsl:choose>
-                <xsl:when test="$scalars/IsInforce!='1'">
-                </xsl:when>
-                <xsl:otherwise>
-                  In Force Illustration
-                </xsl:otherwise>
-              </xsl:choose>
-            </xsl:with-param>
-          </xsl:call-template>
-          <xsl:call-template name="dollar-units"/>
-        </fo:static-content>
-
-        <!-- Define the contents of the footer. -->
-        <xsl:call-template name="standardfooter"/>
-
-        <xsl:call-template name="basic-illustration-report"/>
-
-      </fo:page-sequence>
-
-      <!-- Supplemental Illustration -->
-      <!-- Body page -->
-      <fo:page-sequence master-reference="supplemental-illustration">
-
-        <!-- Define the contents of the header. -->
-        <fo:static-content flow-name="xsl-region-before">
-          <fo:block text-align="left">
-            <xsl:call-template name="company-logo"/>
-          </fo:block>
-          <xsl:call-template name="standardheader">
-          </xsl:call-template>
-          <xsl:call-template name="dollar-units"/>
-        </fo:static-content>
-
-        <!-- Define the contents of the footer. -->
-        <xsl:call-template name="standardfooter"/>
-
-        <xsl:if test="$scalars/SplitMinPrem='1'">
-          <xsl:call-template 
name="supplemental-illustration-report-split-premiums"/>
-        </xsl:if>
-        <xsl:if test="$scalars/SplitMinPrem='0'">
-          <xsl:call-template name="supplemental-illustration-report"/>
-        </xsl:if>
-
-      </fo:page-sequence>
-
-      <!-- Column Definition Page - begins here -->
-      <fo:page-sequence master-reference="column-definitions">
-
-        <!-- Define the contents of the header. -->
-        <fo:static-content flow-name="xsl-region-before">
-          <fo:block text-align="left">
-            <xsl:call-template name="company-logo"/>
-          </fo:block>
-          <xsl:call-template name="standardheader"/>
-        </fo:static-content>
-
-        <!-- Define the contents of the footer. -->
-        <xsl:call-template name="standardfooter"/>
-
-        <!-- Column Definitions Summary Body  -->
-        <fo:flow flow-name="xsl-region-body">
-          <fo:block padding="1em 0 5em" text-align="left" font-size="10pt" 
font-family="sans-serif">
-            <fo:block font-weight="bold" text-align="center">
-              Column Definitions and Key Terms
-            </fo:block>
-
-            <fo:block font-weight="bold" padding-top="1em">
-              Account Value
-            </fo:block>
-            <fo:block>
-              <xsl:value-of select="$scalars/AccountValueFootnote"/>
-            </fo:block>
-
-            <fo:block font-weight="bold" padding-top="1em">
-              Cash Surrender Value
-            </fo:block>
-            <fo:block>
-              <xsl:value-of select="$scalars/CashSurrValueFootnote"/>
-            </fo:block>
-
-            <fo:block font-weight="bold" padding-top="1em">
-              Death Benefit
-            </fo:block>
-            <fo:block>
-              <xsl:value-of select="$scalars/DeathBenefitFootnote"/>
-            </fo:block>
-
-            <xsl:if test="not($is_composite)">
-              <fo:block font-weight="bold" padding-top="1em">
-                End of Year Age
-              </fo:block>
-              <fo:block>
-              <xsl:value-of select="$scalars/AttainedAgeFootnote"/>
-              </fo:block>
-            </xsl:if>
-
-            <xsl:if test="$GroupCarveout='1'">
-              <fo:block font-weight="bold" padding-top="1em">
-                Gross Payment
-              </fo:block>
-              <fo:block>
-                <xsl:value-of select="$scalars/GrossPremiumFootnote"/>
-              </fo:block>
-            </xsl:if>
-
-            <fo:block font-weight="bold" padding-top="1em">
-              Gross Rate
-            </fo:block>
-            <fo:block>
-              <xsl:value-of select="$scalars/GrossRateFootnote"/>
-            </fo:block>
-
-            <xsl:if test="$GroupCarveout='1'">
-              <fo:block font-weight="bold" padding-top="1em">
-                Minimum Premium
-              </fo:block>
-              <fo:block>
-                <xsl:value-of select="$scalars/InitialPremiumFootnote"/>
-              </fo:block>
-            </xsl:if>
-
-            <fo:block font-weight="bold" padding-top="1em">
-              Net Premium
-            </fo:block>
-            <fo:block>
-              <xsl:value-of select="$scalars/NetPremiumFootnote"/>
-            </fo:block>
-
-            <fo:block font-weight="bold" padding-top="1em">
-              Net Rate
-            </fo:block>
-            <fo:block>
-              <xsl:value-of select="$scalars/NetRateFootnote"/>
-            </fo:block>
-
-            <fo:block font-weight="bold" padding-top="1em">
-              Policy Year
-            </fo:block>
-            <fo:block>
-              <xsl:value-of select="$scalars/PolicyYearFootnote"/>
-            </fo:block>
-
-            <fo:block font-weight="bold" padding-top="1em">
-              Premium Outlay
-            </fo:block>
-            <fo:block>
-              <xsl:value-of select="$scalars/OutlayFootnote"/>
-            </fo:block>
-
-          </fo:block>
-        </fo:flow>
-      </fo:page-sequence>
-
-      <!-- EXPLANATORY NOTES - begins here -->
-      <fo:page-sequence master-reference="explanatory-notes">
-
-        <!-- Define the contents of the header. -->
-        <fo:static-content flow-name="xsl-region-before">
-          <fo:block text-align="left">
-            <xsl:call-template name="company-logo"/>
-          </fo:block>
-          <xsl:call-template name="standardheader"/>
-        </fo:static-content>
-
-        <!-- Define the contents of the footer. -->
-        <xsl:call-template name="standardfooter"/>
-
-        <!-- Explanatory Notes Summary Body  -->
-        <fo:flow flow-name="xsl-region-body">
-          <fo:block text-align="left" font-size="9.75pt" 
font-family="sans-serif">
-            <fo:block font-weight="bold" text-align="center">
-              IMPORTANT TAX DISCLOSURE
-            </fo:block>
-
-            <fo:block padding-top="1em">
-              As illustrated, this
-              <xsl:value-of select="$scalars/ContractName"/>
-              <xsl:choose>
-                <xsl:when test="$scalars/IsMec='1'">
-                  becomes
-                </xsl:when>
-                <xsl:otherwise>
-                  would not become
-                </xsl:otherwise>
-              </xsl:choose>
-              a Modified Endowment Contract (MEC) under
-              the Internal Revenue Code<!-- prevent trailing space -->
-              <xsl:if test="$scalars/IsMec='1'">
-                in year <xsl:value-of select="$scalars/MecYear + 1"/>
-              </xsl:if>.
-              To the extent of gain in the
-              <xsl:value-of select="$scalars/ContractName"/>, loans,
-              distributions and withdrawals from a MEC are subject to income
-              tax and may also trigger a penalty tax.
-            </fo:block>
-
-            <xsl:if test="$scalars/IsInforce!='1'">
-              <fo:block padding-top="1em">
-                The initial 7-pay premium limit is
-                $<xsl:value-of select="$scalars/InitSevenPayPrem"/>.
-              </fo:block>
-            </xsl:if>
-
-            <fo:block padding-top="1em">
-              No tax charge is made to the Separate Account. However,
-              such a charge may be made in the future.
-            </fo:block>
-
-            <fo:block font-weight="bold" padding-top="1em">
-              The information contained in this illustration is not written
-              or intended as tax or legal advice.
-              Neither <xsl:value-of select="$scalars/InsCoShortName"/>
-              nor any of its employees or representatives are authorized
-              to give tax or legal advice. For more information pertaining
-              to the tax consequences of purchasing or owning this
-              <xsl:value-of select="$scalars/ContractName"/>,
-              consult with your own independent tax or legal counsel.
-            </fo:block>
-
-            <fo:block font-weight="bold" text-align="center" padding-top="2em">
-              EXPLANATORY NOTES
-            </fo:block>
-
-            <fo:block padding-top="1em">
-              <xsl:value-of select="$scalars/PolicyMktgName"/> is a
-              <xsl:value-of select="$scalars/PolicyLegalName"/> issued by
-              <xsl:value-of select="$scalars/InsCoName"/>.
-              <xsl:value-of select="$scalars/ProductDescription"/>
-            </fo:block>
-
-            <fo:block padding-top="1em">
-              <xsl:value-of select="$scalars/NoVanishPremiumFootnote"/>
-            </fo:block>
-
-            <xsl:if test="$scalars/NoLapse='1' and 
$scalars/StatePostalAbbrev!='NY'">
-              <fo:block padding-top="1em">
-                <xsl:value-of select="$scalars/NoLapseProvisionName"/>:
-                The <xsl:value-of select="$scalars/NoLapseProvisionName"/>
-                is a lapse protection feature. If met, this test allows
-                your <xsl:value-of select="$scalars/ContractName"/>
-                to stay in force for a period of time even if there is
-                insufficient <xsl:value-of select="$scalars/AvName"/>
-                Value to cover the <xsl:value-of select="$scalars/AvName"/>
-                Value charges.
-                Refer to your <xsl:value-of select="$scalars/ContractName"/>
-                for specific requirements of meeting the
-                <xsl:value-of select="$scalars/NoLapseProvisionName"/>.
-              </fo:block>
-            </xsl:if>
-
-            <xsl:if test="$scalars/NoLapseAlwaysActive='1'">
-              <fo:block padding-top="1em">
-                No-Lapse Guarantee: The
-                <xsl:value-of select="$scalars/ContractName"/> will remain in
-                force after the first premium has been paid, even if
-                there is insufficient <xsl:value-of select="$scalars/AvName"/>
-                Value to cover the monthly charges provided that the insured
-                is not in a substandard rating class and the
-                <xsl:value-of select="$scalars/ContractName"/> debt
-                does not exceed <xsl:value-of select="$scalars/AvName"/> Value.
-              </fo:block>
-            </xsl:if>
-
-            <fo:block padding-top="1em">
-              The definition of life insurance elected for this
-              <xsl:value-of select="$scalars/ContractName"/> is the
-              <xsl:choose>
-                <xsl:when test="$scalars/DefnLifeIns='GPT'">
-                  guideline premium test. The guideline single premium is
-                  $<xsl:value-of select="$scalars/InitGSP"/> and the guideline
-                  level premium is $<xsl:value-of select="$scalars/InitGLP"/>.
-                </xsl:when>
-                <xsl:otherwise>
-                  cash value accumulation test.
-                </xsl:otherwise>
-              </xsl:choose>
-            </fo:block>
-
-            <xsl:if test="$scalars/DefnLifeIns='GPT'">
-              <fo:block padding-top="1em">
-                <xsl:value-of select="$scalars/GptFootnote"/>
-              </fo:block>
-            </xsl:if>
-
-            <fo:block padding-top="1em">
-              <xsl:value-of select="$scalars/InsCoName"/> has the right
-              to promptly refund any amount of premium paid if it will
-              increase the net amount at risk (referred to in the
-              <xsl:value-of select="$scalars/ContractName"/>
-              as the Amount of Insurance that Requires a Charge).
-            </fo:block>
-
-            <fo:block padding-top="1em">
-              Premium payments are assumed to be made at the beginning
-              of the year. Account values, cash surrender values,
-              and death benefits are illustrated as of the end of the year.
-              <xsl:value-of select="$scalars/MinimumPremiumFootnote"/>
-            </fo:block>
-          </fo:block>
-        </fo:flow>
-      </fo:page-sequence>
-
-      <!--  EXPLANATORY NOTES page 2 - begins here -->
-      <fo:page-sequence master-reference="explanatory-notes-separate-account">
-        <!-- Define the contents of the header. -->
-        <fo:static-content flow-name="xsl-region-before">
-          <fo:block text-align="left">
-            <xsl:call-template name="company-logo"/>
-          </fo:block>
-          <xsl:call-template name="standardheader"/>
-        </fo:static-content>
-
-        <!-- Define the contents of the footer. -->
-        <xsl:call-template name="standardfooter">
-          <xsl:with-param name="include-underwriter" select="1"/>
-        </xsl:call-template>
-
-        <!-- Explanatory Notes Summary Body  -->
-        <fo:flow flow-name="xsl-region-body">
-          <fo:block text-align="left" font-size="9.75pt" 
font-family="sans-serif">
-            <fo:block font-weight="bold" text-align="center">
-              EXPLANATORY NOTES
-            </fo:block>
-            <fo:block padding-top="1em">
-              <xsl:value-of select="$scalars/GuarMortalityFootnote"/>
-            </fo:block>
-            <fo:block padding-top="1em">
-              This illustration assumes death of the insured at
-              age <xsl:value-of select="$scalars/EndtAge"/>.
-            </fo:block>
-            <xsl:if test="$scalars/StatePostalAbbrev='NC' or 
$scalars/StatePostalAbbrev='SC'">
-              <fo:block padding-top="1em">
-                In the states of North Carolina and South Carolina,
-                Guaranteed Issue Underwriting is referred to as
-                "Limited Underwriting" and Simplified Issue Underwriting
-                is referred to as "Simplified Underwriting".
-              </fo:block>
-            </xsl:if>
-            <xsl:if test="$scalars/StatePostalAbbrev='MD'">
-              <fo:block padding-top="1em">
-                In the state of Maryland, Guaranteed Issue Underwriting
-                is referred to as "Nonstandard Limited Underwriting"
-                and Simplified Issue Underwriting is referred to as
-                "Nonstandard Simplified Underwriting".
-              </fo:block>
-            </xsl:if>
-            <fo:block padding-top="1em">
-              <xsl:value-of select="$scalars/LoanFootnote"/>
-            </fo:block>
-            <fo:block padding-top="1em">
-              <xsl:value-of select="$scalars/PortabilityFootnote"/>
-            </fo:block>
-            <xsl:if test="$scalars/HasTerm='1'">
-              <fo:block padding-top="1em">
-              <xsl:value-of select="$scalars/TermFootnote"/>
-              </fo:block>
-            </xsl:if>
-            <xsl:if test="$scalars/HasSupplSpecAmt='1'">
-              <fo:block padding-top="1em">
-              <xsl:value-of select="$scalars/TermFootnote"/>
-              </fo:block>
-            </xsl:if>
-            <xsl:if test="$scalars/HasWP='1'">
-              <fo:block padding-top="1em">
-              <xsl:value-of select="$scalars/WaiverFootnote"/>
-              </fo:block>
-            </xsl:if>
-            <fo:block padding-top="1em">
-              <xsl:value-of select="$scalars/AccelBftRiderFootnote"/>
-            </fo:block>
-            <xsl:if test="$scalars/DefnLifeIns='GPT'">
-              <fo:block padding-top="1em">
-                <xsl:value-of select="$scalars/OverloanRiderFootnote"/>
-              </fo:block>
-            </xsl:if>
-            <xsl:if test="$scalars/HasADD='1'">
-              <fo:block padding-top="1em">
-              <xsl:value-of select="$scalars/ADDFootnote"/>
-              </fo:block>
-            </xsl:if>
-            <xsl:if test="$scalars/HasChildRider='1'">
-              <fo:block padding-top="1em">
-              The $<xsl:value-of select="$scalars/ChildRiderAmount"/>&nbsp;
-              <xsl:value-of select="$scalars/ChildFootnote"/>
-              </fo:block>
-            </xsl:if>
-            <xsl:if test="$scalars/HasSpouseRider='1'">
-              <fo:block padding-top="1em">
-              The $<xsl:value-of select="$scalars/SpouseRiderAmount"/>&nbsp;
-              <xsl:value-of select="$scalars/SpouseFootnote"/>
-              </fo:block>
-            </xsl:if>
-            <xsl:if test="$scalars/UsePartialMort='1'">
-              <fo:block padding-top="1em">
-                This illustration reflects the client's mortality assumption
-                of <xsl:value-of 
select="address@hidden'PartMortTableMult']/duration[1]/@column_value"/>
-                of the <xsl:value-of select="$scalars/PartMortTableName"/>
-                table with all deaths at the end of the year.
-              </fo:block>
-            </xsl:if>
-            <xsl:choose>
-              <xsl:when test="$scalars/GenderBlended='1'">
-                <fo:block padding-top="1em">
-                  Custom blending of cost of insurance charges is based
-                  on the plan's assumed distribution of initial selected
-                  face amount by gender and tobacco use. This illustration
-                  assumes that the distribution remains constant
-                  in future years. Custom blending is available only on plans
-                  of 100 or more lives. Custom blend assumptions:
-                  <xsl:choose>
-                    <xsl:when test="$scalars/SmokerBlended='1'">
-                      tobacco = <xsl:value-of select="$scalars/SmokerPct"/>;
-                    </xsl:when>
-                    <xsl:otherwise>
-                      no blending by tobacco use;
-                    </xsl:otherwise>
-                  </xsl:choose>
-                  male = <xsl:value-of select="$scalars/MalePct"/>.
-                </fo:block>
-              </xsl:when>
-              <xsl:when test="$scalars/SmokerBlended='1'">
-                <fo:block padding-top="1em">
-                  Custom blending of cost of insurance charges is based
-                  on the plan's assumed distribution of initial selected
-                  face amount by gender and tobacco use. This illustration
-                  assumes that the distribution remains constant
-                  in future years. Custom blending is available only on plans
-                  of 100 or more lives. Custom blend assumptions:
-                  tobacco = <xsl:value-of select="$scalars/SmokerPct"/>;
-                  <xsl:choose>
-                    <xsl:when test="$scalars/GenderBlended='1'">
-                      male = <xsl:value-of select="$scalars/MalePct"/>.
-                    </xsl:when>
-                    <xsl:otherwise>
-                      no blending by gender.
-                    </xsl:otherwise>
-                  </xsl:choose>
-                </fo:block>
-              </xsl:when>
-            </xsl:choose>
-            <fo:block padding-top="1em">
-              The state of issue is
-              <xsl:value-of select="$scalars/StatePostalAbbrev"/>.
-            </fo:block>
-            <xsl:if test="$scalars/IsInforce='1'">
-              <fo:block padding-top="1em">
-                This illustration assumes a beginning account value of
-                $<xsl:value-of select="$scalars/InforceUnloanedAV"/> as
-                of the date of this illustration.
-              </fo:block>
-            </xsl:if>
-            <xsl:if test="$scalars/IsInforce='1'">
-              <fo:block padding-top="1em">
-                This illustration assumes a beginning cost basis of
-                $<xsl:value-of select="$scalars/InforceTaxBasis"/> as
-                of the date of this illustration; the actual cost basis
-                may be higher or lower. Consult the Home Office for cost
-                basis information.
-              </fo:block>
-            </xsl:if>
-            <xsl:if test="$compliance_tracking_number">
-              <fo:block padding-top="1em">
-                Compliance tracking number:
-                <xsl:value-of select="$compliance_tracking_number"/>
-              </fo:block>
-            </xsl:if>
-            <xsl:if test="$scalars/StatePostalAbbrev='TX'">
-              <xsl:if test="$scalars/UWType='Guaranteed issue'">
-                <xsl:if test="$TexasFootnote='1'">
-                    <fo:block padding-top="1em">
-                      *** This policy is classified as substandard guaranteed 
issue
-                      per the requirements of the Texas Insurance Department.
-                    </fo:block>
-                 </xsl:if>
-              </xsl:if>
-            </xsl:if>
-            <fo:block font-weight="bold" text-align="center" padding-top="1em">
-              GUARANTEED PRINCIPAL ACCOUNT
-            </fo:block>
-            <fo:block padding-top="1em">
-              The Guaranteed Principal Account (GPA) has a guaranteed
-              minimum annual interest rate of
-              <xsl:value-of select="$scalars/InitAnnGenAcctInt_Guaranteed"/>.
-              Guarantees are based on the claims-paying ability of the
-              issuing company or companies.
-            </fo:block>
-            <fo:block font-weight="bold" text-align="center" padding-top="1em">
-              SEPARATE ACCOUNT
-            </fo:block>
-            <fo:block padding-top="1em">
-              <xsl:value-of select="$scalars/HypotheticalRatesFootnote"/>
-            </fo:block>
-            <xsl:if test="not($is_composite)">
-              <fo:block padding-top="1em">
-                This illustration is based on total Separate Account
-                fund expenses of
-                <xsl:value-of 
select="address@hidden'TotalIMF']/duration[1]/@column_value"/>.
-              </fo:block>
-              <xsl:if test="$scalars/AvgFund='1'">
-                <fo:block padding-top="1em">
-                  Investment management fees are based on equal
-                  initial allocations among the available funds.
-                </fo:block>
-              </xsl:if>
-              <xsl:if test="$scalars/CustomFund='1'">
-                <fo:block padding-top="1em">
-                  Investment management fees are based on an initial allocation
-                  of 100% to a custom fund selected by the purchaser.
-                </fo:block>
-              </xsl:if>
-            </xsl:if>
-            <fo:block font-weight="bold" padding-top="1em">
-              This material must be preceded or accompanied by the current
-              prospectus for the
-              <xsl:value-of select="$scalars/PolicyMktgName"/> Insurance
-              <xsl:value-of select="$scalars/ContractName"/> and the
-              prospectuses (or summary prospectuses, if available) for its
-              underlying investment choices. Before purchasing a
-              <xsl:value-of select="$scalars/ContractName"/>, you should
-              carefully consider the investment objectives, risks, charges
-              and expenses of the
-              <xsl:value-of select="$scalars/ContractName"/> and its underlying
-              investment choices. Please read the prospectuses carefully before
-              investing or sending money.
-            </fo:block>
-            <fo:block padding-top="1em">
-              <xsl:value-of select="$scalars/SubsidiaryFootnote"/>
-            </fo:block>
-            <fo:block padding-top="1em">
-              Securities offered through registered representatives of
-              <xsl:value-of select="$scalars/CoUnderwriter"/>&nbsp;
-              <xsl:value-of select="$scalars/CoUnderwriterAddress"/>
-              or a broker-dealer that has a selling agreement with
-              <xsl:value-of select="$scalars/MainUnderwriter"/>.
-            </fo:block>
-          </fo:block>
-          <xsl:if test="not($has_supplemental_report) and $is_composite">
-            <fo:block id="endofdoc"/>
-          </xsl:if>
-        </fo:flow>
-      </fo:page-sequence>
-
-      <!-- Illustration Assumption Detail -->
-      <xsl:if test="not($is_composite)">
-        <!-- Body page -->
-        <fo:page-sequence master-reference="illustration-assumption">
-
-          <!-- Define the contents of the header. -->
-          <fo:static-content flow-name="xsl-region-before">
-            <fo:block text-align="left">
-              <xsl:call-template name="company-logo"/>
-            </fo:block>
-            <xsl:call-template name="standardheader">
-              <xsl:with-param name="reporttitle" select="'Illustration 
Assumption Detail'"/>
-            </xsl:call-template>
-          </fo:static-content>
-
-          <!-- Define the contents of the footer. -->
-          <xsl:call-template name="standardfooter"/>
-
-          <xsl:call-template name="illustration-assumption-report"/>
-
-        </fo:page-sequence>
-      </xsl:if>
-
-      <!-- Supplemental Report -->
-      <!-- Body page -->
-      <xsl:if test="$has_supplemental_report">
-        <fo:page-sequence master-reference="supplemental-report">
-
-          <!-- Define the contents of the header. -->
-          <fo:static-content flow-name="xsl-region-before">
-            <fo:block text-align="left">
-              <xsl:call-template name="company-logo"/>
-            </fo:block>
-            <xsl:call-template name="standardheader">
-              <xsl:with-param name="reporttitle" select="'Supplemental 
Report'"/>
-            </xsl:call-template>
-            <xsl:call-template name="dollar-units"/>
-          </fo:static-content>
-
-          <!-- Define the contents of the footer. -->
-          <xsl:call-template name="standardfooter"/>
-
-          <!-- Supplemental report body -->
-          <xsl:call-template name="supplemental-report-body"/>
-        </fo:page-sequence>
-      </xsl:if>
-    </fo:root>
-  </xsl:template>
-
-  <xsl:template name="standardheader">
-    <xsl:param name="reporttitle"/>
-    <fo:block text-align="center" font-size="9.75pt">
-      <fo:block padding-top="1em">
-        The purpose of this illustration is to show how the performance
-        of the underlying investment account could affect the
-        <xsl:value-of select="$scalars/ContractName"/>
-        account value and death benefit.
-        <fo:inline font-weight="bold">
-          These hypothetical returns do not reflect past performance
-          and are not predictive of future results. Actual results could be
-          less than or greater than the hypothetical results
-          and in all likelihood will vary from year to year.
-        </fo:inline>
-      </fo:block>
-      <fo:block padding-top="1em">
-        <xsl:value-of select="$reporttitle"/>
-      </fo:block>
-    </fo:block>
-    <fo:block font-size="10pt" font-family="sans-serif">
-      <fo:table table-layout="fixed" width="100%">
-        <fo:table-column column-width="125mm"/>
-        <fo:table-column column-width="proportional-column-width(1)"/>
-        <fo:table-body>
-          <fo:table-row>
-            <fo:table-cell padding-right="2mm">
-              <fo:block text-align="left">
-                <xsl:choose>
-                  <xsl:when test="$is_composite">
-                    <xsl:call-template name="limitstring">
-                      <xsl:with-param name="passString" 
select="$scalars/CorpName"/>
-                      <xsl:with-param name="length" select="60"/>
-                    </xsl:call-template>
-                  </xsl:when>
-                  <xsl:when test="not($scalars/Insured1='  ')">
-                    <xsl:call-template name="limitstring">
-                      <xsl:with-param name="passString" 
select="$scalars/Insured1"/>
-                      <xsl:with-param name="length" select="30"/>
-                    </xsl:call-template>,
-                    <xsl:value-of select="$scalars/Gender"/>
-                    <!-- xsl:text prevents space from being stripped -->
-                    <xsl:text> </xsl:text>
-                    <xsl:value-of select="$scalars/Smoker"/> rates,
-                    Age <xsl:value-of select="$scalars/Age"/>
-                  </xsl:when>
-                </xsl:choose>
-              </fo:block>
-              <xsl:if test="$is_composite">
-                <fo:block text-align="left">
-                  Composite
-                </fo:block>
-              </xsl:if>
-              <fo:block text-align="left">
-                <xsl:value-of 
select="concat(translate(substring($scalars/ContractName,1,1), $lowerAZ, 
$upperAZ), substring($scalars/ContractName,2))"/>: <xsl:value-of 
select="$scalars/PolicyMktgName"/>
-              </fo:block>
-              <xsl:if test="$GroupCarveout='1'">
-                <fo:block text-align="left">
-                  Minimum Initial Premium: $<xsl:value-of 
select="$scalars/InitMinPrem"/>
-                </fo:block>
-              </xsl:if>
-              <fo:block text-align="left">
-                First Year Premium: $<xsl:value-of select="$scalars/InitPrem"/>
-              </fo:block>
-              <xsl:if test="not($is_composite)">
-                <fo:block text-align="left">
-                  <xsl:choose>
-                    <xsl:when test="$scalars/UWType='Medical'">
-                      Fully underwritten,
-                    </xsl:when>
-                    <xsl:when test="$scalars/StatePostalAbbrev='TX' and 
$scalars/UWType='Guaranteed issue' and $TexasFootnote='1'">
-                      Substandard ***,
-                    </xsl:when>
-                    <xsl:otherwise>
-                      <xsl:value-of select="$scalars/UWType"/>,
-                    </xsl:otherwise>
-                  </xsl:choose>
-                  <xsl:value-of select="$scalars/UWClass"/>,
-                  Initial Death Benefit Option:
-                  <xsl:value-of select="$scalars/InitDBOpt"/>
-                </fo:block>
-              </xsl:if>
-              <xsl:if test="not($is_composite) and $scalars/UWClass='Rated'">
-                <fo:block text-align="left">
-                  Table Rating:
-                  <xsl:value-of select="$scalars/SubstandardTable"/>
-                </fo:block>
-              </xsl:if>
-              <xsl:call-template 
name="print-mastercontractnumber-and-contractnumber"/>
-            </fo:table-cell>
-            <fo:table-cell>
-<!-- Keep intact in case it's useful to others; however, regulators may find
-it confusing if the general account rates aren't included, too.
-              <fo:block text-align="left">
-                Assumed Separate Account Rate:
-                  <fo:block text-align="left">
-                    &nbsp;&nbsp;&nbsp;&nbsp;Gross
-                    <xsl:value-of 
select="$scalars/InitAnnSepAcctGrossInt_Current"/>
-                    (<xsl:value-of 
select="$scalars/InitAnnSepAcctNetInt_Current"/>
-                    Net)*
-                  </fo:block>
-              </fo:block>
--->
-                <fo:block text-align="left">
-                  Assumed Premium Allocation:**
-                  <fo:block text-align="left">
-                    &nbsp;&nbsp;&nbsp;&nbsp;Separate Account: <xsl:value-of 
select="format-number(1 - $scalars/GenAcctAllocation, '###%')"/>
-                  </fo:block>
-                  <fo:block>
-                    &nbsp;&nbsp;&nbsp;&nbsp;Guaranteed Principal Account 
(GPA): <xsl:value-of select="format-number($scalars/GenAcctAllocation, 
'###%')"/>
-                  </fo:block>
-                </fo:block>
-              <fo:block text-align="left">
-                Initial
-                <xsl:if test="$scalars/HasTerm='1' or 
$scalars/HasSupplSpecAmt='1'">
-                  Total
-                </xsl:if>
-                Face Amount: $<xsl:value-of select="$scalars/InitTotalSA"/>
-              </fo:block>
-              <xsl:if test="$scalars/HasTerm='1' or 
$scalars/HasSupplSpecAmt='1'">
-                <fo:block text-align="left">
-                  Initial Base Face Amount:
-                  $<xsl:value-of select="$scalars/InitBaseSpecAmt"/>
-                </fo:block>
-                <fo:block text-align="left">
-                  Initial
-                  <xsl:if test="$scalars/HasTerm='1'">
-                    Term Face Amount:
-                  </xsl:if>
-                  <xsl:if test="$scalars/HasSupplSpecAmt='1'">
-                   Supplemental Face Amount:
-                  </xsl:if>
-                  $<xsl:value-of select="$scalars/InitTermSpecAmt"/>
-                </fo:block>
-              </xsl:if>
-            </fo:table-cell>
-          </fo:table-row>
-        </fo:table-body>
-      </fo:table>
-    </fo:block>
-  </xsl:template>
-
-  <xsl:template name="basic-illustration-report">
-    <!-- columns for generate basic-illustration-report -->
-    <xsl:variable name="basic_illustration_columns_raw">
-      <!--
-      The 'composite' attribute (if present) indicates that the column
-      is only to be included when the report type is (not) a composite.
-      -->
-      <column name="PolicyYear">Policy _Year</column>
-      <column composite="0" name="AttainedAge">End of _Year Age</column>
-      <column name="GrossPmt">Premium _Outlay</column>
-      <column composite="1"/>
-      <column name="CSVNet_GuaranteedZero">Cash Surr _Value</column>
-      <column name="EOYDeathBft_GuaranteedZero">Death _Benefit</column>
-      <column/>
-      <column name="CSVNet_Guaranteed">Cash Surr Value</column>
-      <column name="EOYDeathBft_Guaranteed">Death _Benefit</column>
-      <column/>
-      <column name="CSVNet_CurrentZero">Cash Surr Value</column>
-      <column name="EOYDeathBft_CurrentZero">Death _Benefit</column>
-      <column/>
-      <column name="CSVNet_Current">Cash Surr Value</column>
-      <column name="EOYDeathBft_Current">Death _Benefit</column>
-    </xsl:variable>
-    <xsl:variable name="basic_illustration_columns" 
select="document('')//xsl:address@hidden'basic_illustration_columns_raw']/column"/>
-    <xsl:variable name="columns" 
select="$basic_illustration_columns[not(@composite) or 
boolean(boolean(@composite='1')=$is_composite)]"/>
-
-    <!-- The main contents of the body page -->
-    <fo:flow flow-name="xsl-region-body">
-      <fo:block font-size="9pt" font-family="serif">
-        <fo:table table-layout="fixed" width="100%">
-          <xsl:call-template name="generate-table-columns">
-            <xsl:with-param name="columns" select="$columns"/>
-          </xsl:call-template>
-
-          <fo:table-header>
-            <!-- Custom part (the biggest) of the table header -->
-            <fo:table-row>
-              <fo:table-cell number-columns-spanned="3">
-                <fo:block/>
-              </fo:table-cell>
-              <fo:table-cell number-columns-spanned="5">
-                <xsl:call-template name="header-cell-with-border"/>
-                <fo:block text-align="center">
-                  Using guaranteed charges
-                </fo:block>
-              </fo:table-cell>
-              <fo:table-cell>
-                <fo:block/>
-              </fo:table-cell>
-              <fo:table-cell number-columns-spanned="5">
-                <xsl:call-template name="header-cell-with-border"/>
-                <fo:block text-align="center">
-                  Using current charges
-                </fo:block>
-              </fo:table-cell>
-            </fo:table-row>
-            <fo:table-row>
-              <fo:table-cell number-columns-spanned="3">
-                <fo:block/>
-              </fo:table-cell>
-              <fo:table-cell number-columns-spanned="2">
-                <xsl:call-template name="header-cell-with-border"/>
-                <fo:block text-align="center">
-                  <xsl:value-of 
select="$scalars/InitAnnSepAcctGrossInt_GuaranteedZero"/>
-                  Assumed Sep Acct
-                </fo:block>
-                <fo:block text-align="center">
-                  Gross Rate*
-                  (<xsl:value-of 
select="$scalars/InitAnnSepAcctNetInt_GuaranteedZero"/>
-                  net)
-                </fo:block>
-                <fo:block text-align="center">
-                  <xsl:value-of 
select="$scalars/InitAnnGenAcctInt_Guaranteed"/>
-                  GPA rate
-                </fo:block>
-              </fo:table-cell>
-              <fo:table-cell>
-                <fo:block/>
-              </fo:table-cell>
-              <fo:table-cell number-columns-spanned="2">
-                <xsl:call-template name="header-cell-with-border"/>
-                <fo:block text-align="center">
-                  <xsl:value-of 
select="$scalars/InitAnnSepAcctGrossInt_Guaranteed"/>
-                  Assumed Sep Acct
-                </fo:block>
-                <fo:block text-align="center">
-                  Gross Rate*
-                  (<xsl:value-of 
select="$scalars/InitAnnSepAcctNetInt_Guaranteed"/>
-                  net)
-                </fo:block>
-                <fo:block text-align="center">
-                  <xsl:value-of 
select="$scalars/InitAnnGenAcctInt_Guaranteed"/>
-                  GPA rate
-                </fo:block>
-              </fo:table-cell>
-              <fo:table-cell>
-                <fo:block/>
-              </fo:table-cell>
-              <fo:table-cell number-columns-spanned="2">
-                <xsl:call-template name="header-cell-with-border"/>
-                <fo:block text-align="center">
-                  <xsl:value-of 
select="$scalars/InitAnnSepAcctGrossInt_CurrentZero"/>
-                  Assumed Sep Acct
-                </fo:block>
-                <fo:block text-align="center">
-                  Gross Rate*
-                  (<xsl:value-of 
select="$scalars/InitAnnSepAcctNetInt_CurrentZero"/>
-                  net)
-                </fo:block>
-                <fo:block text-align="center">
-                  <xsl:value-of select="$scalars/InitAnnGenAcctInt_Current"/>
-                  GPA rate
-                </fo:block>
-              </fo:table-cell>
-              <fo:table-cell>
-                <fo:block/>
-              </fo:table-cell>
-              <fo:table-cell number-columns-spanned="2">
-                <xsl:call-template name="header-cell-with-border"/>
-                <fo:block text-align="center">
-                  <xsl:value-of 
select="$scalars/InitAnnSepAcctGrossInt_Current"/>
-                  Assumed Sep Acct
-                </fo:block>
-                <fo:block text-align="center">
-                  Gross Rate*
-                  (<xsl:value-of 
select="$scalars/InitAnnSepAcctNetInt_Current"/>
-                  net)
-                </fo:block>
-                <fo:block text-align="center">
-                  <xsl:value-of select="$scalars/InitAnnGenAcctInt_Current"/>
-                  GPA rate
-                </fo:block>
-              </fo:table-cell>
-            </fo:table-row>
-
-            <!-- Generic part of the table header -->
-            <xsl:call-template name="generate-table-headers">
-              <xsl:with-param name="columns" select="$columns"/>
-            </xsl:call-template>
-          </fo:table-header>
-
-          <fo:table-body>
-            <xsl:call-template name="generate-table-values">
-              <xsl:with-param name="columns" select="$columns"/>
-              <xsl:with-param name="counter" select="$scalars/InforceYear + 
1"/>
-              <xsl:with-param name="max-counter" select="$max-lapse-year"/>
-              <xsl:with-param name="inforceyear" select="0 - 
$scalars/InforceYear"/>
-            </xsl:call-template>
-          </fo:table-body>
-        </fo:table>
-      </fo:block>
-    </fo:flow>
-  </xsl:template>
-
-  <xsl:template name="supplemental-illustration-report">
-    <xsl:variable name="supplemental_illustration_columns_raw">
-      <column name="PolicyYear">Policy _Year</column>
-      <column composite="0" name="AttainedAge">End of _Year Age</column>
-      <column name="GrossPmt">Premium _Outlay</column>
-      <column composite="1"/>
-      <column name="PolicyFee_Current">Admin _Charge</column>
-      <column name="PremTaxLoad_Current">Premium _Tax Load</column>
-      <column name="DacTaxLoad_Current">DAC _Tax Load</column>
-      <column name="NetPmt_Current">Net _Premium</column>
-      <column name="COICharge_Current">Cost of Insurance _Charges</column>
-      <column name="AcctVal_Current">Current _Account _Value</column>
-      <column name="CSVNet_Current">Current _Cash Surr _Value</column>
-      <column name="EOYDeathBft_Current">Current _Death _Benefit</column>
-    </xsl:variable>
-    <xsl:variable name="supplemental_illustration_columns" 
select="document('')//xsl:address@hidden'supplemental_illustration_columns_raw']/column"/>
-    <xsl:variable name="columns" 
select="$supplemental_illustration_columns[not(@composite) or 
boolean(boolean(@composite='1')=$is_composite)]"/>
-
-    <!-- The main contents of the body page -->
-    <fo:flow flow-name="xsl-region-body">
-      <fo:block font-size="9pt" font-family="serif">
-        <fo:table table-layout="fixed" width="100%">
-          <xsl:call-template name="generate-table-columns">
-            <xsl:with-param name="columns" select="$columns"/>
-          </xsl:call-template>
-
-          <fo:table-header>
-            <xsl:call-template name="generate-table-headers">
-              <xsl:with-param name="columns" select="$columns"/>
-            </xsl:call-template>
-          </fo:table-header>
-
-          <fo:table-body>
-            <xsl:call-template name="generate-table-values">
-              <xsl:with-param name="columns" select="$columns"/>
-              <xsl:with-param name="counter" select="$scalars/InforceYear + 
1"/>
-              <xsl:with-param name="max-counter" select="$max-lapse-year"/>
-              <xsl:with-param name="inforceyear" select="0 - 
$scalars/InforceYear"/>
-            </xsl:call-template>
-          </fo:table-body>
-        </fo:table>
-      </fo:block>
-    </fo:flow>
-  </xsl:template>
-
-  <xsl:template name="supplemental-illustration-report-split-premiums">
-    <xsl:variable name="supplemental_illustration_columns_split_premiums">
-      <column name="PolicyYear">Policy _Year</column>
-      <column composite="0" name="AttainedAge">End of _Year Age</column>
-      <column name="ErGrossPmt">ER Gross _Payment</column>
-      <column composite="1"/>
-      <column name="EeGrossPmt">EE Gross _Payment</column>
-      <column name="GrossPmt">Premium _Outlay</column>
-      <column name="ErModalMinimumPremium">ER Modal _Minimum _Premium</column>
-      <column name="EeModalMinimumPremium">EE Modal _Minimum _Premium</column>
-      <column name="NetPmt_Current">Net _Premium</column>
-      <column name="COICharge_Current">Cost of Insurance _Charges</column>
-      <column name="AcctVal_Current">Current _Account _Value</column>
-      <column name="CSVNet_Current">Current _Cash Surr _Value</column>
-      <column name="EOYDeathBft_Current">Current _Death _Benefit</column>
-    </xsl:variable>
-    <xsl:variable name="supplemental_illustration_columns" 
select="document('')//xsl:address@hidden'supplemental_illustration_columns_split_premiums']/column"/>
-    <xsl:variable name="columns" 
select="$supplemental_illustration_columns[not(@composite) or 
boolean(boolean(@composite='1')=$is_composite)]"/>
-
-    <!-- The main contents of the body page -->
-    <fo:flow flow-name="xsl-region-body">
-      <fo:block font-size="9pt" font-family="serif">
-        <fo:table table-layout="fixed" width="100%">
-          <xsl:call-template name="generate-table-columns">
-            <xsl:with-param name="columns" select="$columns"/>
-          </xsl:call-template>
-
-          <fo:table-header>
-            <xsl:call-template name="generate-table-headers">
-              <xsl:with-param name="columns" select="$columns"/>
-            </xsl:call-template>
-          </fo:table-header>
-
-          <fo:table-body>
-            <xsl:call-template name="generate-table-values">
-              <xsl:with-param name="columns" select="$columns"/>
-              <xsl:with-param name="counter" select="$scalars/InforceYear + 
1"/>
-              <xsl:with-param name="max-counter" select="$max-lapse-year"/>
-              <xsl:with-param name="inforceyear" select="0 - 
$scalars/InforceYear"/>
-            </xsl:call-template>
-          </fo:table-body>
-        </fo:table>
-      </fo:block>
-    </fo:flow>
-  </xsl:template>
-
-  <xsl:template name="illustration-assumption-report">
-    <!-- columns to be included in the table -->
-    <xsl:variable name="illustration_assumption_columns_raw">
-      <column name="PolicyYear">|Policy _Year</column>
-
-      <column composite="1"/>
-      <column composite="1" name="NetWD">|Withdrawal</column>
-      <column composite="1"/>
-      <column composite="1" name="NewCashLoan">|Loan</column>
-      <column composite="1"/>
-
-      <column composite="0" name="AttainedAge">|End of _Year Age</column>
-      <column composite="0"/>
-      <column composite="0" name="AnnSAIntRate_Current">Net Crediting Rate|Sep 
Acct</column>
-      <column composite="0" name="AnnGAIntRate_Current">Net Crediting Rate|Gen 
Acct</column>
-      <column composite="0" name="CurrMandE">|M&amp;E</column>
-      <column composite="0" name="EeMode">|Indiv _Pmt Mode</column>
-      <column composite="0" name="ErMode">|Corp _Pmt Mode</column>
-      <column composite="0" scalar="InitAnnLoanDueRate">|Assumed _Loan 
Interest</column>
-    </xsl:variable>
-    <xsl:variable name="illustration_assumption_columns" 
select="document('')//xsl:address@hidden'illustration_assumption_columns_raw']/column"/>
-    <xsl:variable name="columns" 
select="$illustration_assumption_columns[not(@composite) or 
(boolean(@composite='1')=$is_composite)]"/>
-
-    <!-- The main contents of the body page -->
-    <fo:flow flow-name="xsl-region-body">
-      <fo:block font-size="9pt" font-family="serif">
-        <fo:table table-layout="fixed" width="100%">
-          <xsl:call-template name="generate-table-columns">
-            <xsl:with-param name="columns" select="$columns"/>
-          </xsl:call-template>
-
-          <fo:table-header>
-            <xsl:choose>
-              <xsl:when test="$is_composite">
-                <fo:table-header>
-                  <xsl:call-template name="generate-table-headers">
-                    <xsl:with-param name="columns" select="$columns"/>
-                  </xsl:call-template>
-                </fo:table-header>
-              </xsl:when>
-              <xsl:otherwise><!-- not($is_composite) -->
-                <!--
-                The special feature requested: the cell 'Net Crediting Rate'
-                to be nicely centered over two cells.
-                Thus use 'illustration-assumption-custom-headers',
-                not the generic 'generate-table-header'.
-                -->
-                <xsl:call-template 
name="illustration-assumption-custom-headers"/>
-              </xsl:otherwise>
-            </xsl:choose>
-          </fo:table-header>
-
-          <fo:table-body>
-            <xsl:call-template name="generate-table-values">
-              <xsl:with-param name="columns" select="$columns"/>
-              <xsl:with-param name="counter" select="$scalars/InforceYear + 
1"/>
-              <xsl:with-param name="max-counter" select="$max-lapse-year"/>
-              <xsl:with-param name="inforceyear" select="0 - 
$scalars/InforceYear"/>
-            </xsl:call-template>
-          </fo:table-body>
-        </fo:table>
-      </fo:block>
-      <xsl:if test="not($has_supplemental_report)">
-        <fo:block id="endofdoc"/>
-      </xsl:if>
-    </fo:flow>
-  </xsl:template>
-
-  <xsl:template name="list-fund-allocation">
-    <xsl:param name="counter"/>
-    <xsl:if 
test="address@hidden'FundNames']/duration[$counter]/@column_value!=''">
-      <fo:block>
-        <xsl:value-of 
select="address@hidden'FundAllocations']/duration[$counter]/@column_value"/>
-        <xsl:value-of 
select="address@hidden'FundNames']/duration[$counter]/@column_value"/>
-      </fo:block>
-      <xsl:call-template name="list-fund-allocation">
-        <xsl:with-param name="counter" select="$counter + 1"/>
-      </xsl:call-template>
-    </xsl:if>
-  </xsl:template>
-
-  <xsl:template name="standardfooter">
-    <xsl:param name="omit-pagenumber" select="boolean(0)"/>
-    <xsl:param name="include-underwriter" select="boolean(0)"/>
-    <xsl:call-template name="generic-footer">
-      <xsl:with-param name="top-block">
-<!--
-        <xsl:if test="$include-underwriter">
-          <fo:block padding-top="1em">
-            The Principal Underwriter is
-            <xsl:value-of select="$scalars/MainUnderwriter"/>
-            , a wholly owned subsidiary of
-            <xsl:value-of select="$scalars/InsCoName"/>
-            and is located at
-            <fo:block>
-              <xsl:value-of select="$scalars/MainUnderwriterAddress"/>
-            </fo:block>
-          </fo:block>
-        </xsl:if>
--->
-        <fo:block>
-          * This illustration is based on the assumed Gross Rate shown.
-          The Net Rate is provided for information purposes only.
-        </fo:block>
-        <fo:block>
-          ** <xsl:value-of select="$scalars/PremAllocationFootnote"/>
-        </fo:block>
-        <fo:block padding-top="0.25em">
-          See the Explanatory Notes for important
-          <xsl:value-of select="$scalars/ContractName"/> information.
-          This illustration is not complete without all pages.
-        </fo:block>
-      </xsl:with-param>
-      <xsl:with-param name="left-block">
-        <fo:block><xsl:value-of select="$scalars/InsCoName"/></fo:block>
-        <fo:block><xsl:value-of select="$scalars/InsCoAddr"/></fo:block>
-      </xsl:with-param>
-      <xsl:with-param name="center-block">
-        <fo:block>
-          Date Prepared:
-          <xsl:call-template name="date-prepared"/>
-        </fo:block>
-        <xsl:if test="$scalars/LmiVersion!=''">
-          <fo:block>
-            System Version:
-            <xsl:value-of select="$scalars/LmiVersion"/>
-          </fo:block>
-        </xsl:if>
-      </xsl:with-param>
-      <xsl:with-param name="right-block">
-        <fo:block>
-          Policy Form:
-          <xsl:value-of select="$scalars/PolicyForm"/>
-        </fo:block>
-        <fo:block>
-          <xsl:choose>
-            <xsl:when test="not($omit-pagenumber)">
-              <xsl:call-template name="page-of"/>
-            </xsl:when>
-            <xsl:otherwise>
-              Attachment
-            </xsl:otherwise>
-          </xsl:choose>
-        </fo:block>
-      </xsl:with-param>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template name="set_group_carveout">
-    <xsl:value-of select="number($scalars/PolicyLegalName='Group Flexible 
Premium Variable Adjustable Life Insurance Certificate')"/>
-  </xsl:template>
-
-  <xsl:template name="set_texas_footnote">
-    <xsl:value-of select="number($scalars/PolicyLegalName='Flexible Premium 
Variable Adjustable Life Insurance Policy')"/>
-  </xsl:template>
-
-</xsl:stylesheet>
-
diff --git a/objects.make b/objects.make
index 15ddca7..5e8080c 100644
--- a/objects.make
+++ b/objects.make
@@ -174,11 +174,6 @@ cli_objects := \
 
 # Illustrations: files shared by the antediluvian and production branches.
 
-# PDF !! Expunge these two object files
-#  ledger_xml_io.o
-#  ledger_xsl.o
-# from the list below.
-
 common_common_objects := \
   $(boost_filesystem_objects) \
   $(xmlwrapp_objects) \
@@ -230,8 +225,6 @@ common_common_objects := \
   ledger_text_formats.o \
   ledger_variant.o \
   ledger_variant_init.o \
-  ledger_xml_io.o \
-  ledger_xsl.o \
   ledgervalues.o \
   license.o \
   loads.o \
diff --git a/reg_d_group.xsl b/reg_d_group.xsl
deleted file mode 100644
index 7c66a65..0000000
--- a/reg_d_group.xsl
+++ /dev/null
@@ -1,912 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Life insurance illustrations.
-
-    Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 
2014, 2015, 2016, 2017, 2018 Gregory W. Chicares.
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License version 2 as
-    published by the Free Software Foundation.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-
-    http://savannah.nongnu.org/projects/lmi
-    email: <address@hidden>
-    snail: Chicares, 186 Belle Woods Drive, Glastonbury CT 06033, USA
--->
-<!DOCTYPE stylesheet [
-<!ENTITY nbsp "&#xA0;">
-]>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
xmlns:fo="http://www.w3.org/1999/XSL/Format"; version="1.0">
-  <xsl:import href="fo_common.xsl"/>
-  <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
-
-  <xsl:template match="/">
-    <fo:root>
-      <fo:layout-master-set>
-
-        <!-- Define the cover page. -->
-        <fo:simple-page-master master-name="cover">
-          <xsl:call-template name="set-page-size"/>
-          <fo:region-body margin=".1in .1in 0in"/>
-        </fo:simple-page-master>
-
-        <!-- Define the Column Definitions page. -->
-        <fo:simple-page-master master-name="column-definitions">
-          <xsl:call-template name="set-page-size"/>
-          <!-- Central part of page -->
-          <fo:region-body margin="2.25in 0 1in"/>
-          <!-- Header -->
-          <fo:region-before extent="3in"/>
-          <!-- Footer -->
-          <fo:region-after extent="1in"/>
-        </fo:simple-page-master>
-
-        <!-- Define the narrative summary page. -->
-        <fo:simple-page-master master-name="narrative-summary">
-          <xsl:call-template name="set-page-size"/>
-          <!-- Central part of page -->
-          <fo:region-body margin="2.5in 0 1.25in"/>
-          <!-- Header -->
-          <fo:region-before extent="3in"/>
-          <!-- Footer -->
-          <fo:region-after extent="1in"/>
-        </fo:simple-page-master>
-
-        <!-- Define the narrative summary page. -->
-        <fo:simple-page-master 
master-name="narrative-summary-separate-account">
-          <xsl:call-template name="set-page-size"/>
-          <!-- Central part of page -->
-          <fo:region-body margin="2.25in 0 3in"/>
-          <!-- Header -->
-          <fo:region-before extent="3in"/>
-          <!-- Footer -->
-          <fo:region-after extent="1in"/>
-        </fo:simple-page-master>
-
-        <!-- Define the Basic Illustration page. -->
-        <fo:simple-page-master master-name="basic-illustration">
-          <xsl:call-template name="set-page-size"/>
-          <!-- Central part of page -->
-          <fo:region-body margin="3in 0 1.25in"/>
-          <!-- Header -->
-          <fo:region-before extent="3in"/>
-          <!-- Footer -->
-          <fo:region-after extent="1in"/>
-        </fo:simple-page-master>
-
-        <!-- Define the Supplemental Illustration page. -->
-        <fo:simple-page-master master-name="supplemental-illustration">
-          <xsl:call-template name="set-page-size"/>
-          <!-- Central part of page -->
-          <fo:region-body margin="3in 0 1in"/>
-          <!-- Header -->
-          <fo:region-before extent="3in"/>
-          <!-- Footer -->
-          <fo:region-after extent=".9in"/>
-        </fo:simple-page-master>
-
-        <!-- Define the Illustration Assumption Detail page. -->
-        <fo:simple-page-master master-name="illustration-assumption">
-          <xsl:call-template name="set-page-size"/>
-          <!-- Central part of page -->
-          <fo:region-body margin="2.8in 0 1in"/>
-          <!-- Header -->
-          <fo:region-before extent="3in"/>
-          <!-- Footer -->
-          <fo:region-after extent=".9in"/>
-        </fo:simple-page-master>
-
-        <!-- Define the Supplemental Report page. -->
-        <xsl:if test="$has_supplemental_report">
-          <fo:simple-page-master master-name="supplemental-report">
-            <xsl:call-template name="set-page-size"/>
-            <!-- Central part of page -->
-            <fo:region-body margin="2.8in 0 1.1in"/>
-            <!-- Header -->
-            <fo:region-before extent="3in"/>
-            <!-- Footer -->
-            <fo:region-after extent="1in"/>
-          </fo:simple-page-master>
-        </xsl:if>
-
-      </fo:layout-master-set>
-
-      <!-- The data to be displayed in the pages, cover page first. -->
-      <xsl:call-template name="generic-cover"/>
-
-      <!-- Basic Illustration -->
-      <!-- Body page -->
-      <fo:page-sequence master-reference="basic-illustration" 
initial-page-number="1">
-
-        <!-- Define the contents of the header. -->
-        <fo:static-content flow-name="xsl-region-before">
-        <fo:block text-align="left">
-          <xsl:call-template name="company-logo"/>
-        </fo:block>
-        <xsl:call-template name="standardheader">
-          <xsl:with-param name="reporttitle">
-            <xsl:choose>
-              <xsl:when test="$scalars/IsInforce!='1'">
-                Basic Illustration
-              </xsl:when>
-              <xsl:otherwise>
-                In Force Basic Illustration
-              </xsl:otherwise>
-            </xsl:choose>
-          </xsl:with-param>
-        </xsl:call-template>
-        <xsl:call-template name="dollar-units"/>
-        </fo:static-content>
-
-        <!-- Define the contents of the footer. -->
-        <xsl:call-template name="standardfooter"/>
-
-        <xsl:call-template name="basic-illustration-report"/>
-
-      </fo:page-sequence>
-
-      <!-- Supplemental Illustration -->
-      <!-- narrative summary - begins here -->
-      <fo:page-sequence master-reference="column-definitions">
-
-        <!-- Define the contents of the header. -->
-        <fo:static-content flow-name="xsl-region-before">
-          <fo:block text-align="left">
-            <xsl:call-template name="company-logo"/>
-          </fo:block>
-          <xsl:call-template name="standardheader"/>
-        </fo:static-content>
-
-        <!-- Define the contents of the footer. -->
-        <xsl:call-template name="standardfooter"/>
-
-        <!-- Column Definitions Summary Body  -->
-        <fo:flow flow-name="xsl-region-body">
-          <fo:block text-align="left" font-size="10pt" 
font-family="sans-serif">
-            <fo:block font-weight="bold" text-align="center" 
padding-bottom="2em">
-              Column Definitions
-            </fo:block>
-
-            <fo:block font-weight="bold" padding-top="2em">
-              Policy Year
-            </fo:block>
-            <fo:block>
-              <xsl:value-of select="$scalars/PolicyYearFootnote"/>
-            </fo:block>
-
-            <xsl:if test="not($is_composite)">
-              <fo:block font-weight="bold" padding-top="2em">
-                End of Year Age
-              </fo:block>
-              <fo:block>
-              <xsl:value-of select="$scalars/AttainedAgeFootnote"/>
-              </fo:block>
-            </xsl:if>
-
-            <fo:block font-weight="bold" padding-top="2em">
-              Premium Outlay
-            </fo:block>
-            <fo:block>
-              <xsl:value-of select="$scalars/OutlayFootnote"/>
-            </fo:block>
-
-            <fo:block font-weight="bold" padding-top="2em">
-              Cash Surrender Value
-            </fo:block>
-            <fo:block>
-              <xsl:value-of select="$scalars/CashSurrValueFootnote"/>
-            </fo:block>
-
-            <fo:block font-weight="bold" padding-top="2em">
-              Death Benefit
-            </fo:block>
-            <fo:block>
-              <xsl:value-of select="$scalars/DeathBenefitFootnote"/>
-            </fo:block>
-          </fo:block>
-        </fo:flow>
-      </fo:page-sequence>
-
-      <!-- narrative summary - begins here -->
-      <fo:page-sequence master-reference="narrative-summary">
-
-        <!-- Define the contents of the header. -->
-        <fo:static-content flow-name="xsl-region-before">
-          <fo:block text-align="left">
-            <xsl:call-template name="company-logo"/>
-          </fo:block>
-          <xsl:call-template name="standardheader">
-            <xsl:with-param name="reporttitle" select="'Narrative Summary'"/>
-          </xsl:call-template>
-        </fo:static-content>
-
-        <!-- Define the contents of the footer. -->
-        <xsl:call-template name="standardfooter"/>
-
-        <!-- narrative summary Summary Body  -->
-        <fo:flow flow-name="xsl-region-body">
-          <fo:block text-align="left" font-size="10pt" 
font-family="sans-serif">
-            <fo:block>
-              <xsl:value-of select="$scalars/PolicyMktgName"/>
-              is a <xsl:value-of select="$scalars/PolicyLegalName"/>
-              issued by <xsl:value-of select="$scalars/InsCoName"/>.
-              <xsl:value-of select="$scalars/ProductDescription"/>
-            </fo:block>
-            <fo:block padding-top="1em">
-              <fo:inline text-decoration="underline">Stable Value 
Feature</fo:inline>
-              &nbsp;<xsl:value-of select="$scalars/StableValueFootnote"/>
-            </fo:block>
-            <fo:block padding-top="1em">
-              This illustration assumes Initial Death Benefit Option
-              <xsl:value-of select="$scalars/InitDBOpt"/>.
-            </fo:block>
-            <fo:block padding-top="1em">
-              This policy is only available to entities that meet the 
definition
-              of "accredited investor" or "qualified purchaser" under 
applicable
-              Federal securities laws.  Purchase of this policy is suitable
-              only for entities of substantial economic means. Each prospective
-              purchaser will be required to represent that it is familiar
-              with and understands the fundamental risks and financial hazards
-              of purchasing the policy. Each prospective purchaser must
-              also represent that it meets minimum financial and other
-              suitability standards.
-            </fo:block>
-            <fo:block padding-top="1em">
-              <xsl:value-of select="$scalars/NoVanishPremiumFootnote"/>
-            </fo:block>
-            <fo:block padding-top="1em">
-              The definition of life insurance elected for this contract
-              is the
-              <xsl:choose>
-                <xsl:when test="$scalars/DefnLifeIns='GPT'">
-                  guideline premium test. The guideline single premium
-                  is $<xsl:value-of select="$scalars/InitGSP"/>
-                  and the guideline level premium
-                  is $<xsl:value-of select="$scalars/InitGLP"/>.
-                </xsl:when>
-                <xsl:otherwise>
-                  cash value accumulation test.
-                </xsl:otherwise>
-              </xsl:choose>
-            </fo:block>
-            <fo:block padding-top="1em">
-              <xsl:value-of select="$scalars/InsCoName"/>
-              <xsl:value-of select="$scalars/RejectPremiumFootnote"/>
-            </fo:block>
-            <fo:block padding-top="1em">
-              Account values, cash surrender values, and death benefits
-              are illustrated as of the end of the year.
-            </fo:block>
-            <fo:block padding-top="1em">
-              PLEASE READ THE FOLLOWING IMPORTANT TAX DISCLOSURE
-            </fo:block>
-            <fo:block>
-              The initial 7-pay premium limit is
-              $<xsl:value-of select="$scalars/InitSevenPayPrem"/>.
-              As illustrated, this contract
-              <xsl:choose>
-                <xsl:when test="$scalars/IsMec='1'">
-                  fails
-                </xsl:when>
-                <xsl:otherwise>
-                  passes
-                </xsl:otherwise>
-              </xsl:choose>
-              the seven-pay test defined in Section 7702A
-              of the Internal Revenue Code and therefore
-              <xsl:choose>
-                <xsl:when test="$scalars/IsMec='1'">
-                  <xsl:choose>
-                    <xsl:when test="$scalars/MecYear!='0'">
-                      becomes a Modified Endowment Contract (MEC) in policy 
year
-                      <xsl:value-of select="$scalars/MecYear+1"/>.
-                    </xsl:when>
-                    <xsl:otherwise>
-                      is a Modified Endowment Contract (MEC).
-                    </xsl:otherwise>
-                  </xsl:choose>
-                  As a MEC, any loans or withdrawals are taxed to the extent
-                  of any gain in the contract, and an additional 10% penalty
-                  tax will apply to the taxable portion of the loan
-                  or withdrawal.
-                </xsl:when>
-                <xsl:otherwise>
-                  is not a Modified Endowment Contract (MEC).
-                  Subsequent changes in the contract, including but not limited
-                  to increases and decreases in premiums or benefits, may cause
-                  the contract to be retested and may result in the contract
-                  becoming a MEC.
-                </xsl:otherwise>
-              </xsl:choose>
-            </fo:block>
-            <fo:block font-weight="bold" padding-top="1em">
-              This illustration is not written or intended as tax
-              or legal advice and may not be relied on for purposes
-              of avoiding any federal tax penalties. For more information
-              pertaining to the tax consequences of purchasing
-              or owning this policy, consult with your own independent tax
-              or legal counsel.
-            </fo:block>
-
-            <!-- Force new page -->
-            <fo:block break-after="page"/>
-
-              <fo:block padding-top="1em">
-                <xsl:value-of select="$scalars/GuarMortalityFootnote"/>
-              </fo:block>
-              <fo:block padding-top="1em">
-                The loan interest rate may be fixed or adjustable as elected
-                by the policy owner.
-              </fo:block>
-              <fo:block padding-top="1em">
-                <xsl:choose>
-                  <xsl:when test="$scalars/UseExperienceRating='1'">
-                  <xsl:value-of select="$scalars/ExpRatingFootnote"/>
-                  </xsl:when>
-                  <xsl:otherwise>
-                    The illustration does not assume any mortality
-                    experience rating.
-                  </xsl:otherwise>
-                </xsl:choose>
-              </fo:block>
-            </fo:block>
-            <fo:block padding-top="1em" font-size="10pt">
-              <fo:block font-weight="bold">
-              This illustration may only be used when preceded or accompanied
-              by the offering memorandum for
-              <xsl:value-of select="$scalars/PolicyLegalName"/>
-              (<xsl:value-of select="$scalars/PolicyMktgName"/>)
-              insurance contract and its underlying investment choices.
-              For a complete listing of the underlying investment choices,
-              please refer to the offering memorandum. Before purchasing
-              a variable life insurance contract, investors should
-              carefully consider the investment objectives, risks, charges
-              and expenses of the variable life insurance contract
-              and its underlying investment choices. Please read
-              the offering memorandum carefully before investing
-              or sending money.
-            </fo:block>
-
-            <xsl:if test="$scalars/HasTerm='1'">
-              <fo:block padding-top="1em">
-                <xsl:value-of select="$scalars/TermFootnote"/>
-              </fo:block>
-            </xsl:if>
-            <xsl:if test="$scalars/HasWP='1'">
-              <fo:block padding-top="1em">
-                <xsl:value-of select="$scalars/WaiverFootnote"/>
-              </fo:block>
-            </xsl:if>
-            <xsl:if test="$scalars/UsePartialMort='1'">
-              <fo:block padding-top="1em">
-                This illustration reflects an initial mortality assumption
-                of <xsl:value-of 
select="address@hidden'PartMortTableMult']/duration[1]/@column_value"/>
-                of the <xsl:value-of select="$scalars/PartMortTableName"/> 
table
-                with all deaths at the end of the year.
-              </fo:block>
-            </xsl:if>
-            <xsl:choose>
-              <xsl:when test="$scalars/GenderBlended='1'">
-                <fo:block padding-top="1em">
-                  <xsl:value-of select="$scalars/MortalityBlendFootnote"/>
-                  Custom blend assumptions:
-                  <xsl:choose>
-                    <xsl:when test="$scalars/SmokerBlended='1'">
-                      tobacco = <xsl:value-of select="$scalars/SmokerPct"/>;
-                    </xsl:when>
-                    <xsl:otherwise>
-                      no blending by tobacco use;
-                    </xsl:otherwise>
-                  </xsl:choose>
-                  male = <xsl:value-of select="$scalars/MalePct"/>.
-                </fo:block>
-              </xsl:when>
-              <xsl:otherwise>
-                <xsl:if test="$scalars/SmokerBlended='1'">
-                  <fo:block padding-top="1em">
-                    <xsl:value-of select="$scalars/MortalityBlendFootnote"/>
-                    Custom blend assumptions:
-                    tobacco = <xsl:value-of select="$scalars/SmokerPct"/>;
-                    <xsl:choose>
-                      <xsl:when test="$scalars/GenderBlended='1'">
-                        male = <xsl:value-of select="$scalars/MalePct"/>.
-                      </xsl:when>
-                      <xsl:otherwise>
-                        no blending by gender.
-                      </xsl:otherwise>
-                    </xsl:choose>
-                  </fo:block>
-                </xsl:if>
-              </xsl:otherwise>
-            </xsl:choose>
-            <fo:block padding-top="1em">
-              The state of issue
-              is <xsl:value-of select="$scalars/StatePostalAbbrev"/>.
-            </fo:block>
-            <xsl:if test="$compliance_tracking_number">
-              <fo:block padding-top="1em">
-                Compliance tracking number:
-                <xsl:value-of select="$compliance_tracking_number"/>
-              </fo:block>
-            </xsl:if>
-
-            <fo:block padding-top="1em">
-              SEPARATE ACCOUNT
-            </fo:block>
-            <fo:block padding-top="1em">
-              <xsl:value-of select="$scalars/HypotheticalRatesFootnote"/>
-            </fo:block>
-            <fo:block padding-top="1em">
-              This illustration is based on total Separate Account fund 
expenses
-              of <xsl:value-of 
select="address@hidden'TotalIMF']/duration[1]/@column_value"/>.
-            </fo:block>
-            <fo:block font-weight="bold" padding-top="1em">
-              This illustration may not reflect your actual tax
-              and accounting consequences and is not intended as tax advice
-              nor may it be relied on for purposes of avoiding any federal
-              tax penalties. Consult professional tax advisors for tax advice.
-            </fo:block>
-            <fo:block padding-top="1em">
-              Placement Agents:
-              <xsl:value-of select="$scalars/CoUnderwriter"/> serves as the
-              placement agent for contracts sold by its registered
-              representatives.
-              &nbsp;<xsl:value-of select="$scalars/MainUnderwriter"/>
-              serves as the placement agent for contracts sold by registered
-              representatives of other broker-dealers that have entered into
-              distribution agreements with
-              &nbsp;<xsl:value-of select="$scalars/MainUnderwriter"/>.
-            </fo:block>
-            <fo:block padding-top="1em">
-              <xsl:value-of select="$scalars/CoUnderwriter"/> and
-              &nbsp;<xsl:value-of select="$scalars/MainUnderwriter"/> are
-              subsidiaries of <xsl:value-of select="$scalars/InsCoName"/>
-              (<xsl:value-of select="$scalars/InsCoShortName"/>) and are
-              located at <xsl:value-of select="$scalars/InsCoStreet"/>.
-            </fo:block>
-          </fo:block>
-          <xsl:if test="not($has_supplemental_report)">
-            <fo:block id="endofdoc"/>
-          </xsl:if>
-        </fo:flow>
-      </fo:page-sequence>
-
-      <!-- Supplemental Report -->
-      <!-- Body page -->
-      <xsl:if test="$has_supplemental_report">
-        <fo:page-sequence master-reference="supplemental-report">
-
-          <!-- Define the contents of the header. -->
-          <fo:static-content flow-name="xsl-region-before">
-            <fo:block text-align="left">
-              <xsl:call-template name="company-logo"/>
-            </fo:block>
-            <xsl:call-template name="standardheader">
-              <xsl:with-param name="reporttitle" select="'Supplemental 
Report'"/>
-            </xsl:call-template>
-            <xsl:call-template name="dollar-units"/>
-          </fo:static-content>
-
-          <!-- Define the contents of the footer. -->
-          <xsl:call-template name="standardfooter"/>
-
-          <!-- Supplemental report body -->
-          <xsl:call-template name="supplemental-report-body"/>
-        </fo:page-sequence>
-      </xsl:if>
-    </fo:root>
-  </xsl:template>
-
-  <xsl:template name="standardheader">
-    <xsl:param name="reporttitle"/>
-    <fo:block text-align="center" font-size="9.75pt">
-      <fo:block padding-top="1em">
-        The purpose of this illustration is to show how the performance
-        of the underlying separate account divisions could affect
-        the contract account value and death benefit.
-        <fo:inline font-weight="bold">
-          The hypothetical returns do not reflect past performance
-          and are not predictive of future results. Actual results
-          could be less than or greater than the hypothetical results
-          and in all likelihood will vary year to year.
-        </fo:inline>
-      </fo:block>
-      <fo:block padding-top="1em">
-        <xsl:value-of select="$reporttitle"/>
-      </fo:block>
-    </fo:block>
-    <xsl:variable name="header-width" select="33"/>
-    <xsl:variable name="header-field-width">
-      <xsl:value-of select="$header-width * 0.44"/>pc
-    </xsl:variable>
-    <fo:block font-size="10pt" font-family="sans-serif">
-      <fo:table table-layout="fixed" width="100%">
-        <fo:table-column column-width="125mm"/>
-        <fo:table-column column-width="proportional-column-width(1)"/>
-        <fo:table-body>
-          <fo:table-row>
-            <fo:table-cell padding-right="2mm">
-              <fo:block text-align="left">
-                <xsl:choose>
-                  <xsl:when test="$is_composite">
-                    <xsl:call-template name="limitstring">
-                      <xsl:with-param name="passString" 
select="$scalars/CorpName"/>
-                      <xsl:with-param name="length" select="60"/>
-                    </xsl:call-template>
-                  </xsl:when>
-                  <xsl:when test="not($scalars/Insured1='  ')">
-                    <xsl:call-template name="limitstring">
-                      <xsl:with-param name="passString" 
select="$scalars/Insured1"/>
-                      <xsl:with-param name="length" select="30"/>
-                    </xsl:call-template>,
-                    <xsl:value-of select="$scalars/Gender"/>
-                    <!-- xsl:text here prevents stripping of spaces by XSLT -->
-                    <xsl:text> </xsl:text>
-                    <xsl:value-of select="$scalars/Smoker"/> rates,
-                    Age <xsl:value-of select="$scalars/Age"/>
-                  </xsl:when>
-                </xsl:choose>
-              </fo:block>
-              <xsl:if test="$is_composite">
-                <fo:block text-align="left">
-                  Composite
-                </fo:block>
-              </xsl:if>
-              <fo:block text-align="left">
-                Contract: <xsl:value-of select="$scalars/PolicyMktgName"/>
-              </fo:block>
-              <fo:block text-align="left">
-                Initial Premium: $<xsl:value-of select="$scalars/InitPrem"/>
-              </fo:block>
-              <xsl:if test="not($is_composite)">
-                <fo:block text-align="left">
-                  <xsl:choose>
-                    <xsl:when test="$scalars/UWType='Medical'">
-                      Fully underwritten,
-                    </xsl:when>
-                    <xsl:otherwise>
-                      <xsl:value-of select="$scalars/UWType"/>,
-                    </xsl:otherwise>
-                  </xsl:choose>
-                  <xsl:value-of select="$scalars/UWClass"/>,
-                  Initial Death Benefit Option:
-                  <xsl:value-of select="$scalars/InitDBOpt"/>
-                </fo:block>
-              </xsl:if>
-              <xsl:if test="$scalars/HasWP='1'">
-                <fo:block text-align="left">
-                  Waiver of Monthly Charges Rider elected.
-                </fo:block>
-              </xsl:if>
-              <xsl:call-template 
name="print-mastercontractnumber-and-contractnumber"/>
-            </fo:table-cell>
-
-            <fo:table-cell>
-              <fo:block text-align="left">
-                Assumed Gross Rate:
-                <xsl:value-of 
select="$scalars/InitAnnSepAcctGrossInt_Current"/>
-                (<xsl:value-of select="$scalars/InitAnnSepAcctNetInt_Current"/>
-                Net)*
-              </fo:block>
-              <fo:block text-align="left">
-                Initial
-                <xsl:if test="$scalars/HasTerm!='0'">
-                  Total
-                </xsl:if>
-                Face Amount: $<xsl:value-of select="$scalars/InitTotalSA"/>
-              </fo:block>
-              <xsl:if test="$scalars/HasTerm!='0'">
-                <fo:block text-align="left">
-                  Initial Base Face Amount:
-                  $<xsl:value-of select="$scalars/InitBaseSpecAmt"/>
-                </fo:block>
-                <fo:block text-align="left">
-                  Initial Term Face Amount:
-                  $<xsl:value-of select="$scalars/InitTermSpecAmt"/>
-                </fo:block>
-              </xsl:if>
-              <xsl:if test="not($is_composite) and ($scalars/UWClass='Rated')">
-                <fo:block text-align="left">
-                  Table Rating:
-                  <xsl:value-of select="$scalars/SubstandardTable"/>
-                </fo:block>
-              </xsl:if>
-            </fo:table-cell>
-          </fo:table-row>
-        </fo:table-body>
-      </fo:table>
-    </fo:block>
-  </xsl:template>
-
-  <xsl:template name="basic-illustration-report">
-    <xsl:variable name="basic_illustration_columns_raw">
-      <column name="PolicyYear">Policy _Year</column>
-      <column composite="0" name="AttainedAge">End of _Year Age</column>
-      <column name="GrossPmt">Premium _Outlay</column>
-      <column composite="1"/>
-      <column name="CSVNet_GuaranteedZero">Cash Surr _Value</column>
-      <column name="EOYDeathBft_GuaranteedZero">Death _Benefit</column>
-      <column/>
-      <column name="CSVNet_Guaranteed">Cash Surr Value</column>
-      <column name="EOYDeathBft_Guaranteed">Death _Benefit</column>
-      <column/>
-      <column name="CSVNet_CurrentZero">Cash Surr Value</column>
-      <column name="EOYDeathBft_CurrentZero">Death _Benefit</column>
-      <column/>
-      <column name="CSVNet_Current">Cash Surr Value</column>
-      <column name="EOYDeathBft_Current">Death _Benefit</column>
-    </xsl:variable>
-    <xsl:variable name="basic_illustration_columns" 
select="document('')//xsl:address@hidden'basic_illustration_columns_raw']/column"/>
-    <xsl:variable name="columns" 
select="$basic_illustration_columns[not(@composite) or 
boolean(boolean(@composite='1')=$is_composite)]"/>
-
-    <!-- The main contents of the body page -->
-    <fo:flow flow-name="xsl-region-body">
-      <fo:block font-size="9pt" font-family="serif">
-        <fo:table table-layout="fixed" width="100%">
-          <xsl:call-template name="generate-table-columns">
-            <xsl:with-param name="columns" select="$columns"/>
-          </xsl:call-template>
-
-          <fo:table-header>
-            <!-- Custom part (the biggest) of the table header -->
-            <fo:table-row>
-              <fo:table-cell number-columns-spanned="3">
-                <fo:block/>
-              </fo:table-cell>
-              <fo:table-cell number-columns-spanned="5">
-                <xsl:call-template name="header-cell-with-border"/>
-                <fo:block text-align="center">
-                  Using guaranteed charges
-                </fo:block>
-              </fo:table-cell>
-              <fo:table-cell>
-                <fo:block/>
-              </fo:table-cell>
-              <fo:table-cell number-columns-spanned="5">
-                <xsl:call-template name="header-cell-with-border"/>
-                <fo:block text-align="center">
-                  Using current charges
-                </fo:block>
-              </fo:table-cell>
-            </fo:table-row>
-            <fo:table-row>
-              <fo:table-cell number-columns-spanned="3">
-                <fo:block/>
-              </fo:table-cell>
-              <fo:table-cell number-columns-spanned="2">
-                <xsl:call-template name="header-cell-with-border"/>
-                <fo:block text-align="center">
-                  <xsl:value-of 
select="$scalars/InitAnnSepAcctGrossInt_GuaranteedZero"/>
-                  Hypothetical Gross
-                </fo:block>
-                <fo:block text-align="center">
-                  Return
-                  (<xsl:value-of 
select="$scalars/InitAnnSepAcctNetInt_GuaranteedZero"/>
-                  net)
-                </fo:block>
-              </fo:table-cell>
-              <fo:table-cell>
-                <fo:block/>
-              </fo:table-cell>
-              <fo:table-cell number-columns-spanned="2">
-                <xsl:call-template name="header-cell-with-border"/>
-                <fo:block text-align="center">
-                  <xsl:value-of 
select="$scalars/InitAnnSepAcctGrossInt_Guaranteed"/>
-                  Hypothetical Gross
-                </fo:block>
-                <fo:block text-align="center">
-                  Return
-                  (<xsl:value-of 
select="$scalars/InitAnnSepAcctNetInt_Guaranteed"/>
-                  net)
-                </fo:block>
-              </fo:table-cell>
-              <fo:table-cell>
-                <fo:block/>
-              </fo:table-cell>
-              <fo:table-cell number-columns-spanned="2">
-                <xsl:call-template name="header-cell-with-border"/>
-                <fo:block text-align="center">
-                  <xsl:value-of 
select="$scalars/InitAnnSepAcctGrossInt_CurrentZero"/>
-                  Hypothetical Gross
-                </fo:block>
-                <fo:block text-align="center">
-                  Return
-                  (<xsl:value-of 
select="$scalars/InitAnnSepAcctNetInt_CurrentZero"/>
-                  net)
-                </fo:block>
-              </fo:table-cell>
-              <fo:table-cell>
-                <fo:block/>
-              </fo:table-cell>
-              <fo:table-cell number-columns-spanned="2">
-                <xsl:call-template name="header-cell-with-border"/>
-                <fo:block text-align="center">
-                  <xsl:value-of 
select="$scalars/InitAnnSepAcctGrossInt_Current"/>
-                  Hypothetical Gross
-                </fo:block>
-                <fo:block text-align="center">
-                  Return
-                  (<xsl:value-of 
select="$scalars/InitAnnSepAcctNetInt_Current"/>
-                  net)
-                </fo:block>
-              </fo:table-cell>
-            </fo:table-row>
-            <!-- Generic part of the table header -->
-            <xsl:call-template name="generate-table-headers">
-              <xsl:with-param name="columns" select="$columns"/>
-            </xsl:call-template>
-          </fo:table-header>
-
-          <fo:table-body>
-            <xsl:call-template name="generate-table-values">
-              <xsl:with-param name="columns" select="$columns"/>
-              <xsl:with-param name="counter" select="$scalars/InforceYear + 
1"/>
-              <xsl:with-param name="max-counter" select="$max-lapse-year"/>
-              <xsl:with-param name="inforceyear" select="0 - 
$scalars/InforceYear"/>
-            </xsl:call-template>
-          </fo:table-body>
-        </fo:table>
-      </fo:block>
-    </fo:flow>
-  </xsl:template>
-
-  <xsl:template name="supplemental-illustration">
-    <xsl:variable name="supplemental_illustration_columns_raw">
-      <column name="PolicyYear">Policy _Year</column>
-      <column composite="0" name="AttainedAge">End of _Year Age</column>
-      <column name="Outlay">Premium _Outlay</column>
-      <column composite="1"/>
-      <column name="PolicyFee_Current">Admin _Charge</column>
-      <column name="PremTaxLoad_Current">Premium _Tax Load</column>
-      <column name="DacTaxLoad_Current">DAC _Tax Load</column>
-      <column name="NetPmt_Current">Net _Premium</column>
-      <column name="COICharge_Current">Mortality _Charge</column>
-      <column name="AcctVal_Current">Account _Value</column>
-      <column name="CSVNet_Current">Cash Surr _Value</column>
-      <column name="EOYDeathBft_Current">Death _Benefit</column>
-    </xsl:variable>
-    <xsl:variable name="supplemental_illustration_columns" 
select="document('')//xsl:address@hidden'supplemental_illustration_columns_raw']/column"/>
-    <xsl:variable name="columns" 
select="$supplemental_illustration_columns[not(@composite) or 
boolean(boolean(@composite='1')=$is_composite)]"/>
-
-    <fo:flow flow-name="xsl-region-body">
-      <fo:block font-size="9pt" font-family="serif">
-        <fo:table table-layout="fixed" width="100%">
-          <xsl:call-template name="generate-table-columns">
-            <xsl:with-param name="columns" select="$columns"/>
-          </xsl:call-template>
-
-          <fo:table-header>
-            <xsl:call-template name="generate-table-headers">
-              <xsl:with-param name="columns" select="$columns"/>
-            </xsl:call-template>
-          </fo:table-header>
-
-          <fo:table-body>
-            <xsl:call-template name="generate-table-values">
-              <xsl:with-param name="columns" select="$columns"/>
-              <xsl:with-param name="counter" select="$scalars/InforceYear + 
1"/>
-              <xsl:with-param name="max-counter" select="$max-lapse-year"/>
-              <xsl:with-param name="inforceyear" select="0 - 
$scalars/InforceYear"/>
-            </xsl:call-template>
-          </fo:table-body>
-        </fo:table>
-      </fo:block>
-    </fo:flow>
-  </xsl:template>
-
-  <xsl:template name="illustration-assumption">
-    <xsl:variable name="illustration_assumption_columns_raw">
-      <column name="PolicyYear">|Policy _Year</column>
-      <column composite="0" name="AttainedAge">|End of _Year Age</column>
-      <column composite="0" name="AnnSAIntRate_Current">Net Crediting Rate|Sep 
Acct</column>
-      <column composite="0" name="AnnGAIntRate_Current">Net Crediting Rate|Gen 
Acct</column>
-      <column composite="0" name="CurrMandE">|M&amp;E</column>
-      <column name="NetWD">|Withdrawal</column>
-      <column name="NewCashLoan">|Loan</column>
-      <column composite="0" name="EeMode">|Indiv _Pmt Mode</column>
-      <column composite="0" name="ErMode">|Corp _Pmt Mode</column>
-      <column composite="0" scalar="InitAnnLoanDueRate">|Assumed _Loan 
Interest</column>
-      <column composite="0" name="AnnualFlatExtra">|Flat Extra _Per 
1,000</column>
-    </xsl:variable>
-    <xsl:variable name="illustration_assumption_columns" 
select="document('')//xsl:address@hidden'illustration_assumption_columns_raw']/column"/>
-    <xsl:variable name="columns" 
select="$illustration_assumption_columns[not(@composite) or 
(boolean(@composite='1')=$is_composite)]"/>
-
-    <fo:flow flow-name="xsl-region-body">
-      <fo:block font-size="9pt" font-family="serif">
-        <fo:table table-layout="fixed" width="100%">
-          <xsl:call-template name="generate-table-columns">
-            <xsl:with-param name="columns" select="$columns"/>
-          </xsl:call-template>
-
-          <fo:table-header>
-            <xsl:call-template name="generate-table-headers">
-              <xsl:with-param name="columns" select="$columns"/>
-            </xsl:call-template>
-          </fo:table-header>
-
-          <fo:table-body>
-            <xsl:call-template name="generate-table-values">
-              <xsl:with-param name="columns" select="$columns"/>
-              <xsl:with-param name="counter" select="$scalars/InforceYear + 
1"/>
-              <xsl:with-param name="max-counter" select="$max-lapse-year"/>
-              <xsl:with-param name="inforceyear" select="0 - 
$scalars/InforceYear"/>
-            </xsl:call-template>
-          </fo:table-body>
-        </fo:table>
-      </fo:block>
-      <xsl:if test="not($has_supplemental_report)">
-        <fo:block id="endofdoc"/>
-      </xsl:if>
-    </fo:flow>
-  </xsl:template>
-
-  <xsl:template name="list-fund-allocation">
-    <xsl:param name="counter"/>
-    <xsl:if 
test="address@hidden'FundNames']/duration[$counter]/@column_value!=''">
-      <fo:block>
-        <xsl:value-of 
select="address@hidden'FundAllocations']/duration[$counter]/@column_value"/>
-        <xsl:value-of 
select="address@hidden'FundNames']/duration[$counter]/@column_value"/>
-      </fo:block>
-      <xsl:call-template name="list-fund-allocation">
-        <xsl:with-param name="counter" select="$counter + 1"/>
-      </xsl:call-template>
-    </xsl:if>
-  </xsl:template>
-
-  <xsl:template name="standardfooter">
-    <xsl:param name="omit-pagenumber" select="boolean(0)"/>
-    <xsl:call-template name="generic-footer">
-      <xsl:with-param name="top-block">
-        <fo:block>
-          * This illustration is based on the assumed Gross Rate shown.
-          The Net Rate is provided for information purposes only.
-        </fo:block>
-        <fo:block>
-          See the Narrative Summary for important policy information.
-          This illustration is not complete without all pages.
-        </fo:block>
-      </xsl:with-param>
-      <xsl:with-param name="left-block">
-        <fo:block><xsl:value-of select="$scalars/InsCoName"/></fo:block>
-        <fo:block><xsl:value-of select="$scalars/InsCoAddr"/></fo:block>
-      </xsl:with-param>
-      <xsl:with-param name="center-block">
-        <fo:block>
-          Date Prepared:
-          <xsl:call-template name="date-prepared"/>
-        </fo:block>
-        <xsl:if test="$scalars/LmiVersion!=''">
-          <fo:block>
-            System Version:
-            <xsl:value-of select="$scalars/LmiVersion"/>
-          </fo:block>
-        </xsl:if>
-      </xsl:with-param>
-      <xsl:with-param name="right-block">
-        <fo:block>
-          Policy Form:
-          <xsl:value-of select="$scalars/PolicyForm"/>
-        </fo:block>
-        <fo:block>
-          <xsl:choose>
-            <xsl:when test="not($omit-pagenumber)">
-              <xsl:call-template name="page-of"/>
-            </xsl:when>
-            <xsl:otherwise>
-              Attachment
-            </xsl:otherwise>
-          </xsl:choose>
-        </fo:block>
-      </xsl:with-param>
-    </xsl:call-template>
-  </xsl:template>
-
-</xsl:stylesheet>
diff --git a/reg_d_individual.xsl b/reg_d_individual.xsl
deleted file mode 100644
index 7db0280..0000000
--- a/reg_d_individual.xsl
+++ /dev/null
@@ -1,1022 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Life insurance illustrations.
-
-    Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 
2014, 2015, 2016, 2017, 2018 Gregory W. Chicares.
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License version 2 as
-    published by the Free Software Foundation.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-
-    http://savannah.nongnu.org/projects/lmi
-    email: <address@hidden>
-    snail: Chicares, 186 Belle Woods Drive, Glastonbury CT 06033, USA
--->
-<!DOCTYPE stylesheet [
-<!ENTITY nbsp "&#xA0;">
-]>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
xmlns:fo="http://www.w3.org/1999/XSL/Format"; version="1.0">
-  <xsl:import href="fo_common.xsl"/>
-  <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
-
-  <xsl:template match="/">
-    <fo:root>
-      <fo:layout-master-set>
-
-        <!-- Define the cover page. -->
-        <fo:simple-page-master master-name="cover">
-          <xsl:call-template name="set-page-size"/>
-          <!-- Central part of page -->
-          <fo:region-body margin="1.3in 0 1.2in"/>
-          <!-- Footer -->
-          <fo:region-after extent=".75in"/>
-        </fo:simple-page-master>
-
-        <!-- Define the IRR (Guaranteed Charges) Illustration page. -->
-        <fo:simple-page-master master-name="irr-guaranteed-illustration">
-          <xsl:call-template name="set-page-size"/>
-          <!-- Central part of page -->
-          <fo:region-body margin="2.7in 0 1.1in"/>
-          <!-- Header -->
-          <fo:region-before extent="3in"/>
-          <!-- Footer -->
-          <fo:region-after extent=".75in"/>
-        </fo:simple-page-master>
-
-        <!-- Define the IRR (Current Charges) Illustration page -->
-        <fo:simple-page-master master-name="irr-current-illustration">
-          <xsl:call-template name="set-page-size"/>
-          <!-- Central part of page -->
-          <fo:region-body margin="2.7in 0 1.1in"/>
-          <!-- Header -->
-          <fo:region-before extent="3in"/>
-          <!-- Footer -->
-          <fo:region-after extent=".75in"/>
-        </fo:simple-page-master>
-
-        <!-- Define the Current Values Illustration page -->
-        <fo:simple-page-master master-name="current-illustration">
-          <xsl:call-template name="set-page-size"/>
-          <!-- Central part of page -->
-          <fo:region-body margin="2.7in 0 1.2in"/>
-          <!-- Header -->
-          <fo:region-before extent="3in"/>
-          <!-- Footer -->
-          <fo:region-after extent=".75in"/>
-        </fo:simple-page-master>
-
-        <!-- Define the Explanation and Footnotes page 1. -->
-        <fo:simple-page-master master-name="explanation-and-footnotes-1">
-          <xsl:call-template name="set-page-size"/>
-          <!-- Central part of page -->
-          <fo:region-body margin="1in 0 1.1in"/>
-          <!-- Header -->
-          <fo:region-before extent="1in"/>
-          <!-- Footer -->
-          <fo:region-after extent=".75in"/>
-        </fo:simple-page-master>
-
-        <!-- Define the Explanation and Footnotes page 2. -->
-        <fo:simple-page-master master-name="explanation-and-footnotes-2">
-          <xsl:call-template name="set-page-size"/>
-          <!-- Central part of page -->
-          <fo:region-body margin="1in 0 1.1in"/>
-          <!-- Header -->
-          <fo:region-before extent="1in"/>
-          <!-- Footer -->
-          <fo:region-after extent=".75in"/>
-        </fo:simple-page-master>
-
-        <!-- Define the Certification Statements page. -->
-        <fo:simple-page-master master-name="certification-statements">
-          <xsl:call-template name="set-page-size"/>
-          <!-- Central part of page -->
-          <fo:region-body margin="1.6in 0 1.1in"/>
-          <!-- Header -->
-          <fo:region-before extent="1in"/>
-          <!-- Footer -->
-          <fo:region-after extent=".75in"/>
-        </fo:simple-page-master>
-
-        <!-- Define the Supplemental Illustration page. -->
-        <xsl:if test="$has_supplemental_report">
-          <fo:simple-page-master master-name="supplemental-report">
-            <xsl:call-template name="set-page-size"/>
-            <!-- Central part of page -->
-            <fo:region-body margin="2.6in 0 1.5in"/>
-            <!-- Header -->
-            <fo:region-before extent="3in"/>
-            <!-- Footer -->
-            <fo:region-after extent=".75in"/>
-          </fo:simple-page-master>
-        </xsl:if>
-      </fo:layout-master-set>
-
-      <!-- Cover Page -->
-      <!-- Body page -->
-      <fo:page-sequence master-reference="cover" force-page-count="no-force">
-
-        <!-- Define the contents of the footer. -->
-        <xsl:call-template name="standardfooter">
-          <xsl:with-param name="omit-disclaimer" select="1"/>
-        </xsl:call-template>
-
-        <fo:flow flow-name="xsl-region-body">
-          <fo:block font-weight="bold" font-size="11pt" 
font-family="sans-serif" text-align="center">
-            <fo:block font-size="18pt" padding="1em 0 25pt">
-              <xsl:value-of select="$scalars/PolicyMktgName"/>
-            </fo:block>
-            <fo:block font-size="12pt" padding-after="45pt">
-              Hypothetical Life Insurance Illustration
-            </fo:block>
-            <fo:block padding-after="25pt">
-              Prepared by: <xsl:value-of select="$scalars/InsCoShortName"/>
-            </fo:block>
-            <fo:block padding-after="25pt">
-              Prepared for:
-              <!--
-              Properly adjust for long user input strings: limit output
-              to 140 characters for approximately two lines.
-              -->
-              <xsl:call-template name="limitstring">
-                <xsl:with-param name="length" select="140"/>
-                <xsl:with-param name="passString">
-                  <xsl:choose>
-                    <xsl:when test="not($is_composite)">
-                      <xsl:value-of select="$scalars/Insured1"/>
-                    </xsl:when>
-                    <xsl:otherwise>
-                      <xsl:value-of select="$scalars/CorpName"/>
-                    </xsl:otherwise>
-                  </xsl:choose>
-                </xsl:with-param>
-              </xsl:call-template>
-            </fo:block>
-            <fo:block padding-after="110.0pt">
-              Date Prepared: <xsl:call-template name="date-prepared"/>
-            </fo:block>
-          </fo:block>
-          <fo:block font-weight="normal" font-size="9pt" 
font-family="sans-serif" text-align="left">
-            <fo:block padding-after="10.0pt">
-              The purpose of this illustration is to show how hypothetical 
rates
-              of return will affect policy account value. These hypothetical
-              returns do not reflect past performance and are not predictive
-              of future results. Actual results could be less than or greater
-              than the hypothetical rates and in all likelihood will vary from
-              year to year.
-            </fo:block>
-            <fo:block font-weight="bold" padding-after="10.0pt">
-              This material must be preceded or accompanied by the current
-              Confidential Private Placement Memorandum for
-              <xsl:value-of select="$scalars/PolicyMktgName"/>
-              and the current prospectuses (or summary prospectuses,
-              if available) and private placement memoranda
-              for its underlying investment choices. Investors should
-              carefully consider the investment objectives, risks,
-              charges and expenses of the policy and its underlying investment
-              choices. Please read the prospectuses and private placement
-              memoranda carefully before investing or sending money.
-            </fo:block>
-            <fo:block padding-after="10.0pt">
-              <xsl:value-of select="$scalars/PolicyMktgName"/>
-              &nbsp;<xsl:value-of select="$scalars/IssuingCompanyFootnote"/>
-            </fo:block>
-            <fo:block padding-after="10.0pt">
-              Placement Agents:
-              &nbsp;<xsl:value-of select="$scalars/PlacementAgentFootnote"/>
-            </fo:block>
-            <fo:block padding-after="10.0pt">
-              <xsl:value-of select="$scalars/SubsidiaryFootnote"/>
-            </fo:block>
-            <fo:block padding-after="10.0pt">
-              <xsl:value-of select="$scalars/MarketingNameFootnote"/>
-            </fo:block>
-            <fo:block>
-              Compliance tracking number:
-              <xsl:value-of select="$compliance_tracking_number"/>
-            </fo:block>
-          </fo:block>
-        </fo:flow>
-      </fo:page-sequence>
-
-      <!-- IRR (Guaranteed Charges) Illustration -->
-      <!-- Body page -->
-      <fo:page-sequence master-reference="irr-guaranteed-illustration">
-
-        <!-- Define the contents of the header. -->
-        <fo:static-content flow-name="xsl-region-before">
-          <xsl:call-template name="standardheader">
-            <xsl:with-param name="displaycontractlanguage" select="1"/>
-            <xsl:with-param name="displaydisclaimer" select="1"/>
-          </xsl:call-template>
-          <fo:block text-align="center" font-size="9pt" font-family="serif" 
padding-top="1em">
-            End of Year Policy Values using Guaranteed Charges
-            <xsl:call-template name="dollar-units"/>
-          </fo:block>
-        </fo:static-content>
-
-        <!-- Define the contents of the footer. -->
-        <xsl:call-template name="standardfooter"/>
-
-        <xsl:call-template name="irr-guaranteed-illustration-report"/>
-
-      </fo:page-sequence>
-
-      <!-- IRR (Current Charges) Illustration page. -->
-      <!-- Body page -->
-      <fo:page-sequence master-reference="irr-current-illustration">
-
-        <!-- Define the contents of the header. -->
-        <fo:static-content flow-name="xsl-region-before">
-          <xsl:call-template name="standardheader">
-            <xsl:with-param name="displaycontractlanguage" select="1"/>
-            <xsl:with-param name="displaydisclaimer" select="1"/>
-          </xsl:call-template>
-          <fo:block text-align="center" font-size="9pt" font-family="serif" 
padding-top="1em">
-            End of Year Policy Values using Current Charges
-            <xsl:call-template name="dollar-units"/>
-          </fo:block>
-        </fo:static-content>
-
-        <!-- Define the contents of the footer. -->
-        <xsl:call-template name="standardfooter"/>
-
-        <xsl:call-template name="irr-current-illustration-report"/>
-
-      </fo:page-sequence>
-
-      <!-- Current Values Illustration -->
-      <!-- Body page -->
-      <fo:page-sequence master-reference="current-illustration">
-
-        <!-- Define the contents of the header. -->
-        <fo:static-content flow-name="xsl-region-before">
-          <xsl:call-template name="standardheader">
-            <xsl:with-param name="displaycontractlanguage" select="1"/>
-            <xsl:with-param name="displaydisclaimer" select="1"/>
-          </xsl:call-template>
-          <fo:block text-align="center" font-size="9pt" font-family="serif" 
padding-top="1em">
-            End of Year Policy Values using Current Charges
-            <xsl:call-template name="dollar-units"/>
-          </fo:block>
-        </fo:static-content>
-
-        <!-- Define the contents of the footer. -->
-        <xsl:call-template name="standardfooter"/>
-
-        <xsl:call-template name="current-illustration-report"/>
-
-      </fo:page-sequence>
-
-      <!-- Explanation and Footnotes page 1 -->
-      <fo:page-sequence master-reference="explanation-and-footnotes-1">
-
-        <!-- Define the contents of the header. -->
-        <fo:static-content flow-name="xsl-region-before">
-          <xsl:call-template name="plain-header"/>
-          <fo:block font-weight="bold" font-size="11pt" 
font-family="sans-serif" text-align="center">
-            Explanatory Notes
-          </fo:block>
-        </fo:static-content>
-
-        <!-- Define the contents of the footer. -->
-        <xsl:call-template name="standardfooter"/>
-
-        <fo:flow flow-name="xsl-region-body">
-
-          <fo:block font-weight="normal" font-size="9pt" 
font-family="sans-serif" text-align="left">
-            <fo:block font-size="10pt" font-weight="bold" 
text-decoration="underline">
-              The Illustration
-            </fo:block>
-            <fo:block padding-top="1em">
-              This illustration is not a policy or an offer or solicitation
-              to purchase a policy. Offers are made only through the
-              Confidential Private Placement Memorandum ("the PPM") for
-              <xsl:value-of select="$scalars/PolicyMktgName"/>.
-            </fo:block>
-            <fo:block padding-top="1em">
-              <xsl:value-of select="$scalars/ProductDescription"/>
-            </fo:block>
-          </fo:block>
-
-          <fo:block font-weight="normal" font-size="9pt" 
font-family="sans-serif" text-align="left">
-            <fo:block font-size="10pt" font-weight="bold" padding-top="2em" 
text-decoration="underline">
-              The Policy
-            </fo:block>
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">Policy Requirements:</fo:inline>
-              This policy is only available to persons who are deemed
-              accredited investors and qualified purchasers under applicable
-              federal securities laws. The policy owner must be able to bear
-              the risk of loss of the entire investment in the policy. The
-              policy owner must be familiar with and understand the fundamental
-              risks and financial hazards of investing in the policy, and be
-              willing to represent as such to
-              <xsl:value-of select="$scalars/InsCoShortName"/>.
-            </fo:block>
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">Maximum Net Amount at Risk 
Limitation: </fo:inline>
-              <xsl:value-of select="$scalars/MaxNaarFootnote"/>
-            </fo:block>
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">Monthly Charges:</fo:inline>
-              &nbsp;<xsl:value-of select="$scalars/MonthlyChargesFootnote"/>
-            </fo:block>
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">Surrender Charges:</fo:inline>
-              &nbsp;<xsl:value-of select="$scalars/PremTaxSurrChgFootnote"/>
-            </fo:block>
-          </fo:block>
-          <fo:block font-weight="normal" font-size="9pt" 
font-family="sans-serif" text-align="left">
-            <fo:block font-size="10.0pt" font-weight="bold" padding-top="2em" 
text-decoration="underline">
-              Column Definitions
-            </fo:block>
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">Account Value:</fo:inline>
-              &nbsp;<xsl:value-of select="$scalars/AccountValueFootnote"/>
-            </fo:block>
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">Administrative Charge:</fo:inline>
-              &nbsp;<xsl:value-of select="$scalars/PolicyFeeFootnote"/>
-            </fo:block>
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">Asset Charges:</fo:inline>
-              &nbsp;<xsl:value-of select="$scalars/AssetChargeFootnote"/>
-            </fo:block>
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">Cash Surrender Value:</fo:inline>
-              &nbsp;<xsl:value-of select="$scalars/CashSurrValueFootnote"/>
-            </fo:block>
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">Death Benefit:</fo:inline>
-              &nbsp;<xsl:value-of select="$scalars/DeathBenefitFootnote"/>
-            </fo:block>
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">End of Year Age:</fo:inline>
-              &nbsp;<xsl:value-of select="$scalars/AttainedAgeFootnote"/>
-            </fo:block>
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">Investment Income:</fo:inline>
-              &nbsp;<xsl:value-of select="$scalars/InvestmentIncomeFootnote"/>
-            </fo:block>
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">IRR on Death Benefit:</fo:inline>
-              &nbsp;<xsl:value-of select="$scalars/IrrDbFootnote"/>
-            </fo:block>
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">IRR on Surrender Value:</fo:inline>
-              &nbsp;<xsl:value-of select="$scalars/IrrCsvFootnote"/>
-            </fo:block>
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">Mortality Charges:</fo:inline>
-              &nbsp;<xsl:value-of select="$scalars/MortalityChargesFootnote"/>
-            </fo:block>
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">Policy Year:</fo:inline>
-              &nbsp;<xsl:value-of select="$scalars/PolicyYearFootnote"/>
-            </fo:block>
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">Premium Loads:</fo:inline>
-              The applicable state premium tax, deferred acquisition cost tax
-              charge, sales load (if any), separate account administrative
-              charge (if any), and other charges incurred as a result of
-              retaining an unaffiliated money manager (if any).
-            </fo:block>
-            <fo:block padding-top="1em">
-              <fo:inline font-weight="bold">Premium Outlay:</fo:inline>
-              &nbsp;<xsl:value-of select="$scalars/OutlayFootnote"/>
-            </fo:block>
-          </fo:block>
-
-          <fo:block font-weight="normal" font-size="9pt" 
font-family="sans-serif" text-align="left">
-            <fo:block font-size="10.0pt" font-weight="bold" padding-top="2em" 
text-decoration="underline">
-              Separate Account
-            </fo:block>
-            <fo:block padding-top="1em">
-              <xsl:value-of select="$scalars/HypotheticalRatesFootnote"/>
-            </fo:block>
-          </fo:block>
-
-          <fo:block font-weight="normal" font-size="9pt" 
font-family="sans-serif" text-align="left">
-            <fo:block font-size="10.0pt" font-weight="bold" padding-top="2em" 
text-decoration="underline">
-              Withdrawals and Policy Loans
-            </fo:block>
-            <fo:block padding-top="1em">
-              If applicable, withdrawals and policy loans will appear on a
-              supplemental report at the end of the illustration. Withdrawals
-              and policy loans are assumed to be taken at the beginning of the
-              applicable policy year. The illustration and supplemental report
-              reflect a fixed policy loan interest rate of <xsl:value-of 
select="$scalars/InitAnnLoanDueRate"/>.
-            </fo:block>
-            <fo:block padding-top="1em">
-              <xsl:value-of select="$scalars/LoanAndWithdrawalFootnote"/>
-            </fo:block>
-          </fo:block>
-        </fo:flow>
-
-      </fo:page-sequence>
-
-      <!-- Explanation and Footnotes page 2 -->
-
-      <fo:page-sequence master-reference="explanation-and-footnotes-2">
-
-        <fo:static-content flow-name="xsl-region-before">
-          <xsl:call-template name="plain-header"/>
-          <fo:block font-weight="bold" font-size="11pt" 
font-family="sans-serif" text-align="center">
-            Explanatory Notes
-          </fo:block>
-        </fo:static-content>
-
-        <!-- Define the contents of the footer. -->
-        <xsl:call-template name="standardfooter"/>
-
-        <fo:flow flow-name="xsl-region-body">
-
-          <fo:block font-weight="normal" font-size="9pt" 
font-family="sans-serif" text-align="left">
-            <fo:block font-size="10.0pt" font-weight="bold" padding-top="2em" 
text-decoration="underline">
-              Important Tax Disclosures
-            </fo:block>
-            <fo:block>
-              The definition of life insurance elected for this policy is
-              <xsl:choose>
-                <xsl:when test="$scalars/DefnLifeIns='GPT'">
-                  the guideline premium test. The guideline single premium
-                  is $<xsl:value-of select="$scalars/InitGSP"/>
-                  and the guideline level premium
-                  is $<xsl:value-of select="$scalars/InitGLP"/>.
-                </xsl:when>
-                <xsl:otherwise>
-                  the cash value accumulation test.
-                </xsl:otherwise>
-              </xsl:choose>
-            </fo:block>
-            <fo:block padding-top="1em">
-              The initial 7-pay premium limit
-              is $<xsl:value-of select="$scalars/InitSevenPayPrem"/>.
-              As illustrated, this policy
-              <xsl:choose>
-                <xsl:when test="$scalars/IsMec='1'">
-                  fails
-                </xsl:when>
-                <xsl:otherwise>
-                  passes
-                </xsl:otherwise>
-              </xsl:choose>
-              the seven-pay test defined in Section 7702A
-              of the Internal Revenue Code and therefore
-              <xsl:choose>
-                <xsl:when test="$scalars/IsMec='1'">
-                  becomes a Modified Endowment Contract (MEC)
-                  in policy year <xsl:value-of select="$scalars/MecYear+1"/>.
-                </xsl:when>
-                <xsl:otherwise>
-                  is not a Modified Endowment Contract (MEC). Subsequent 
changes
-                  to the policy, including but not limited to increases
-                  and decreases in premiums or benefits, may cause the policy
-                  to be retested and may result in the policy becoming a MEC.
-                </xsl:otherwise>
-              </xsl:choose>
-            </fo:block>
-            <fo:block padding-top="1em">
-              If a policy is a MEC, withdrawals and policy loans are taxed to
-              the extent of any gain in the policy, and an additional penalty
-              tax may apply to the taxable portion of the distribution.
-            </fo:block>
-            <fo:block font-weight="bold" padding-top="1em">
-              The information provided in this illustration is not written or
-              intended as tax or legal advice and may not be relied on for
-              purposes of avoiding any federal tax penalties.
-              <xsl:value-of select="$scalars/InsCoShortName"/>, its employees
-              and representatives are not authorized to give tax or legal 
advice.
-              Individuals are encouraged to seek advice from their own tax or
-              legal counsel.
-            </fo:block>
-          </fo:block>
-
-          <!-- Certification Statements -->
-          <xsl:if test="$scalars/IsInforce!='1'">
-            <fo:block font-weight="bold" font-size="11pt" 
font-family="sans-serif" text-align="center" padding-top="2em">
-              Certification Statements
-            </fo:block>
-            <fo:block font-weight="normal" font-size="9pt" 
font-family="sans-serif" text-align="left" padding-top="1em">
-              <fo:block padding-top="1em">
-                POLICY OWNER / APPLICANT
-              </fo:block>
-              <fo:block padding-bottom="1em">
-                I have received a copy of this illustration, and I understand
-                that any non-guaranteed charges illustrated are subject
-                to change and could be either higher or lower. Additionally,
-                I have been informed by my agent that these values
-                are not guaranteed.
-              </fo:block>
-              <fo:block text-decoration="overline" padding="2em">
-                POLICY OWNER OR APPLICANT SIGNATURE &nbsp;&nbsp;&nbsp;
-                <fo:inline 
text-decoration="no-overline">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</fo:inline>DATE
-                
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-              </fo:block>
-              <fo:block padding-top="2em">
-                AGENT / AUTHORIZED REPRESENTATIVE
-              </fo:block>
-              <fo:block padding-bottom="1em">
-                I certify that this illustration has been presented
-                to the applicant, and that I have explained that any
-                non-guaranteed charges illustrated are subject to change. I 
have
-                made no statements that are inconsistent with the illustration.
-              </fo:block>
-              <fo:block text-decoration="overline" padding="2em">
-                AGENT OR AUTHORIZED REPRESENTATIVE
-                
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-                <fo:inline 
text-decoration="no-overline">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</fo:inline>DATE
-                
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-              </fo:block>
-            </fo:block>
-          </xsl:if>
-          <xsl:if test="not($has_supplemental_report)">
-            <fo:block id="endofdoc"/>
-          </xsl:if>
-        </fo:flow>
-      </fo:page-sequence>
-
-      <!-- Supplemental Illustration -->
-      <!-- Body page -->
-      <xsl:if test="$has_supplemental_report">
-        <fo:page-sequence master-reference="supplemental-report">
-
-          <!-- Define the contents of the header. -->
-          <fo:static-content flow-name="xsl-region-before">
-            <xsl:call-template name="standardheader">
-              <xsl:with-param name="displaycontractlanguage" select="1"/>
-              <xsl:with-param name="displaydisclaimer" select="1"/>
-            </xsl:call-template>
-            <fo:block text-align="center" font-size="9pt" font-family="serif" 
padding-top="1em">
-              <xsl:value-of select="illustration/supplementalreport/title"/>
-              <xsl:call-template name="dollar-units"/>
-            </fo:block>
-          </fo:static-content>
-
-          <!-- Define the contents of the footer. -->
-          <xsl:call-template name="standardfooter"/>
-
-          <!-- Supplemental report body -->
-          <xsl:call-template name="supplemental-report-body"/>
-        </fo:page-sequence>
-      </xsl:if>
-    </fo:root>
-  </xsl:template>
-
-  <xsl:template name="standardheader">
-    <xsl:param name="displaycontractlanguage"/>
-    <xsl:param name="displaydisclaimer"/>
-    <xsl:param name="logo_only"/>
-    <fo:block padding-after="2.5pt">
-      <fo:table table-layout="fixed" width="100%" font-weight="bold" 
font-size="13.0pt" font-family="sans-serif">
-        <fo:table-column column-width="50mm"/>
-        <fo:table-column column-width="90mm"/>
-        <fo:table-column column-width="50mm"/>
-        <fo:table-body>
-          <fo:table-row>
-            <fo:table-cell>
-              <fo:block text-align="left">
-                <xsl:call-template name="company-logo"/>
-              </fo:block>
-            </fo:table-cell>
-            <fo:table-cell>
-              <fo:block/>
-            </fo:table-cell>
-            <fo:table-cell>
-              <fo:block/>
-            </fo:table-cell>
-          </fo:table-row>
-        </fo:table-body>
-      </fo:table>
-    </fo:block>
-    <fo:block text-align="center" font-size="9pt">
-      <xsl:if test="$displaycontractlanguage=1">
-        <fo:block padding-top="1em">
-          <xsl:choose>
-            <xsl:when test="$scalars/IsInforce!='1'">
-              Illustration for Flexible Premium Variable Adjustable
-              Life Insurance Contract.
-            </xsl:when>
-            <xsl:otherwise>
-              In Force Illustration for Flexible Premium Variable Adjustable
-              Life Insurance Contract.
-            </xsl:otherwise>
-          </xsl:choose>
-        </fo:block>
-      </xsl:if>
-      <xsl:if test="$displaydisclaimer=1">
-        <fo:block padding-top="1em">
-          The purpose of the Illustration is to show how the performance of the
-          underlying separate account divisions could affect the policy's
-          account values and death benefits. This Illustration is hypothetical
-          and may not be used to project or predict investment results.
-        </fo:block>
-      </xsl:if>
-    </fo:block>
-
-    <fo:block padding-top="1em">
-      <fo:table table-layout="fixed" width="100%">
-        <fo:table-column column-width="125mm"/>
-        <fo:table-column column-width="proportional-column-width(1)"/>
-        <fo:table-body>
-          <fo:table-row>
-            <fo:table-cell padding-right="2mm">
-              <fo:block text-align="left" font-size="9pt">
-                <fo:block>
-                  Date Prepared: <xsl:call-template name="date-prepared"/>
-                </fo:block>
-                <fo:block>
-                  <xsl:choose>
-                    <xsl:when test="$is_composite">
-                      Composite of individuals
-                    </xsl:when>
-                    <xsl:otherwise>
-                      Prepared for:
-                      <xsl:call-template name="limitstring">
-                        <xsl:with-param name="passString" 
select="$scalars/Insured1"/>
-                        <xsl:with-param name="length" select="30"/>
-                      </xsl:call-template>
-                    </xsl:otherwise>
-                  </xsl:choose>
-                </fo:block>
-                <xsl:if test="not($is_composite)">
-                  <fo:block>
-                    Age: <xsl:value-of select="$scalars/Age"/>
-                  </fo:block>
-                </xsl:if>
-                <xsl:if test="not($is_composite)">
-                  <fo:block>
-                    Issue State: <xsl:value-of 
select="$scalars/StatePostalAbbrev"/>
-                  </fo:block>
-                </xsl:if>
-                <fo:block>
-                  Selected Face Amount:
-                  $<xsl:value-of select="$scalars/InitTotalSA"/>
-                </fo:block>
-                <fo:block>
-                  Initial Death Benefit Option:
-                  <xsl:value-of select="$scalars/InitDBOpt"/>
-                </fo:block>
-              </fo:block>
-            </fo:table-cell>
-
-            <fo:table-cell>
-              <fo:block text-align="left" font-size="9pt">
-                <fo:block>
-                  Policy: <xsl:value-of select="$scalars/PolicyMktgName"/>
-                </fo:block>
-                <fo:block/>
-                <xsl:if test="not($is_composite)">
-                  <fo:block>
-                    Underwriting Type:
-                    <xsl:choose>
-                      <xsl:when test="$scalars/UWType='Medical'">
-                        Fully underwritten
-                      </xsl:when>
-                      <xsl:otherwise>
-                        <xsl:value-of select="$scalars/UWType"/>
-                      </xsl:otherwise>
-                    </xsl:choose>
-                  </fo:block>
-                  <fo:block>
-                    Rate Classification: <xsl:value-of 
select="$scalars/Gender"/>,
-                    <xsl:value-of select="$scalars/Smoker"/>,
-                    <xsl:value-of select="$scalars/UWClass"/>
-                  </fo:block>
-                  <xsl:if test="$scalars/UWClass='Rated'">
-                    <fo:block padding-left="3em">
-                      <fo:block>
-                        Table Rating:
-                        <xsl:value-of select="$scalars/SubstandardTable"/>
-                      </fo:block>
-                      <!-- Flats don't require "Rated" class; and does this 
value actually print anyway?
-                      These questions apply as well to the original:
-                        
http://svn.savannah.nongnu.org/viewvc/lmi/trunk/individual_private_placement.xsl?annotate=696&root=lmi&pathrev=3585
-                      -->
-                      <fo:block>
-                        Initial Annual Flat Extra:
-                        <xsl:value-of 
select="address@hidden'AnnualFlatExtra']/duration[1]/@column_value"/>
-                        per 1,000
-                      </fo:block>
-                    </fo:block>
-                  </xsl:if>
-                </xsl:if>
-              </fo:block>
-            </fo:table-cell>
-          </fo:table-row>
-        </fo:table-body>
-      </fo:table>
-    </fo:block>
-
-    <fo:block text-align="left" font-size="9pt" font-family="sans-serif">
-      <xsl:call-template name="print-mastercontractnumber-and-contractnumber"/>
-    </fo:block>
-  </xsl:template>
-
-  <xsl:template name="plain-header">
-    <xsl:param name="logo_only"/>
-    <fo:block padding-after="2.5pt">
-      <fo:table table-layout="fixed" width="100%" font-weight="bold" 
font-size="13.0pt" font-family="sans-serif">
-        <fo:table-column column-width="50mm"/>
-        <fo:table-column column-width="90mm"/>
-        <fo:table-column column-width="50mm"/>
-        <fo:table-body>
-          <fo:table-row>
-            <fo:table-cell>
-              <fo:block text-align="left">
-                <xsl:call-template name="company-logo"/>
-              </fo:block>
-            </fo:table-cell>
-            <fo:table-cell>
-              <fo:block/>
-            </fo:table-cell>
-            <fo:table-cell>
-              <fo:block/>
-            </fo:table-cell>
-          </fo:table-row>
-        </fo:table-body>
-      </fo:table>
-    </fo:block>
-  </xsl:template>
-
-  <xsl:template name="irr-guaranteed-illustration-report">
-    <xsl:variable name="irr_guaranteed_illustration_columns_raw">
-      <column name="PolicyYear">Policy _Year</column>
-      <column composite="1"/>
-      <column composite="0" name="AttainedAge">End of _Year Age</column>
-      <column name="GrossPmt">Premium _Outlay</column>
-      <column name="CSVNet_GuaranteedZero">Cash _Surr Value</column>
-      <column name="EOYDeathBft_GuaranteedZero">Death _Benefit</column>
-      <column name="IrrCsv_GuaranteedZero">IRR on _Surr Value</column>
-      <column name="IrrDb_GuaranteedZero">IRR on _Death Bft</column>
-      <column/>
-      <column name="CSVNet_Guaranteed">Cash _Surr Value</column>
-      <column name="EOYDeathBft_Guaranteed">Death _Benefit</column>
-      <column name="IrrCsv_Guaranteed">IRR on _Surr Value</column>
-      <column name="IrrDb_Guaranteed">IRR on _Death Bft</column>
-    </xsl:variable>
-    <xsl:variable name="columns_raw" 
select="document('')//xsl:address@hidden'irr_guaranteed_illustration_columns_raw']/column"/>
-    <xsl:variable name="columns" select="$columns_raw[not(@composite)] | 
$columns_raw[boolean(@composite='1')=$is_composite]"/>
-
-    <!-- The main contents of the body page -->
-    <fo:flow flow-name="xsl-region-body">
-      <fo:block font-size="9pt" font-family="serif">
-        <fo:table table-layout="fixed" width="100%">
-          <xsl:call-template name="generate-table-columns">
-            <xsl:with-param name="columns" select="$columns"/>
-          </xsl:call-template>
-
-          <fo:table-header>
-            <!-- Custom part of the table header -->
-            <fo:table-row>
-              <fo:table-cell number-columns-spanned="3">
-                <fo:block/>
-              </fo:table-cell>
-              <fo:table-cell number-columns-spanned="2">
-                <xsl:call-template name="header-cell-with-border"/>
-                <fo:block text-align="center">
-                  <xsl:value-of 
select="$scalars/InitAnnSepAcctGrossInt_GuaranteedZero"/>
-                  Hypothetical Rate of Return*
-                </fo:block>
-              </fo:table-cell>
-              <fo:table-cell number-columns-spanned="3">
-                <fo:block/>
-              </fo:table-cell>
-              <fo:table-cell number-columns-spanned="2">
-                <xsl:call-template name="header-cell-with-border"/>
-                <fo:block text-align="center">
-                  <xsl:value-of 
select="$scalars/InitAnnSepAcctGrossInt_Guaranteed"/>
-                  Hypothetical Rate of Return*
-                </fo:block>
-              </fo:table-cell>
-            </fo:table-row>
-
-            <!-- Generic part of the table header -->
-            <xsl:call-template name="generate-table-headers">
-              <xsl:with-param name="columns" select="$columns"/>
-            </xsl:call-template>
-          </fo:table-header>
-
-          <fo:table-body>
-            <xsl:call-template name="generate-table-values">
-              <xsl:with-param name="columns" select="$columns"/>
-              <xsl:with-param name="counter" select="$scalars/InforceYear + 
1"/>
-              <xsl:with-param name="max-counter" select="$max-lapse-year"/>
-              <xsl:with-param name="inforceyear" select="0 - 
$scalars/InforceYear"/>
-            </xsl:call-template>
-          </fo:table-body>
-        </fo:table>
-      </fo:block>
-    </fo:flow>
-  </xsl:template>
-
-  <xsl:template name="irr-current-illustration-report">
-    <xsl:variable name="irr_current_illustration_columns_raw">
-      <column name="PolicyYear">Policy _Year</column>
-      <column composite="1"/>
-      <column composite="0" name="AttainedAge">End of _Year Age</column>
-      <column name="GrossPmt">Premium _Outlay</column>
-      <column name="CSVNet_CurrentZero">Cash _Surr Value</column>
-      <column name="EOYDeathBft_CurrentZero">Death _ Benefit</column>
-      <column name="IrrCsv_CurrentZero">IRR on _Surr Value</column>
-      <column name="IrrDb_CurrentZero">IRR on _Death Bft</column>
-      <column/>
-      <column name="CSVNet_Current">Cash _Surr Value</column>
-      <column name="EOYDeathBft_Current">Death _Benefit</column>
-      <column name="IrrCsv_Current">IRR on _Surr Value</column>
-      <column name="IrrDb_Current">IRR on _Death Bft</column>
-    </xsl:variable>
-    <xsl:variable name="columns_raw" 
select="document('')//xsl:address@hidden'irr_current_illustration_columns_raw']/column"/>
-    <xsl:variable name="columns" select="$columns_raw[not(@composite)] | 
$columns_raw[boolean(@composite='1')=$is_composite]"/>
-
-    <!-- The main contents of the body page -->
-    <fo:flow flow-name="xsl-region-body">
-      <fo:block font-size="9pt" font-family="serif">
-        <fo:table table-layout="fixed" width="100%">
-          <xsl:call-template name="generate-table-columns">
-            <xsl:with-param name="columns" select="$columns"/>
-          </xsl:call-template>
-
-          <fo:table-header>
-            <!-- Custom part of the table header -->
-            <fo:table-row>
-              <fo:table-cell number-columns-spanned="3">
-                <fo:block/>
-              </fo:table-cell>
-              <fo:table-cell number-columns-spanned="2">
-                <xsl:call-template name="header-cell-with-border"/>
-                <fo:block text-align="center">
-                  <xsl:value-of 
select="$scalars/InitAnnSepAcctGrossInt_CurrentZero"/>
-                  Hypothetical Rate of Return*
-                </fo:block>
-              </fo:table-cell>
-              <fo:table-cell number-columns-spanned="3">
-                <fo:block/>
-              </fo:table-cell>
-              <fo:table-cell number-columns-spanned="2">
-                <xsl:call-template name="header-cell-with-border"/>
-                <fo:block text-align="center">
-                  <xsl:value-of 
select="$scalars/InitAnnSepAcctGrossInt_Current"/>
-                  Hypothetical Rate of Return*
-                </fo:block>
-              </fo:table-cell>
-            </fo:table-row>
-
-            <!-- Generic part of the table header -->
-            <xsl:call-template name="generate-table-headers">
-              <xsl:with-param name="columns" select="$columns"/>
-            </xsl:call-template>
-          </fo:table-header>
-
-          <fo:table-body>
-            <xsl:call-template name="generate-table-values">
-              <xsl:with-param name="columns" select="$columns"/>
-              <xsl:with-param name="counter" select="$scalars/InforceYear + 
1"/>
-              <xsl:with-param name="max-counter" select="$max-lapse-year"/>
-              <xsl:with-param name="inforceyear" select="0 - 
$scalars/InforceYear"/>
-            </xsl:call-template>
-          </fo:table-body>
-        </fo:table>
-      </fo:block>
-    </fo:flow>
-  </xsl:template>
-
-  <xsl:template name="current-illustration-report">
-    <xsl:variable name="current_illustration_columns_raw">
-      <column name="PolicyYear">Policy _Year</column>
-      <column composite="1"/>
-      <column composite="0" name="AttainedAge">End of _Year Age</column>
-      <column name="GrossPmt">Premium _Outlay</column>
-      <column special="Premium_Loads">Premium _Loads</column>
-      <column special="Admin_Charges">Admin _Charges</column>
-      <column name="COICharge_Current">Mortality _Charges</column>
-      <column name="SepAcctCharges_Current">Asset _Charges</column>
-      <column name="GrossIntCredited_Current">Investment _Income</column>
-      <column name="AcctVal_Current">Account _Value</column>
-      <column name="CSVNet_Current">Cash _Surr Value</column>
-      <column name="EOYDeathBft_Current">Death_ Benefit</column>
-    </xsl:variable>
-    <xsl:variable name="columns_raw" 
select="document('')//xsl:address@hidden'current_illustration_columns_raw']/column"/>
-    <xsl:variable name="columns" select="$columns_raw[not(@composite)] | 
$columns_raw[boolean(@composite='1')=$is_composite]"/>
-
-    <!-- The main contents of the body page -->
-    <fo:flow flow-name="xsl-region-body">
-      <fo:block font-size="9pt" font-family="serif">
-        <fo:table table-layout="fixed" width="100%">
-          <xsl:call-template name="generate-table-columns">
-            <xsl:with-param name="columns" select="$columns"/>
-          </xsl:call-template>
-
-          <fo:table-header>
-            <!-- Custom part of the table header -->
-            <fo:table-row>
-              <fo:table-cell number-columns-spanned="7">
-                <fo:block/>
-              </fo:table-cell>
-              <fo:table-cell>
-                <xsl:attribute name="number-columns-spanned">
-                  <!-- generate-table-columns adds one extra column and
-                       7 columns are taken by the table-cell above: -->
-                  <xsl:value-of select="count($columns) - 7 + 1"/>
-                </xsl:attribute>
-                <xsl:call-template name="header-cell-with-border"/>
-                <fo:block text-align="center">
-                  <xsl:value-of 
select="$scalars/InitAnnSepAcctGrossInt_Guaranteed"/>
-                  Hypothetical Rate of Return*
-                </fo:block>
-              </fo:table-cell>
-            </fo:table-row>
-
-            <!-- Generic part of the table header -->
-            <xsl:call-template name="generate-table-headers">
-              <xsl:with-param name="columns" select="$columns"/>
-            </xsl:call-template>
-          </fo:table-header>
-
-          <fo:table-body>
-            <xsl:call-template name="generate-table-values">
-              <xsl:with-param name="columns" select="$columns"/>
-              <xsl:with-param name="counter" select="$scalars/InforceYear + 
1"/>
-              <xsl:with-param name="max-counter" select="$max-lapse-year"/>
-              <xsl:with-param name="inforceyear" select="0 - 
$scalars/InforceYear"/>
-            </xsl:call-template>
-          </fo:table-body>
-        </fo:table>
-      </fo:block>
-    </fo:flow>
-  </xsl:template>
-
-  <xsl:template name="get-special-column-value">
-    <xsl:param name="special"/>
-    <xsl:param name="column"/>
-    <xsl:param name="counter"/>
-    <xsl:param name="special-param"/>
-    <xsl:choose>
-      <xsl:when test="$special='Premium_Loads'">
-        <xsl:variable name="GrossPmt" 
select="address@hidden'GrossPmt']/duration[$counter]/@column_value"/>
-        <xsl:variable name="NetPmt_Current" 
select="address@hidden'NetPmt_Current']/duration[$counter]/@column_value"/>
-        <xsl:value-of 
select="format-number(translate($GrossPmt,$numberswc,$numberswoc) - 
translate($NetPmt_Current,$numberswc,$numberswoc),'###,###,###')"/>
-      </xsl:when>
-      <xsl:when test="$special='Admin_Charges'">
-        <xsl:variable name="SpecAmtLoad_Current" 
select="address@hidden'SpecAmtLoad_Current']/duration[$counter]/@column_value"/>
-        <xsl:variable name="PolicyFee_Current" 
select="address@hidden'PolicyFee_Current']/duration[$counter]/@column_value"/>
-        <xsl:value-of 
select="format-number(translate($SpecAmtLoad_Current,$numberswc,$numberswoc) + 
translate($PolicyFee_Current,$numberswc,$numberswoc),'###,###,###')"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:call-template name="ERROR_Unknown_Special_Column_Name_Specified"/>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template name="standardfooter">
-    <xsl:param name="omit-pagenumber" select="boolean(0)"/>
-    <xsl:param name="omit-disclaimer" select="boolean(0)"/>
-    <xsl:call-template name="generic-footer">
-      <xsl:with-param name="top-block">
-        <fo:block>
-          This illustration is not complete unless all pages as noted
-          below are included.
-        </fo:block>
-      </xsl:with-param>
-      <xsl:with-param name="left-block">
-        <fo:block><xsl:value-of select="$scalars/InsCoName"/></fo:block>
-        <fo:block><xsl:value-of select="$scalars/InsCoAddr"/></fo:block>
-      </xsl:with-param>
-      <xsl:with-param name="center-block">
-        <xsl:if test="$scalars/LmiVersion!=''">
-          <fo:block>
-            System Version:
-            <xsl:value-of select="$scalars/LmiVersion"/>
-          </fo:block>
-        </xsl:if>
-      </xsl:with-param>
-      <xsl:with-param name="right-block">
-        <fo:block>
-          Policy Form:
-          <xsl:value-of select="$scalars/PolicyForm"/>
-        </fo:block>
-        <fo:block>
-          <xsl:choose>
-            <xsl:when test="not($omit-pagenumber)">
-              <xsl:call-template name="page-of"/>
-            </xsl:when>
-            <xsl:otherwise>
-              Attachment
-            </xsl:otherwise>
-          </xsl:choose>
-        </fo:block>
-      </xsl:with-param>
-    </xsl:call-template>
-  </xsl:template>
-
-</xsl:stylesheet>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]