浏览代码

add missing files.

gsp 3 年之前
父节点
当前提交
904b801aa6

+ 113 - 0
OTSIncAReportApp/1-UI/OTSDisplaySourceGridData/ChangeGridCellValEvent.cs

@@ -0,0 +1,113 @@
+using OTSIncAReportApp.OTSSampleReportInfo;
+using SourceGrid;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OTSIncAReportApp.OTSDataMgrFunction
+{
+    /// <summary>
+    /// 与属性Grid操作事件对应的事件类,在该类中实现属性Grid的操作方法实现
+    /// </summary>
+    class ChangeGridCellValEvent : SourceGrid.Cells.Controllers.ControllerBase
+    {
+        #region 变量定义
+        /// <summary>
+        /// 属性Grid类对象全局变量
+        /// </summary>
+        OTSSourceGrid m_SourceGrid = null;
+        private const int Constant = 1;
+        #endregion
+
+        #region 构造函数
+        /// <summary>
+        /// 构造函数
+        /// </summary>
+        /// <param name="SGrid"></param>
+        public ChangeGridCellValEvent(OTSSourceGrid SGrid)
+        {
+            m_SourceGrid = SGrid;
+
+        }
+        #endregion
+
+        #region 下拉框事件
+        /// <summary>
+        /// 属性Grid的下拉框下拉完成后,触发的事件。SourceGrid的事件不是用delegate方法实现的,与dot net 的标准事件实现方式不同,需要在这里override才可以
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        public override void OnValueChanged(SourceGrid.CellContext sender, EventArgs e)
+        {
+            //ReportCondition SourceGridData = m_SourceGrid.m_frmPropCondition.m_SourceGridData;
+            //ReportCondition SourceGridData ;
+            var changingItemId = (OTS_REPORT_PROP_GRID_ITEMS)m_SourceGrid.m_frmPropCondition.PropGrid.Rows[m_SourceGrid.m_ClickRow].Tag;
+            ConditionItem item = m_SourceGrid.m_frmPropCondition.m_CurrentConditions[changingItemId];
+            int selindex = 0;
+         
+                    OTS_ITEM_TYPES ValType = item.iItemValType;
+                    switch (ValType)
+                    {
+                        case OTS_ITEM_TYPES.COMBO:
+                            item.itemDisplayVal = (string)m_SourceGrid.m_frmPropCondition.PropGrid[m_SourceGrid.m_ClickRow, 2].Value;
+                            selindex = item.comboDownList.IndexOf(item.itemDisplayVal.ToString());
+                            item.itemVal = selindex;
+                            break;
+                        case OTS_ITEM_TYPES.DOUBLE:
+                            var dValue = m_SourceGrid.m_frmPropCondition.PropGrid[m_SourceGrid.m_ClickRow, 2].Value;
+                            double v = Convert.ToDouble(dValue);
+                            item.itemDisplayVal = v;
+                            item.itemVal = v;
+                            break;
+                        default:
+                            break;
+                    }
+
+            //int tabinex = (int)m_SourceGrid.m_frmPropCondition.tabIndex;
+
+            //SourceGridData = m_SourceGrid.ChangeSouceGrid(tabinex, changingItemId, item.itemDisplayVal.ToString(), selindex);
+
+            m_SourceGrid.m_frmPropCondition.DisCurrentPicProperty();
+
+            //m_SourceGrid.m_frmPropCondition.DisProperyWindow();
+
+
+        }
+
+
+        #endregion
+    }
+    /// <summary>
+    /// 组合框类,与属性Grid关联
+    /// </summary>
+    class ItemValueChange2 : SourceGrid.Cells.Controllers.ControllerBase
+    {
+        OTSSourceGrid m_SampleGrid = null;
+        public ItemValueChange2(OTSSourceGrid SGrid)
+        {
+            m_SampleGrid = SGrid;
+        }
+        public override void OnValueChanged(CellContext sender, EventArgs e)
+        {
+
+            //判断如果对选择颗粒,全部颗粒进行了重新选择的话
+            if (sender.Position.Row == 2)
+                m_SampleGrid.m_frmPropCondition.m_ReportApp.im_ParticlesGridDevidePage = null;//需要重新刷新颗粒列表
+
+
+            //3,并根据CGridInClr条件从底层获取数据,并加载相应的模块
+            m_SampleGrid.m_frmPropCondition.ShowDataDiagram(m_SampleGrid.m_frmPropCondition.tabIndex);
+
+            //------------------------------------------------------------------------------------------------------------------
+            m_SampleGrid.m_ClickRow = sender.Position.Row;
+            if (m_SampleGrid.m_frmPropCondition.PropGrid.Rows[m_SampleGrid.m_ClickRow].Tag != null)
+            {
+                m_SampleGrid.m_frmPropCondition.m_ReportApp.m_RstWindow.SelectWorkSampleNode();
+            }
+
+
+        }
+    }
+}

+ 372 - 0
OTSIncAReportApp/1-UI/OTSDisplaySourceGridData/OTSSampleReportInfo/OTSSampleReportInfo.cs

@@ -0,0 +1,372 @@
+using System;
+using System.Collections.Generic;
+
+//this module's enum definition are the shadow of the PropParam.h in the OTSMODEL(C++)
+//that means there're a same contrast definition in that module.that's because export an enum definition to C# from C++ through clr project is difficult.
+namespace OTSIncAReportApp.OTSSampleReportInfo
+{
+    #region 相关枚举定义
+    /// <summary>
+    /// document标签标识
+    /// </summary>
+    /// 
+
+    public enum REPORT_GRID_DATA_TYPE
+    {
+        STRING = 0,
+        PARTICLE = 1,
+        INT = 2,
+        FLOAT = 3
+    }
+
+    public enum DisplayPicutureType
+    {
+        //分析图
+        AnalyzeImg = 0,
+        //分析数据表
+        AnalyzeDataTable = 1,
+        //分析数据图
+        AnalyzeDataChart = 2
+    }
+    public enum IMAGE_DISPLAY_TYPE
+    {
+        INVALID = -1,
+        DISTRIBUTION = 0,
+        IMAGE_GRID = 1,
+
+    }
+    public enum IMAGE_TYPE
+    {
+        INVALID = -1,
+        BSE = 0,
+        CLASSIFIED = 1,
+        ORIGINAl=2,
+        ORIGINALCLASSIFIED=3
+
+    }
+    public enum CALCULATE_TABLE_TYPE
+    {
+        INVALID = -1,
+        MEASURE_INFO = 0,
+        PARTICALE_GENE_INFO = 1,
+        PARTICALE_COMP = 2,
+        ELEMENT_COMP = 3,
+        PARTICALE_SIZE_DISTRIBUTION = 4,
+        AVE_ELEMENT_COMP = 5,
+        GB_Method1 = 6,
+        GB_Method2 = 7,
+        ASTM = 8,
+        DIN = 9
+
+    }
+    public enum CALCULATE_CHART_TYPE
+    {
+        INVALID = -1,
+        COMMON_FIVE = 0,
+        PARTICALE_COMP = 1,
+        ELEMENT_COMP = 2,
+        PARTICALE_SIZE_DISTRIBUTION = 3,
+        TRIO_CHART = 4,
+
+
+    }
+    /// <summary>
+    /// 显示计算方法的类型
+    /// </summary>
+    public enum ComputedColNameEnum
+    {
+        //最长直径
+        MaxDiameter = 0,
+        //最短直径
+        MinDiameter = 1,
+        //面积
+        Area = 2,
+        //等效圆直径
+        EquivalentCircleDiameter = 3,
+        //费雷特直径
+        FerretDiameter = 4,
+        //长短直径比
+        DiameterRatio = 5
+    }
+
+    /// <summary>
+    /// 标记分析物的类型
+    /// </summary>
+    public enum OTS_SOFT_PACKAGE_ID
+    {
+        //INVALID = -1,
+        //MIN = 0,
+        OTSIncA = 0,             //夹杂物分析
+        OTSPartA = 1,            //颗粒度分析
+        //MAX = 1
+    };
+    //国标信息表类型
+    public enum GBTypeEnum
+    {
+        GB1 = 0,
+        GB2 = 1
+    }
+    /// <summary>
+    /// 样品属性值的名称
+    /// </summary>
+    public enum OTS_REPORT_PROP_GRID_ITEMS
+    {
+        INVALID = -1,  //image 0\3\2\7\8\5\10\13
+        MIN = 0,
+        /// <summary>
+        /// 数据源
+        /// </summary>
+        DATA_SOURCE = 0,
+        /// <summary>
+        /// 数据类型
+        /// </summary>
+        DATA_SOURCE_TYPE = 1,
+        /// <summary>
+        /// 分布图中,测量图类型
+        /// </summary>
+        IMAGE_TYPE = 2,
+        /// <summary>
+        /// 分布图中,测量图显示方式
+        /// </summary>
+        IMAGE_DISPLAY_TYPE = 3,
+        /// <summary>
+        /// 
+        /// </summary>
+        IMAGEGRID_DIS_TYPE = 4,
+        /// <summary>
+        /// 数据表,类型,查看什么表
+        /// </summary>
+        CALCULATE_TABLE_TYPE = 5,
+        /// <summary>
+        /// 数据图,类型,查看什么图
+        /// </summary>
+        CALCULATE_CHART_TYPE = 6,
+        /// <summary>
+        /// 颗粒类型,分布图中,全部,分析颗粒
+        /// </summary>
+        PARTICLE_TYPE = 7,
+        /// <summary>
+        /// 
+        /// </summary>
+        STD_ID = 8,
+        /// <summary>
+        /// 粒级表
+        /// </summary>
+        GRAIN_SIZE_CLASS_TABLE = 9,
+        /// <summary>
+        /// 粒级,全部,自定义等
+        /// </summary>
+        GRAIN_SIZE_CLASS = 10,
+        /// <summary>
+        /// 粒级,最小颗粒
+        /// </summary>
+        GRAIN_SIZE_MIN = 11,
+        /// <summary>
+        /// 粒级,最大颗粒
+        /// </summary>
+        GRAIN_SIZE_MAX = 12,
+        /// <summary>
+        /// 尺寸计算法
+        /// </summary>
+        SIZE_CAL_METHOD_TYPE = 13,
+        /// <summary>
+        /// 
+        /// </summary>
+        SIZE_GRID_CAL_METHOD_TYPE = 14,
+        /// <summary>
+        /// 三元相图模板
+        /// </summary>
+        TRIO_CHART_TYPE = 15,
+        MAX = 16
+    };
+    public enum  IMAGEGRID_DIS_TYPE
+    {
+       
+		
+		CLASSIFY_TYPE = 0,
+		PARTICALE_SIZE_TYPE = 1
+		
+	};
+    /// <summary>
+    /// 样品属性值的类型
+    /// </summary>
+    public enum OTS_ITEM_TYPES
+    {
+        BOOL = 0,
+        DOUBLE = 1,
+        COMBO = 2,
+    };
+
+    /// <summary>
+    /// 消息框相关按钮样式
+    /// </summary>
+    public enum MessageBoxRev
+    {
+        DIALOG_YES = 0,
+        DIALOG_NO = 1,
+        DIALOG_CANCEL = 2
+    };
+    public enum SIZECALMETHOM
+    {
+        DMAX = 0,
+        DMIN = 1,
+        FERET = 2,
+        CIRCLE = 3
+    };
+    public enum SIZECLASSTYPE
+    {
+        ALL = 0,
+        USERDEFINE = 1,
+        
+    };
+    public enum IMAGEGRIDDISTYPE
+    {
+        BYCLASSIFY=0,
+        BYSIZECLASS=1
+    
+    }
+    #endregion
+
+    #region 相关结构类定义
+    /// <summary>
+    /// 树控件结构类,ReportApp 给 RetMgrWindow 发送添加测量结果文件的信息
+    /// </summary>
+    public class CTreeSampleRst
+    {
+        public string sSampleTitleName;
+        public List<OTS_REPORT_PROP_GRID_ITEMS> List_ShowGrid_Items;
+        public bool bSwitch;
+    };
+
+    /// <summary>
+    /// 测量结果属性数据类
+    /// </summary>
+    public class ConditionItem
+    {
+        public OTS_REPORT_PROP_GRID_ITEMS iItemId;                //具体标题在哪行
+        public String sSCaptionName;                               //样品标题名         //具体名称                    
+        public OTS_ITEM_TYPES iItemValType;                       //样品标题名对应值的类型(bool,int~~~~)
+        public bool bReadOnly;                                      //值的类型(可读、不可读)
+        public string sDescriptionInfo;                             //描述信息
+        public Object itemDisplayVal;                                    //样品标题名对应值 
+        public object itemVal;                                         //当前属性的对应枚举值
+        public List<String> comboDownList = new List<string>();     //如果iSampleValType是combobox则在此处存储下拉列表
+    }
+    /// <summary>
+    /// 测量结构信息类
+    /// </summary>
+    public class ReportCondition
+    {
+        #region 变量定义
+
+        /// <summary>
+        /// 样品属性数据
+        /// </summary>
+        public List<ConditionItem> ConditionItemList;
+        /// <summary>
+        /// 树控件类,全局变量
+        /// </summary>
+        //public CTreeSampleRst TSampleRst;
+        /// <summary>
+        /// 索引
+        /// </summary>
+        public DisplayPicutureType TabIndex;
+        #endregion
+
+        #region 构造函数
+        /// <summary>
+        /// 构造函数
+        /// </summary>
+        public ReportCondition()
+        {
+            ConditionItemList = new List<ConditionItem>();
+            //TSampleRst = new CTreeSampleRst();
+        }
+        #endregion
+        /// <param name="in_list_sampledata"></param>
+        /// <param name="in_orpgi"></param>
+        /// <returns></returns>
+        public int GetPropIndexByPropItemName( OTS_REPORT_PROP_GRID_ITEMS in_orpgi)
+        {
+            for (int i = 0; i < ConditionItemList.Count; i++)
+            {
+                if (ConditionItemList[i].iItemId == in_orpgi)
+                {
+                    return i;
+                }
+            }
+            return -1;
+        }
+        public object GetPropItemValueByPropItemName(OTS_REPORT_PROP_GRID_ITEMS in_orpgi)
+        {
+            for (int i = 0; i < ConditionItemList.Count; i++)
+            {
+                if (ConditionItemList[i].iItemId == in_orpgi)
+                {
+                    return ConditionItemList[i].itemDisplayVal;
+                }
+            }
+            return -1;
+        }
+        public void SetPropByPropItemName(OTS_REPORT_PROP_GRID_ITEMS in_orpgi, string val)
+        {
+            int i = GetPropIndexByPropItemName(in_orpgi);
+
+            ConditionItemList[i].itemDisplayVal = val;
+        }
+        public int GetComboDownListIndexByItemName(OTS_REPORT_PROP_GRID_ITEMS in_orpgi)
+        {
+            int i = GetPropIndexByPropItemName(in_orpgi);
+
+           return ConditionItemList[i].comboDownList.IndexOf(ConditionItemList[i].itemDisplayVal.ToString());
+
+        }
+        public List<String> GetComboDownListByItemName(OTS_REPORT_PROP_GRID_ITEMS in_orpgi)
+        {
+            int i = GetPropIndexByPropItemName(in_orpgi);
+
+            return ConditionItemList[i].comboDownList;
+
+        }
+
+        public List<String> SetComboDownListByItemName(OTS_REPORT_PROP_GRID_ITEMS in_orpgi, List<String> comboDownList)
+        {
+            int i = GetPropIndexByPropItemName(in_orpgi);
+
+            return ConditionItemList[i].comboDownList = comboDownList;
+
+        }
+        public string GetItemvalByItemName(OTS_REPORT_PROP_GRID_ITEMS in_orpgi)
+        {
+            int i = GetPropIndexByPropItemName(in_orpgi);
+
+            return ConditionItemList[i].itemDisplayVal.ToString();
+
+        }
+        /// <summary>
+        /// 按照枚举字符串,过滤掉不显示的项
+        /// </summary>
+        /// <param name="source"></param>
+        /// <returns></returns>
+        //public void FilterData(ReportCondition source)
+        //{
+        //    ReportCondition ret = this;
+        //    ret.TabIndex = source.TabIndex;
+
+
+        //    //new
+        //    List<OTS_REPORT_PROP_GRID_ITEMS> list_shogrid_items = source.TSampleRst.List_ShowGrid_Items;
+        //    for (int i = 0; i < source.ConditionItemList.Count; i++)
+        //    {
+        //        if (list_shogrid_items.Contains(source.ConditionItemList[i].iItemId))
+        //        {
+        //            ret.ConditionItemList.Add(source.ConditionItemList[i]);
+        //        }
+        //    }
+
+        //    return ;
+        //}
+
+    };
+    #endregion
+}

+ 871 - 0
OTSIncAReportApp/1-UI/OTSDisplaySourceGridData/OTSSourceGrid.cs

@@ -0,0 +1,871 @@
+using OTSIncAReportApp.DataOperation.Model;
+using OTSIncAReportApp.OTSSampleReportInfo;
+using OTSIncAReportApp.SysMgrTools;
+using OTSIncAReportGB;
+using OTSIncAReportGrids;
+
+using SourceGrid;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Data;
+using System.Diagnostics;
+using System.Drawing;
+using System.Linq;
+using System.Windows.Forms;
+
+
+namespace OTSIncAReportApp.OTSDataMgrFunction
+{
+    /// <summary>
+    /// 属性Grid相关操作封装类
+    /// </summary>
+    public class OTSSourceGrid
+    {
+        #region 变量定义
+        /// <summary>
+        /// 主框架窗体
+        /// </summary>
+        public frmReportConditionChoose m_frmPropCondition = null;
+
+     
+        /// <summary>
+        /// 当grid被click时,确定点击的行
+        /// </summary>
+        public int m_ClickRow = 0;
+
+        /// <summary>
+        /// 当grid被click时,确定点击的列
+        /// </summary>
+        public int m_ClickColumn = 0;
+
+        /// <summary>
+        /// 当改变ProperyWindow窗口大小时,窗口响应Resize(object sender, EventArgs e),返回改变后的尺寸,利用改变后的窗口尺寸重回Grid的行宽和列宽
+        /// </summary>
+        public int m_PropWindow_X = 0;
+
+        /// <summary>
+        /// 当改变ProperyWindow窗口大小时,窗口响应Resize(object sender, EventArgs e),返回改变后的尺寸,利用改变后的窗口尺寸重回Grid的行宽和列宽
+        /// </summary>
+        public int m_PropWindow_Y = 0;
+
+        /// <summary>
+        /// 临时用于计算用的grid行号 总行数
+        /// </summary>
+        public static int m_Const_Grid_Row = 42;    //总行数
+
+        /// <summary>
+        /// 临时用于计算用的grid行号 总列数
+        /// </summary>
+        public static int m_Const_Grid_Column = 3;   //总列数
+
+
+
+        /// <summary>
+        /// 当选择了Grid的某个row ,修改Row的值,引发的事件
+        /// </summary>
+        ChangeGridCellValEvent m_ChangeCellValEvent = null;
+
+        /// <summary>
+        /// 选择COMBOBOX值引发的事件
+        /// </summary>
+        ItemValueChange2 m_ValChangeEvent2 = null;
+
+        /// <summary>
+        /// 定义分栏表头样式
+        /// </summary>
+        public SourceGrid.Cells.Views.Cell m_Col_HeaderMode = null;
+
+        /// <summary>
+        /// 定义大表头grid表头样式
+        /// </summary>
+        SourceGrid.Cells.Views.Cell m_CellTitleModel = null;
+
+        /// <summary>
+        /// 定义分栏标题格样式
+        /// </summary>
+        SourceGrid.Cells.Views.Cell m_Col_NameMode = null;
+
+        /// <summary>
+        /// 定义分栏内容格样式
+        /// </summary>
+        SourceGrid.Cells.Views.Cell m_Col_ValMode = null;
+
+        /// <summary>
+        /// 只读样式cell设置
+        /// </summary>
+        SourceGrid.Cells.Views.Cell M_Col_readonly = null;
+
+
+        /// <summary>
+        /// 通用参数组的标题名
+        /// </summary>
+        public String m_Display_Mode_Name = "参数";
+
+        /// <summary>
+        /// 通用参数组的GRID行数
+        /// </summary>
+        public int m_Display_Mode_Row = 0;
+
+
+
+        Language lan = new Language();
+        Hashtable table;
+     
+
+        ResultDataMgr m_DataMgr;
+        #endregion
+
+        #region 构造函数及初始化函数
+        public OTSSourceGrid(frmReportConditionChoose Propwindow)
+        {
+            m_DataMgr = Propwindow.m_ReportApp.m_DataMgrFun;
+            m_frmPropCondition = Propwindow;
+            m_frmPropCondition.PropGrid.Rows.Clear();
+            m_frmPropCondition.PropGrid.Redim(m_Const_Grid_Row, m_Const_Grid_Column);
+            table = lan.GetNameTable("SampleGrid");
+            string str = table["str1"].ToString();
+            m_Display_Mode_Name = str;
+        }
+
+
+        /// <summary>
+        /// 初始化Grid修改值事件
+        /// </summary>
+        void InitChangeValEvent()
+        {
+            m_ChangeCellValEvent = new ChangeGridCellValEvent(this);
+            m_ValChangeEvent2 = new ItemValueChange2(this);
+
+        }
+
+        #endregion
+
+        #region 初始化属性Grid相关方法
+        /// <summary>
+        /// 初始化属性Grid相关样式
+        /// </summary>
+        public void InitGrid()
+        {
+            //初始化Grid修改值事件
+            InitChangeValEvent();
+            //定义大表头grid表头样式
+            {
+                m_CellTitleModel = new SourceGrid.Cells.Views.Cell();
+                m_CellTitleModel.BackColor = Color.LightGray;
+                m_CellTitleModel.ForeColor = Color.Black;
+                m_CellTitleModel.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleLeft;
+            }
+            //定义分栏表头样式
+            {
+                m_Col_HeaderMode = new SourceGrid.Cells.Views.Cell();
+                m_Col_HeaderMode.BackColor = Color.LightGray;         //背景色
+                m_Col_HeaderMode.ForeColor = Color.Black;      //字体颜色
+                m_Col_HeaderMode.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleCenter;
+            }
+            //定义分栏标题格样式
+            {
+                m_Col_NameMode = new SourceGrid.Cells.Views.Cell();
+                m_Col_NameMode.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleLeft;
+            }
+            //定义分栏内容格样式
+            {
+                m_Col_ValMode = new SourceGrid.Cells.Views.Cell();
+                m_Col_ValMode.TextAlignment = DevAge.Drawing.ContentAlignment.MiddleLeft;
+            }
+            //只读样式cell设置
+            {
+                M_Col_readonly = new SourceGrid.Cells.Views.Cell();
+                M_Col_readonly.ForeColor = Color.Gray;
+            }
+        }
+
+        /// <summary>
+        /// 初始化属性Grid相关表头
+        /// </summary>
+        public void InitGridTitlet()
+        {
+            int firstColumnWidth = 15;    //第一列的宽度
+            int SecondColumnWidth = 150;
+            //设备各单元格宽度---------------------------------------------
+            m_frmPropCondition.PropGrid.Columns.SetWidth(0, firstColumnWidth);     //设置第一列宽度
+            m_frmPropCondition.PropGrid.Columns.AutoSizeColumn(2);    //固定进度条
+
+            //ProperyWindows的窗口宽度包括是第二列和第三列的长度总和
+            m_frmPropCondition.PropGrid.Columns.SetWidth(1, 150);         //第二列宽度
+            m_frmPropCondition.PropGrid.Columns.SetWidth(2, (m_PropWindow_X - firstColumnWidth - SecondColumnWidth - 18));     //第三列宽度    
+        }
+
+        /// <summary>
+        /// 初始化组的标题栏   iRow:GroupTitle的行号, sGroupName: GroupTitle的名字
+        /// </summary>
+        /// <param name="iRow"></param>
+        /// <param name="sGroupName"></param>
+        public void InitGroupTitle(int iRow, String sGroupName)
+        {
+            if (null == m_frmPropCondition.PropGrid[iRow, 0])
+            {
+                m_frmPropCondition.PropGrid[iRow, 0] = new SourceGrid.Cells.Link("-");//第一行,上面用来折叠的"-",一会点击后变成"+"
+                m_frmPropCondition.PropGrid[iRow, 0].View = m_CellTitleModel;   //设置表头的样式
+                                                                       //设置表头"-"按钮,点击后的事件
+            }
+            if (null == m_frmPropCondition.PropGrid[iRow, 1])
+            {
+                m_frmPropCondition.PropGrid[iRow, 1] = new SourceGrid.Cells.Cell(sGroupName);    // 设置GroupTitle的名字
+                m_frmPropCondition.PropGrid[iRow, 1].View = m_CellTitleModel;
+                m_frmPropCondition.PropGrid[iRow, 1].ColumnSpan = 2;         //设置第二列与第三列合并,表头效果完成。  2:从当前列开始合并2列
+            }
+        }
+
+        #endregion
+
+        #region 属性Grid显示相关方法
+
+        public void ShowGeneralGrid(ReportCondition conditionInfo)
+        {
+            if (conditionInfo.ConditionItemList.Count() == 0)
+                return;
+
+            int nGridRow = 0;
+            string str = table["str2"].ToString();
+            this.InitGroupTitle(nGridRow, str);
+            nGridRow++;
+
+            int Display_Mode_Row = 1;//确定跨行样式的跨行数变量
+            // 设置样品Grid数据
+            for (int i = 0; i < conditionInfo.ConditionItemList.Count; i++)
+            {
+                Display_Mode_Row++;
+
+                //显示样品的属性值
+                ConditionItem SData = conditionInfo.ConditionItemList[i];
+                this.SetGridCellVal(nGridRow, SData);
+                nGridRow++;
+            }
+
+
+            //控制左边的竖形条框栏的显示                       
+            //第二行,第一列,为了效果美化,向下跨行,共跨m_Grid_TotleRow - 1行
+            if (Display_Mode_Row > 1)     //有通用参数组的Grid值显示
+            {
+                //获取Grid组Title所在的行号
+                int iCurRow = Display_Mode_Row;
+                //第二行的时候,需要定义左边的条框栏
+                if (m_frmPropCondition.tabIndex == DisplayPicutureType.AnalyzeImg)
+                {
+                    if (null == m_frmPropCondition.PropGrid[1 + 1, 0])
+                    {
+                        m_frmPropCondition.PropGrid[1, 0] = new SourceGrid.Cells.Cell("");
+                        m_frmPropCondition.PropGrid[1, 0].View = m_Col_HeaderMode;
+                    }
+                    else
+                    {
+                        m_frmPropCondition.PropGrid[iCurRow + 1, 0].Value = "";
+                    }
+                    if (iCurRow == 0)
+                    {
+                        m_frmPropCondition.PropGrid[iCurRow + 1, 0].RowSpan = iCurRow + Display_Mode_Row - 1;   //iCurRow + General_Totle_Row-1 : 去掉标题栏计数
+
+                    }
+                    else
+                    {
+                        m_frmPropCondition.PropGrid[1, 0].RowSpan = Display_Mode_Row - 1;   //iCurRow + General_Totle_Row-1 : 去掉标题栏计数
+
+                    }
+                }
+                if (m_frmPropCondition.tabIndex == DisplayPicutureType.AnalyzeDataTable)
+                {
+                    //第二行的时候,需要定义左边的条框栏 
+                    if (null == m_frmPropCondition.PropGrid[1 + 1, 0])
+                    {
+                        m_frmPropCondition.PropGrid[1, 0] = new SourceGrid.Cells.Cell("");
+                        m_frmPropCondition.PropGrid[1, 0].View = m_Col_HeaderMode;
+                    }
+                    else
+                    {
+                        m_frmPropCondition.PropGrid[iCurRow + 1, 0].Value = "";
+                    }
+                    if (iCurRow == 0)
+                    {
+                        m_frmPropCondition.PropGrid[iCurRow + 1, 0].RowSpan = iCurRow + Display_Mode_Row - 1;   //iCurRow + General_Totle_Row-1 : 去掉标题栏计数
+
+                    }
+                    else
+                    {
+                        m_frmPropCondition.PropGrid[1, 0].RowSpan = Display_Mode_Row - 1;   //iCurRow + General_Totle_Row-1 : 去掉标题栏计数
+                    }
+                }
+                if (m_frmPropCondition.tabIndex == DisplayPicutureType.AnalyzeDataChart)
+                {
+                    //第二行的时候,需要定义左边的条框栏 
+                    if (null == m_frmPropCondition.PropGrid[1, 0])
+                    {
+                        m_frmPropCondition.PropGrid[1, 0] = new SourceGrid.Cells.Cell("");
+                        m_frmPropCondition.PropGrid[1, 0].View = m_Col_HeaderMode;
+                    }
+                    else
+                    {
+                        m_frmPropCondition.PropGrid[iCurRow + 1, 0].Value = "";
+                    }
+                    if (iCurRow == 0)
+                    {
+                        m_frmPropCondition.PropGrid[iCurRow + 1, 0].RowSpan = iCurRow + Display_Mode_Row - 1;   //iCurRow + General_Totle_Row-1 : 去掉标题栏计数
+
+                    }
+                    else
+                    {
+                        m_frmPropCondition.PropGrid[1, 0].RowSpan = Display_Mode_Row - 1;   //iCurRow + General_Totle_Row-1 : 去掉标题栏计数
+
+                    }
+                }
+            }
+        }
+
+
+        /// <summary>
+        /// 显示Chart图表相关属性Grid
+        /// </summary>
+        /// <param name="note"></param>
+        public void SetPictureType(DisplayPicutureType note)
+        {
+            m_frmPropCondition.tabIndex = note;
+          
+        }
+
+        public void SetGridCellVal(int Row, ConditionItem SData)
+        {
+            OTS_REPORT_PROP_GRID_ITEMS SampleID = SData.iItemId;
+            String sCaptionName = SData.sSCaptionName;
+            object SampleVal = SData.itemDisplayVal;
+            List<String> comboDownList = SData.comboDownList;
+            OTS_ITEM_TYPES SampleValType = SData.iItemValType;
+            bool bReadOnly = SData.bReadOnly;
+
+            //每行的第一列显示属性名称
+            if (null == m_frmPropCondition.PropGrid[Row, 1])
+            {
+                m_frmPropCondition.PropGrid[Row, 1] = new SourceGrid.Cells.Cell(sCaptionName);
+            }
+            else
+            {
+                m_frmPropCondition.PropGrid[Row, 1].Value = sCaptionName;
+            }
+            m_frmPropCondition.PropGrid[Row, 1].View = m_Col_NameMode;
+            //每行的第二列显示属性值
+            if (null == m_frmPropCondition.PropGrid[Row, 2])
+            {
+                switch (SData.iItemValType)
+                {
+                    case OTS_ITEM_TYPES.COMBO:
+
+                        try
+                        {
+                            SourceGrid.Cells.Editors.ComboBox m_ComboboxText = null;
+
+                            List<string> ValList = new List<string>();
+                            string[] arraySample;
+
+                            if (null == comboDownList)
+                            {
+                                List<string> sSampleVal = new List<string>();
+                                ValList = sSampleVal;
+                            }
+                            else
+                            {
+                                ValList = (List<string>)comboDownList;
+                            }
+
+                            int iValCount = ValList.Count();
+                            if (iValCount > 0)
+                            {
+                                arraySample = new string[iValCount];
+                                for (int i = 0; i < iValCount; i++)
+                                {
+                                    arraySample[i] = ValList[i];
+                                }
+                            }
+                            else
+                            {
+                                arraySample = new string[3] { "", "", "" };
+                            }
+
+                            m_frmPropCondition.PropGrid[Row, 2] = new SourceGrid.Cells.Cell(SampleVal);
+                            m_ComboboxText = new SourceGrid.Cells.Editors.ComboBox(typeof(string), arraySample, true);
+                            m_frmPropCondition.PropGrid[Row, 2].Editor = m_ComboboxText;
+                            m_ComboboxText.Control.DropDownStyle = ComboBoxStyle.DropDownList;        //设置下拉框为不可以编辑的状态
+                            m_frmPropCondition.PropGrid[Row, 2].Value = SampleVal;
+                            m_frmPropCondition.PropGrid[Row, 2].AddController(m_ChangeCellValEvent);
+                            m_frmPropCondition.PropGrid[Row, 2].AddController(m_ValChangeEvent2);
+                            m_ComboboxText.EditableMode = EditableMode.SingleClick;
+
+                        }
+                        catch (Exception)
+                        {
+
+                        }
+                        break;
+                    case OTS_ITEM_TYPES.DOUBLE:
+                        var txtbox = new SourceGrid.Cells.Editors.TextBoxNumeric(typeof(double));
+                        m_frmPropCondition.PropGrid[Row, 2] = new SourceGrid.Cells.Cell(SampleVal);
+                        txtbox.EditableMode = EditableMode.SingleClick;
+                        m_frmPropCondition.PropGrid[Row, 2].Editor = txtbox;
+                        m_frmPropCondition.PropGrid[Row, 2].AddController(m_ChangeCellValEvent);
+                        m_frmPropCondition.PropGrid[Row, 2].AddController(m_ValChangeEvent2);
+
+                        break;
+                    default:
+                        break;
+                }
+
+                if (bReadOnly)          //只读模式
+                {
+                    m_frmPropCondition.PropGrid[Row, 2].Editor = null;
+                    m_frmPropCondition.PropGrid[Row, 2].View = M_Col_readonly;// 设置只读
+                }
+                else
+                {
+                    m_frmPropCondition.PropGrid[Row, 2].View = m_Col_ValMode;
+                }
+
+                //行绑定ID值
+                m_frmPropCondition.PropGrid.Rows[Row].Tag = SampleID;
+                //数据位置绑定数据类型
+                m_frmPropCondition.PropGrid[Row, 2].Tag = SampleValType;
+            }
+            else
+            {
+                m_frmPropCondition.PropGrid[Row, 2].Value = SampleVal;
+            }
+        }
+        #endregion
+
+        #region 属性Grid与各功能模块操作等方法
+      
+
+        /// <summary>
+        /// 打开国标进程EXE
+        /// </summary>
+        private void OpenOTSINcAreportTemplateAPP(string str_path, string  str_gbname)
+        {
+            //----------------------------------
+            //共传2个参数
+            //参数1:测量结果的路径,国标底层需要
+            //参数2:是打开的国标一,国标二,美标,德标,的类型
+            ProcessStartInfo process = new ProcessStartInfo();
+            //process.FileName = "ReportGBExe\\OTSIncAReportGB.exe";//打开app的路径
+            string arg1 = str_path.Replace(" ", "^");//参数1,测量结果的路径
+            string arg2 = str_gbname.Trim().Replace(" ", "^");//参数2,是打开的类型
+            process.Arguments = string.Format("{0} {1}", arg1, arg2);  //多个参数用空格隔开
+            process.WindowStyle = ProcessWindowStyle.Normal;
+            Process.Start(process);
+        }
+
+        #endregion
+        /// <summary>
+        /// 分发SourceGrid,各选项值改变事件
+        /// </summary>
+        /// <param name="tbindex"></param>
+        /// <param name="typ"></param>
+        /// <param name="val"></param>
+        /// <param name="sel"></param>
+        /// <returns></returns>
+        public ReportCondition ChangeSouceGrid()
+        {
+   
+            //ReportCondition repCon = new ReportCondition();
+            bool ret = m_frmPropCondition.GetWorkingPictureConditionVal();
+   
+
+            return m_frmPropCondition.m_SourceGridData;
+        }
+        /// <summary>
+        /// SourceGrid,分析图页面组合各项方法
+        /// </summary>
+        /// <param name="typ"></param>
+        /// <param name="val"></param>
+        /// <param name="sel"></param>
+        /// <returns></returns>
+        //public ReportCondition ChangeSouceGrid_Image(OTS_REPORT_PROP_GRID_ITEMS typ, string val, int sel)
+        //{
+        //    //ReportCondition ret = new ReportCondition();
+        //   var ret = m_frmPropCondition.m_SourceGridDataList[0];
+        //    //string strlist = ret.TSampleParam.sSampleTitleName;
+        //    //List<OTS_REPORT_PROP_GRID_ITEMS> list_showgrid_item = ret.TSampleRst.List_ShowGrid_Items;
+
+        //    //测量结果数据
+        //    if (typ == OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE)
+        //    {
+        //        if (val.Contains("+"))
+        //        {
+        //            ret.SetPropByPropItemName( OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE, val);
+        //        }
+        //        else
+        //        {
+        //           ResultFile resultFile = m_DataMgr.resultFilesList.Find(s => s.FileName == val);
+        //            int index = m_DataMgr.resultFilesList.IndexOf(resultFile);
+        //            m_DataMgr.WorkingResult = index;
+        //        }
+        //    }
+        //    //测量图类型
+        //    if (typ == OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE)
+        //    {
+
+        //    }
+
+
+        //    ////---------------------------------------------------------------
+
+        //    //测量图显示方式
+        //    if (typ == OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE)
+        //    {
+        //        if (sel == 0)//选择分布图
+        //        {
+        //            //strlist = ",0,2,3,7,10,13,";
+        //            //list_showgrid_item = new List<OTS_REPORT_PROP_GRID_ITEMS>(){OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE,//0
+        //            //    OTS_REPORT_PROP_GRID_ITEMS.IMAGE_TYPE,//2
+        //            //    OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE,//3
+        //            //    OTS_REPORT_PROP_GRID_ITEMS.PARTICLE_TYPE,//7
+        //            //    OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS,//10
+        //            //    OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE };//13
+        //            int displaytypeIdx = ret.GetPropIndexByPropItemName(OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE);
+        //            if (displaytypeIdx != 0)
+        //            {
+        //                //strlist = ",0,2,3,7,10,11,12,13,";
+        //                //list_showgrid_item = new List<OTS_REPORT_PROP_GRID_ITEMS>(){OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE,//0
+        //                //OTS_REPORT_PROP_GRID_ITEMS.IMAGE_TYPE,//2
+        //                //OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE,//3
+        //                //OTS_REPORT_PROP_GRID_ITEMS.PARTICLE_TYPE,//7
+        //                //OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS,//10
+        //                //OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_MIN,//11
+        //                //OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_MAX,//12
+        //                //OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE };//13
+        //            }
+        //        }
+        //        else if (sel == 1)//选择排序图时
+        //        {
+        //            //strlist = ",0,2,3,4,13,";
+        //            //list_showgrid_item = new List<OTS_REPORT_PROP_GRID_ITEMS>(){OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE,//0
+        //            //    OTS_REPORT_PROP_GRID_ITEMS.IMAGE_TYPE,//2
+        //            //    OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE,//3
+        //            //    OTS_REPORT_PROP_GRID_ITEMS.MEASURE_DATA_TYPE,//4
+        //            //    OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE };//13
+        //        }
+        //    }
+
+        //    //颗粒类型
+        //    if (typ == OTS_REPORT_PROP_GRID_ITEMS.PARTICLE_TYPE)
+        //    {
+
+        //    }
+
+        //    //测量数据
+        //    if (typ == OTS_REPORT_PROP_GRID_ITEMS.IMAGEGRID_DIS_TYPE)
+        //    {
+        //        if (sel == 0)//全部颗粒类型
+        //        {
+        //            //strlist = ",0,2,3,4,13,";
+        //            //list_showgrid_item = new List<OTS_REPORT_PROP_GRID_ITEMS>(){OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE,//0
+        //            //    OTS_REPORT_PROP_GRID_ITEMS.IMAGE_TYPE,//2
+        //            //    OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE,//3
+        //            //    OTS_REPORT_PROP_GRID_ITEMS.MEASURE_DATA_TYPE,//4
+        //            //    OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE };//13
+        //        }
+        //        else if (sel == 1)//分析颗粒类型
+        //        {
+        //            //list_showgrid_item = new List<OTS_REPORT_PROP_GRID_ITEMS>(){OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE,//0
+        //            //    OTS_REPORT_PROP_GRID_ITEMS.IMAGE_TYPE,//2
+        //            //    OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE,//3
+        //            //    OTS_REPORT_PROP_GRID_ITEMS.MEASURE_DATA_TYPE,//4
+        //            //    OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE };//13
+        //        }
+        //        else if (sel == 2)//颗粒尺寸类型
+        //        {
+        //            //list_showgrid_item = new List<OTS_REPORT_PROP_GRID_ITEMS>(){OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE,//0
+        //            //    OTS_REPORT_PROP_GRID_ITEMS.IMAGE_TYPE,//2
+        //            //    OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE,//3
+        //            //    OTS_REPORT_PROP_GRID_ITEMS.MEASURE_DATA_TYPE,//4
+        //            //    OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE,//9
+        //            //    OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS,//10
+        //            //    OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE };//13
+        //        }
+        //    }
+
+        //    //颗粒粒级表
+        //    if (typ == OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE)
+        //    {
+        //        //点击下拉框,级联联动事件
+        //        //int idx = m_ReportApp.m_DataMgrFun.GetSampleIndexByPropItemName(m_ReportApp.SourceGridData.SampleDataList, OTSIncAReportApp.OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE);
+        //        var SourceGridData = ret;
+               
+        //        object Itmval = SourceGridData.GetItemvalByItemName(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE);
+        //        List<string> list_partsize = m_DataMgr.GetPartSizeList(m_DataMgr.m_RptConfigFile.FileFolderSize + Itmval.ToString());
+        //        List<string> list_partsizeChart = SourceGridData.GetComboDownListByItemName(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE);
+        //        //for (int i = 0; i < ret.ConditionItemList[idx].comboDownList.Count; i++)
+        //        //    list_partsizeChart.Add(ret.ConditionItemList[idx].comboDownList[i].ToString());
+        //        string sscaptionname16 = table["sscaptionname16"].ToString();
+        //        string sscaptionname18 = table["sscaptionname18"].ToString();
+        //        list_partsize.Insert(0, sscaptionname16);//全部
+        //        list_partsize.Insert(1, sscaptionname18);//自定义
+        //        //ret.ConditionItemList[GetSampleIndexByPropItemName(ret.ConditionItemList, OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE)].itemVal = ret.ConditionItemList[idx].itemVal.ToString();
+        //        ret.SetComboDownListByItemName( OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE, list_partsizeChart);
+        //        ret.SetComboDownListByItemName( OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS, list_partsize);
+        //        m_DataMgr.m_RptConfigFile.PartSizeFile = ret.GetItemvalByItemName(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE);
+        //    }
+
+        //    //粒级
+        //    if (typ == OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS)
+        //    {
+        //        switch (sel)
+        //        {
+        //            case 0:
+        //                //list_showgrid_item.Remove(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_MIN);//11
+        //                //list_showgrid_item.Remove(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_MAX);//12
+        //                break;
+        //            case 1:
+
+        //                //if (!list_showgrid_item.Contains(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_MIN))
+        //                //{
+        //                //    list_showgrid_item.Add(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_MIN);//11
+        //                //    list_showgrid_item.Add(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_MAX);//12
+        //                //}
+        //                var idx = ret.GetPropIndexByPropItemName(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_MIN);
+        //                ret.ConditionItemList[idx].bReadOnly = false;
+        //                var idx1= ret.GetPropIndexByPropItemName(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_MAX);
+        //                ret.ConditionItemList[idx].itemDisplayVal = "0";
+        //                ret.ConditionItemList[idx1].bReadOnly = false;
+        //                ret.ConditionItemList[idx1].itemDisplayVal = "0";
+        //                break;
+        //            default:
+
+        //                //if (!list_showgrid_item.Contains(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_MIN))
+        //                //{
+        //                //    list_showgrid_item.Add(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_MIN);//11
+        //                //    list_showgrid_item.Add(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_MAX);//12
+        //                //}
+        //                string[] v = ret.ConditionItemList[5].itemDisplayVal.ToString().Split('~');
+        //                var idx2 = ret.GetPropIndexByPropItemName(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_MIN);
+                     
+        //                var idx3 = ret.GetPropIndexByPropItemName(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_MAX);
+        //                ret.ConditionItemList[idx2].bReadOnly = true;
+        //                ret.ConditionItemList[idx2].itemDisplayVal = v[0];
+        //                ret.ConditionItemList[idx3].bReadOnly = true;
+        //                ret.ConditionItemList[idx3].itemDisplayVal = v[1];
+        //                break;
+        //        }
+        //    }
+
+
+        //    //尺寸计算法
+        //    if (typ == OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE)
+        //    {
+
+        //    }
+
+        //    //ret.TSampleParam.sSampleTitleName = strlist;
+        //    //ret.TSampleRst.List_ShowGrid_Items = list_showgrid_item;
+        //    //ret = FilterData(ret);
+
+        //    return ret;
+        //}
+        ///// <summary>
+        ///// SourceGrid,Grid表格部份组合各项方法
+        ///// </summary>
+        ///// <param name="typ"></param>
+        ///// <param name="val"></param>
+        ///// <param name="sel"></param>
+        ///// <returns></returns>
+        //public ReportCondition ChangeSouceGrid_Grid(OTS_REPORT_PROP_GRID_ITEMS typ, string val, int sel)
+        //{
+        //    //ReportCondition ret = new ReportCondition();
+        //  var  ret = m_frmPropCondition.m_SourceGridDataList[1];
+        //    //string strlist = ret.TSampleParam.sSampleTitleName;
+        //    //List<OTS_REPORT_PROP_GRID_ITEMS> list_showgrid_item = ret.TSampleRst.List_ShowGrid_Items;
+
+        //    //测量结果数据
+        //    if (typ == OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE)
+        //    {
+        //        if (val.Contains("+"))
+        //        {
+        //            ret.SetPropByPropItemName( OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE, val);
+        //        }
+        //        else
+        //        {
+        //            DataOperation.Model.ResultFile resultFile = m_DataMgr.resultFilesList.Find(s => s.FileName == val);
+        //            int index = m_DataMgr.resultFilesList.IndexOf(resultFile);
+        //            m_DataMgr.WorkingResult = index;
+        //        }
+        //    }
+
+        //    //数据类型
+        //    if (typ == OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE_TYPE)
+        //    {
+
+        //    }
+
+        //    //数据表类型
+        //    if (typ == OTS_REPORT_PROP_GRID_ITEMS.CALCULATE_TABLE_TYPE)
+        //    {
+        //        switch (sel)
+        //        {
+        //            case 2://颗粒成份
+
+        //                //if (!list_showgrid_item.Contains(OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE))//13
+        //                //{
+        //                //    list_showgrid_item.Add(OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE);
+        //                //}
+        //                //list_showgrid_item.Remove(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE);//9
+        //                break;
+        //            case 4://颗粒尺寸分布
+
+        //                //if (!list_showgrid_item.Contains(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE))//9
+        //                //{
+        //                //    list_showgrid_item.Add(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE);
+        //                //}
+        //                //if (!list_showgrid_item.Contains(OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE))//13
+        //                //{
+        //                //    list_showgrid_item.Add(OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE);
+        //                //}
+        //                break;
+        //            default://其它Grid模块不需要,粒级表和尺寸计算法
+
+        //                //list_showgrid_item.Remove(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE);//9
+        //                                                                                             //list_showgrid_item.Remove(OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE);//13
+        //                break;
+        //        }
+        //    }
+
+        //    //颗粒粒级表
+        //    if (typ == OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE)
+        //    {
+        //        m_DataMgr.m_RptConfigFile.PartSizeFile = ret.GetItemvalByItemName( OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE);
+        //    }
+
+
+        //    //尺寸计算方法
+        //    if (typ == OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE)
+        //    {
+
+        //    }
+
+        //    //ret.TSampleParam.sSampleTitleName = strlist;
+        //    //ret.TSampleRst.List_ShowGrid_Items = list_showgrid_item;
+        //    //ret = FilterData(ret);
+        //    return ret;
+        //}
+        ///// <summary>
+        ///// SourceGrid,Chart图表部份组合各项方法
+        ///// </summary>
+        ///// <param name="typ"></param>
+        ///// <param name="val"></param>
+        ///// <param name="sel"></param>
+        ///// <returns></returns>
+        //public ReportCondition ChangeSouceGrid_Chart(OTS_REPORT_PROP_GRID_ITEMS typ, string val, int sel)
+        //{
+        //    ReportCondition ret = new ReportCondition();
+        //    ret = m_frmPropCondition.m_SourceGridDataList[2];
+        //    //string strlist = ret.TSampleParam.sSampleTitleName;
+        //    //List<OTS_REPORT_PROP_GRID_ITEMS> list_showgrid_item = ret.TSampleRst.List_ShowGrid_Items;
+
+        //    //测量结果数据
+        //    if (typ == OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE)
+        //    {
+        //        if (val.Contains("+"))
+        //        {
+        //            //ret.SampleDataList[1].bReadOnly = true;
+        //            //ret.SampleDataList[1].itemVal = ret.SampleDataList[GetSampleIndexByPropItemName(ret.SampleDataList, OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE)].comboDownList[0];
+        //            ret.ConditionItemList[0].itemDisplayVal = val;
+        //        }
+        //        else
+        //        {
+        //            //ret.SampleDataList[1].bReadOnly = false;
+        //            DataOperation.Model.ResultFile resultFile = m_DataMgr.resultFilesList.Find(s => s.FileName == val);
+        //            int index = m_DataMgr.resultFilesList.IndexOf(resultFile);
+        //            m_DataMgr.WorkingResult = index;
+        //        }
+        //    }
+
+        //    //数据类型
+        //    if (typ == OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE_TYPE)
+        //    {
+
+        //    }
+
+        //    //数据图类型
+        //    if (typ == OTS_REPORT_PROP_GRID_ITEMS.CALCULATE_CHART_TYPE)
+        //    {
+        //        switch (sel)
+        //        {
+        //            case 4://三元相图
+
+
+        //                //if (!list_showgrid_item.Contains(OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE) && !list_showgrid_item.Contains(OTS_REPORT_PROP_GRID_ITEMS.TRIO_CHART_TYPE) && !list_showgrid_item.Contains(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE))
+        //                //{
+        //                //    list_showgrid_item.Add(OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE);
+        //                //    list_showgrid_item.Add(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE);
+        //                //    list_showgrid_item.Add(OTS_REPORT_PROP_GRID_ITEMS.TRIO_CHART_TYPE);//15
+        //                //}
+        //                //else if (!list_showgrid_item.Contains(OTS_REPORT_PROP_GRID_ITEMS.TRIO_CHART_TYPE))
+        //                //{
+        //                //    list_showgrid_item.Add(OTS_REPORT_PROP_GRID_ITEMS.TRIO_CHART_TYPE);//15
+        //                //}
+
+        //                break;
+        //            case 3://颗粒尺寸分布图
+
+
+        //                //if (!list_showgrid_item.Contains(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE))//9
+        //                //{
+        //                //    list_showgrid_item.Add(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE);
+        //                //}
+        //                //if (!list_showgrid_item.Contains(OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE))//13
+        //                //{
+        //                //    list_showgrid_item.Add(OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE);
+        //                //}
+        //                //if (list_showgrid_item.Contains(OTS_REPORT_PROP_GRID_ITEMS.TRIO_CHART_TYPE))//15
+        //                //{
+        //                //    list_showgrid_item.Remove(OTS_REPORT_PROP_GRID_ITEMS.TRIO_CHART_TYPE);
+        //                //}
+        //                break;
+        //            default:
+
+        //                //list_showgrid_item.Remove(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE);
+        //                //list_showgrid_item.Remove(OTS_REPORT_PROP_GRID_ITEMS.TRIO_CHART_TYPE);//15
+        //                break;
+        //        }
+        //    }
+
+        //    //三元相图模板
+        //    if (typ == OTS_REPORT_PROP_GRID_ITEMS.TRIO_CHART_TYPE)
+        //    {
+
+        //    }
+
+        //    //颗粒种类
+        //    if (typ == OTS_REPORT_PROP_GRID_ITEMS.PARTICLE_TYPE)
+        //    {
+
+        //    }
+
+        //    //颗粒粒级表
+        //    if (typ == OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE)
+        //    {
+        //        m_DataMgr.m_RptConfigFile.PartSizeFile = ret.GetItemvalByItemName( OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE);
+        //    }
+
+        //    //尺寸计算方法
+        //    if (typ == OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE)
+        //    {
+
+        //    }
+
+        //    //ret.TSampleParam.sSampleTitleName = strlist;
+        //    //ret.TSampleRst.List_ShowGrid_Items = list_showgrid_item;
+        //    //ret = FilterData(ret);
+        //    return ret;
+        //}
+
+
+    }
+
+}
+

+ 77 - 0
OTSIncAReportApp/1-UI/OTSDisplaySourceGridData/frmReportConditionChoose.Designer.cs

@@ -0,0 +1,77 @@
+namespace OTSIncAReportApp
+{
+    partial class frmReportConditionChoose
+    {
+        public SourceGrid.Grid PropGrid;
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmReportConditionChoose));
+            this.PropGrid = new SourceGrid.Grid();
+            this.SuspendLayout();
+            // 
+            // PropGrid
+            // 
+            this.PropGrid.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.PropGrid.EnableSort = true;
+            this.PropGrid.Location = new System.Drawing.Point(0, 0);
+            this.PropGrid.Name = "PropGrid";
+            this.PropGrid.OptimizeMode = SourceGrid.CellOptimizeMode.ForRows;
+            this.PropGrid.SelectionMode = SourceGrid.GridSelectionMode.Cell;
+            this.PropGrid.Size = new System.Drawing.Size(442, 697);
+            this.PropGrid.TabIndex = 5;
+            this.PropGrid.TabStop = true;
+            this.PropGrid.ToolTipText = "";
+            this.PropGrid.Click += new System.EventHandler(this.PropGrid_Click_1);
+            // 
+            // frmMeasureRstProp
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(442, 697);
+            this.CloseButton = false;
+            this.CloseButtonVisible = false;
+            this.Controls.Add(this.PropGrid);
+            this.DockAreas = ((OTS.WinFormsUI.Docking.DockAreas)((((OTS.WinFormsUI.Docking.DockAreas.DockLeft | OTS.WinFormsUI.Docking.DockAreas.DockRight) 
+            | OTS.WinFormsUI.Docking.DockAreas.DockTop) 
+            | OTS.WinFormsUI.Docking.DockAreas.DockBottom)));
+            this.Font = new System.Drawing.Font("SimSun", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+            this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
+            this.Name = "frmReportConditionChoose";
+            this.RightToLeftLayout = true;
+            this.Text = "查询参数窗口";
+            this.WindowState = System.Windows.Forms.FormWindowState.Minimized;
+            this.Resize += new System.EventHandler(this.OTSPropertyWindow_Resize);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+
+    }
+}

+ 940 - 0
OTSIncAReportApp/1-UI/OTSDisplaySourceGridData/frmReportConditionChoose.cs

@@ -0,0 +1,940 @@
+using OTS.WinFormsUI.Docking;
+using OTSIncAReportApp.OTSDataMgrFunction;
+using OTSIncAReportApp.OTSSampleReportInfo;
+using OTSIncAReportApp.SysMgrTools;
+using OTSIncAReportGB;
+using OTSIncAReportGrids;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace OTSIncAReportApp
+{
+    /// <summary>
+    /// 属性Grid窗体
+    /// </summary>
+    public partial class frmReportConditionChoose : DockContent
+    {
+        #region 变量定义
+    
+        public frmReportApp m_ReportApp = null;
+        public ResultDataMgr m_DataMgr;
+        /// <summary>
+        /// 属性Grid对象,全局变量
+        /// </summary>
+        public OTSSourceGrid m_ConditionGrid = null;
+
+        /// <summary>
+        /// 记录当前标签索引
+        /// </summary>
+        public DisplayPicutureType tabIndex = 0;
+
+
+
+        public ReportCondition m_SourceGridData = new ReportCondition();                                            //当前SourceGrid
+
+        public Dictionary<OTS_REPORT_PROP_GRID_ITEMS, ConditionItem> m_CurrentConditions;//record all the conditions that user  selected or seted.
+
+        //国际化存储信息
+        Hashtable resTable;
+        #endregion
+
+        #region 构造函数
+        /// <summary>
+        /// 构造函数
+        /// </summary>
+        /// <param name="ReportApp"></param>
+        public frmReportConditionChoose(frmReportApp ReportApp)
+        {
+            InitializeComponent();
+            m_ReportApp = ReportApp;
+
+            m_ConditionGrid = new OTSSourceGrid(this);
+
+            m_DataMgr = ReportApp.m_DataMgrFun;
+            #region 国际化语言
+            Language lan = new Language(this);
+            resTable = lan.GetNameTable(this.Name);
+            m_CurrentConditions = new Dictionary<OTS_REPORT_PROP_GRID_ITEMS, ConditionItem>();
+           
+            #endregion
+        }
+        #endregion
+        public void SetDefaultConditionValue()
+        {
+            m_CurrentConditions.Clear();
+            //image condition items.
+            //测量结果数据源
+            List<string> list_source_str = m_DataMgr.GetSampleListName();
+            string sSCaptionName1 = resTable["sscaptionname1"].ToString();
+            ConditionItem sampleData = new ConditionItem();
+            sampleData.iItemId = OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE;
+            sampleData.sSCaptionName = sSCaptionName1;
+            sampleData.iItemValType = OTS_ITEM_TYPES.COMBO;
+            sampleData.bReadOnly = false;
+            sampleData.sDescriptionInfo = "Select Measurement Result";
+            sampleData.itemDisplayVal = list_source_str[m_DataMgr.WorkingResult];
+            sampleData.comboDownList = list_source_str;
+            sampleData.itemVal = m_DataMgr.WorkingResult;
+            m_CurrentConditions.Add(OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE,sampleData);
+
+            //测量图类别 分布图 or 排列图
+            List<string> list_datasourcetypelist = m_DataMgr.GetDataSourceTypeList();
+            string sSCaptionName3 = resTable["sscaptionname3"].ToString();
+            string sscaptionname14 = resTable["sscaptionname14"].ToString();
+            string sscaptionname15 = resTable["sscaptionname15"].ToString();
+            List<string> list1 = new List<string>() { sscaptionname14, sscaptionname15 };
+            ConditionItem sampleData2 = new ConditionItem();
+            sampleData2.iItemId = OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE;
+            sampleData2.sSCaptionName = sSCaptionName3;
+            sampleData2.iItemValType = OTS_ITEM_TYPES.COMBO;
+            sampleData2.bReadOnly = false;
+            sampleData2.sDescriptionInfo = "image display mode";
+            sampleData2.itemDisplayVal = list1[0];
+            sampleData2.itemVal = IMAGE_DISPLAY_TYPE.DISTRIBUTION;
+            sampleData2.comboDownList = list1;
+            m_CurrentConditions.Add(OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE,sampleData2);
+
+
+            string sSCaptionName2 = resTable["sscaptionname2"].ToString();
+            string sSCaptionName13 = resTable["sscaptionname13"].ToString();
+            ConditionItem sampleData1 = new ConditionItem();
+            sampleData1.iItemId = OTS_REPORT_PROP_GRID_ITEMS.IMAGE_TYPE;
+            sampleData1.sSCaptionName = sSCaptionName2;//测量图类型
+            sampleData1.iItemValType = OTS_ITEM_TYPES.COMBO;
+            sampleData1.bReadOnly = false;
+            sampleData1.sDescriptionInfo = "distribution image Type";
+            sampleData1.itemDisplayVal = "BSE原图";
+            sampleData1.itemVal = IMAGE_TYPE.BSE;
+            sampleData1.comboDownList = new List<string>() { "BSE原图", "分类显示", "Original", "原图颗粒分布" };//bse,颗粒分类图
+            m_CurrentConditions.Add(OTS_REPORT_PROP_GRID_ITEMS.IMAGE_TYPE,sampleData1);
+
+
+
+
+            //粒级表
+            string sSCaptionName_partsizefile = "粒级表";
+            List<string> list_partsizelist = m_DataMgr.GetPartSizeFileList();//从系统默认的路径中查找出所有的粒级表文件
+            ConditionItem sampleData_partsizefile = new ConditionItem();
+            sampleData_partsizefile.iItemId = OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE;
+            sampleData_partsizefile.sSCaptionName = sSCaptionName_partsizefile;
+            sampleData_partsizefile.iItemValType = OTS_ITEM_TYPES.COMBO;
+            sampleData_partsizefile.bReadOnly = false;
+            sampleData_partsizefile.sDescriptionInfo = "Particle Table";
+            sampleData_partsizefile.itemDisplayVal = list_partsizelist[0];
+            sampleData_partsizefile.itemVal = 0;
+            sampleData_partsizefile.comboDownList = list_partsizelist;
+            m_CurrentConditions.Add(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE,sampleData_partsizefile);
+
+            //粒级
+            string sscaptionname16 = resTable["sscaptionname16"].ToString();
+            string sscaptionname17 = resTable["sscaptionname17"].ToString();
+            string sscaptionname18 = resTable["sscaptionname18"].ToString();
+            ConditionItem sampleData4 = new ConditionItem();
+            List<string> sizeList = new List<string>();
+            sizeList = m_DataMgr.GetPartSizeList();//获取粒级后额外增加全部,自定义,选项
+            sizeList.Insert(0, sscaptionname16);//全部
+            sizeList.Insert(1, sscaptionname18);//自定义
+
+            string sSCaptionName5 = resTable["sscaptionname5"].ToString();
+            sampleData4.iItemId = OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS;
+            sampleData4.sSCaptionName = sSCaptionName5;
+            sampleData4.iItemValType = OTS_ITEM_TYPES.COMBO;
+            sampleData4.bReadOnly = false;
+            sampleData4.sDescriptionInfo = "Grain Size";
+            sampleData4.itemDisplayVal = sscaptionname16;
+            sampleData4.comboDownList = sizeList;
+            sampleData4.itemVal = 0;
+            m_CurrentConditions.Add(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS,sampleData4);
+
+            //自定义最小
+            string sSCaptionName6 = resTable["sscaptionname6"].ToString();
+            ConditionItem sampleData41 = new ConditionItem();
+            sampleData41.iItemId = OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_MIN;
+            sampleData41.sSCaptionName = sSCaptionName6;
+            sampleData41.iItemValType = OTS_ITEM_TYPES.DOUBLE;
+            sampleData41.bReadOnly = false;
+            sampleData41.sDescriptionInfo = "Smallest Particle";
+            sampleData41.itemDisplayVal = "0";
+            m_CurrentConditions.Add(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_MIN,sampleData41);
+
+            //自定义最大
+            string sSCaptionName7 = resTable["sscaptionname7"].ToString();
+            ConditionItem sampleData42 = new ConditionItem();
+            sampleData42.iItemId = OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_MAX;
+            sampleData42.sSCaptionName = sSCaptionName7;
+            sampleData42.iItemValType = OTS_ITEM_TYPES.DOUBLE;
+            sampleData42.bReadOnly = false;
+            sampleData42.sDescriptionInfo = "Maximum Particle";
+            sampleData42.itemDisplayVal = "0";
+            m_CurrentConditions.Add(OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_MAX,sampleData42);
+
+            //排列图显示类别
+            string sSCaptionName22 = resTable["sscaptionname22"].ToString();
+            //string sSCaptionName19 = resTable["sscaptionname19"].ToString();
+            string sSCaptionName20 = resTable["sscaptionname20"].ToString();
+            string sSCaptionName21 = resTable["sscaptionname21"].ToString();
+            List<string> list3 = new List<string>() { sSCaptionName20, sSCaptionName21 };
+            ConditionItem sampleData6 = new ConditionItem();
+            sampleData6.iItemId = OTS_REPORT_PROP_GRID_ITEMS.IMAGEGRID_DIS_TYPE;
+            sampleData6.sSCaptionName = sSCaptionName22;
+            sampleData6.iItemValType = OTS_ITEM_TYPES.COMBO;
+            sampleData6.bReadOnly = false;
+            sampleData6.sDescriptionInfo = "Measured Data";
+            sampleData6.itemDisplayVal = list3[0];
+            sampleData6.itemVal = IMAGEGRID_DIS_TYPE.CLASSIFY_TYPE;
+            sampleData6.comboDownList = list3;
+            m_CurrentConditions.Add(OTS_REPORT_PROP_GRID_ITEMS.IMAGEGRID_DIS_TYPE,sampleData6);
+
+            //计算方式
+            string sSCaptionName8 = resTable["sscaptionname8"].ToString();
+            ConditionItem sampleData5 = new ConditionItem();
+            sampleData5.iItemId = OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE;
+            sampleData5.sSCaptionName = sSCaptionName8;
+            sampleData5.iItemValType = OTS_ITEM_TYPES.COMBO;
+            sampleData5.bReadOnly = false;
+            sampleData5.sDescriptionInfo = "image property calculation method";
+            sampleData5.itemDisplayVal = "DMAX";
+            sampleData5.itemVal = SIZECALMETHOM.DMAX;
+            sampleData5.comboDownList = m_DataMgr.GetSizeCalMethodTypeList();
+            m_CurrentConditions.Add(OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE,sampleData5);
+
+
+            // grid condition items
+            //数据表类型
+            string sSCaptionName10 = resTable["sscaptionname10"].ToString();
+            List<string> list2 = new List<string>() { resTable["sscaptionname25"].ToString(), resTable["sscaptionname26"].ToString(), resTable["sscaptionname27"].ToString(), resTable["sscaptionname28"].ToString(), resTable["sscaptionname29"].ToString(), resTable["sscaptionname30"].ToString() };
+            string[] aa = m_ReportApp.Text.Split('-');
+            List<string> listStd = new List<string>() { "国标一", "国标二", "美标", "德标" };
+            list2.AddRange(listStd);
+            ConditionItem sampleData3 = new ConditionItem();
+            sampleData3.iItemId = OTS_REPORT_PROP_GRID_ITEMS.CALCULATE_TABLE_TYPE;
+            sampleData3.sSCaptionName = sSCaptionName10;
+            sampleData3.iItemValType = OTS_ITEM_TYPES.COMBO;
+            sampleData3.bReadOnly = false;
+            sampleData3.sDescriptionInfo = "Data table type";
+            sampleData3.itemDisplayVal = list2[0];
+            sampleData3.itemVal = CALCULATE_TABLE_TYPE.MEASURE_INFO;
+            sampleData3.comboDownList = list2;
+            m_CurrentConditions.Add(OTS_REPORT_PROP_GRID_ITEMS.CALCULATE_TABLE_TYPE,sampleData3);
+
+
+            // chart condition items
+           
+            List<string> list22 = new List<string>() { "常用夹杂物分类", resTable["sscaptionname27"].ToString(), resTable["sscaptionname28"].ToString(), resTable["sscaptionname29"].ToString(), resTable["sscaptionname12"].ToString() };
+            ConditionItem sampleData22 = new ConditionItem();
+            sampleData22.iItemId = OTS_REPORT_PROP_GRID_ITEMS.CALCULATE_CHART_TYPE;
+            sampleData22.sSCaptionName = sSCaptionName10;
+            sampleData22.iItemValType = OTS_ITEM_TYPES.COMBO;
+            sampleData22.bReadOnly = false;
+            sampleData22.sDescriptionInfo = "Data graph type";
+            sampleData22.itemDisplayVal = list22[0];
+            sampleData22.itemVal = CALCULATE_CHART_TYPE.COMMON_FIVE;
+            sampleData22.comboDownList = list22;
+            m_CurrentConditions.Add(OTS_REPORT_PROP_GRID_ITEMS.CALCULATE_CHART_TYPE, sampleData22);
+
+            //三元相图模板
+            string sSCaptionName12 = resTable["sscaptionname12"].ToString();
+            ConditionItem sampleData15 = new ConditionItem();
+            List<string> trio_listname = m_DataMgr.GetTriTemplateNameList();
+            sampleData15.iItemId = OTS_REPORT_PROP_GRID_ITEMS.TRIO_CHART_TYPE;
+            sampleData15.sSCaptionName = sSCaptionName12;
+            sampleData15.iItemValType = OTS_ITEM_TYPES.COMBO;
+            sampleData15.bReadOnly = false;
+            sampleData15.sDescriptionInfo = "Ternary phase diagram";
+            sampleData15.itemDisplayVal = trio_listname.First();
+            sampleData15.comboDownList = trio_listname;
+            m_CurrentConditions.Add(OTS_REPORT_PROP_GRID_ITEMS.TRIO_CHART_TYPE,sampleData15);
+
+
+
+        }
+        #region 属性Grid相关方法
+        public void ShowsTheDefaultPic()
+        {
+            try
+            {
+                if (m_DataMgr. resultFilesList.Count > 0)
+                {
+                   ShowDataDiagram(tabIndex);
+                }
+            }
+            catch (Exception ex)
+            {
+                //日记记录
+                string str = ex.ToString();
+            }
+        }
+        /// <summary>
+        /// 添加属性Grid相关数据
+        /// </summary>
+        public void DisCurrentPicProperty()
+        {
+            //ReportCondition SMInfo = new ReportCondition();
+            //获取工作样品属性
+            if (!GetWorkingPictureConditionVal())
+            {
+                return;
+            }
+            //添加属性Grid相关数据
+            DisProperyWindow();
+        }
+        /// <summary>
+        /// 接收 MeasureApp 发送的样品属性数据,通过Grid显示在properyWindow上
+        /// </summary>
+        /// <param name="SampleInfo"></param>
+        private void DisProperyWindow()
+        {
+            // 当点击事件响应结束后,将之前点击的行数和列数清0,避免选择工作样品重新赋值响应CELL值改变事件
+            PropGrid.Show();
+            m_ConditionGrid.m_ClickRow = 0;
+            m_ConditionGrid.m_ClickColumn = 0;
+            if (PropGrid.Rows.Count() > 0)
+            {
+                PropGrid.Rows.Clear();
+                PropGrid.Redim(OTSSourceGrid.m_Const_Grid_Row, OTSSourceGrid.m_Const_Grid_Column);
+            }
+            m_ConditionGrid.InitGrid();
+            m_ConditionGrid.ShowGeneralGrid(m_SourceGridData);
+        }
+
+        public bool GetWorkingPictureConditionVal()
+        {
+            //var tabindex = this.tabIndex;
+            if (m_DataMgr. WorkingResult == -1)
+            {
+                return false;
+            }
+            if (m_CurrentConditions.Count == 0)
+            {
+                SetDefaultConditionValue();
+            }
+            ReportCondition data = new ReportCondition();
+            switch (this.tabIndex)
+            {
+                case DisplayPicutureType.AnalyzeImg:
+                    
+                    data.TabIndex = DisplayPicutureType.AnalyzeImg;
+
+                    data.ConditionItemList = GetSourceGridData(DisplayPicutureType.AnalyzeImg);
+                    break;
+                case DisplayPicutureType.AnalyzeDataTable:
+                   
+                    data.TabIndex = DisplayPicutureType.AnalyzeDataTable;
+
+                    data.ConditionItemList = GetSourceGridData(DisplayPicutureType.AnalyzeDataTable);
+                    break;
+                case DisplayPicutureType.AnalyzeDataChart:
+                  
+                    data.TabIndex = DisplayPicutureType.AnalyzeDataChart;
+
+                    data.ConditionItemList = GetSourceGridData(DisplayPicutureType.AnalyzeDataChart);
+                    break;
+                default:
+                    break;
+
+
+
+            }
+            m_SourceGridData = data;
+            //SMeasureInfo = data;
+               
+            return true;
+        }
+        /// <summary>
+        /// 初始化加载sourceGrid各项
+        /// </summary>
+        /// <param name="tbindex"></param>
+        /// <returns></returns>SampleData1
+        private List<ConditionItem> GetSourceGridData(DisplayPicutureType tbindex)
+        {
+            List<ConditionItem> list = new List<ConditionItem>();
+            ConditionItem sampleData;
+            if (tbindex == DisplayPicutureType.AnalyzeImg)//分布图页
+            {
+                //测量结果数据源
+      
+                sampleData = m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE];
+                list.Add(sampleData);
+
+                //测量图类别 分布图 or 排列图
+    
+                sampleData = m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE];
+                list.Add(sampleData);
+
+
+              //图像显示方式
+                sampleData = m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.IMAGE_TYPE];
+
+                if ((int)m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE].itemVal == (int)IMAGE_DISPLAY_TYPE.DISTRIBUTION)
+                {
+                    sampleData.comboDownList = new List<string>() { "BSE原图", "分类显示", "原图拼接", "原图颗粒分布" };//bse,颗粒分类图
+                    list.Add(sampleData);
+
+                    //粒级表
+
+                    var sampleData_partsizefile = m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE];
+                    list.Add(sampleData_partsizefile);
+
+                    //粒级
+
+                    var sampleData4 = m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS];
+                    list.Add(sampleData4);
+                    if ((int)sampleData4.itemVal >= (int)SIZECLASSTYPE.USERDEFINE)
+                    {
+                        //自定义最小
+
+                        var sampleData41 = m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_MIN];
+                        list.Add(sampleData41);
+
+                        //自定义最大
+
+                        var sampleData42 = m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_MAX];
+                        list.Add(sampleData42);
+                    }
+
+
+
+                    //尺寸计算方式
+
+                    var sampleData5 = m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE];
+                    list.Add(sampleData5);
+
+                }
+                else 
+                {
+                    sampleData.comboDownList = new List<string>() { "BSE原图", "分类显示"};//bse,颗粒分类图
+                    list.Add(sampleData);
+                    //排列图类别
+
+                    var sampleData6 = m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.IMAGEGRID_DIS_TYPE];
+                    list.Add(sampleData6);
+                    if ((int)sampleData6.itemVal == (int)IMAGEGRID_DIS_TYPE.PARTICALE_SIZE_TYPE)
+                    {
+                        //粒级表
+
+                        var sampleData_partsizefile = m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE];
+                        list.Add(sampleData_partsizefile);
+
+             
+
+
+
+                        //尺寸计算方式
+
+                        var sampleData5 = m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE];
+                        list.Add(sampleData5);
+                    }
+                }
+                
+               
+
+
+
+
+              
+            }
+            else if (tbindex == DisplayPicutureType.AnalyzeDataTable)//Grid表格页
+            {
+                //测量结果数据源
+
+                sampleData = m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE];
+                list.Add(sampleData);
+
+
+
+                //数据表类型
+ 
+                var sampleData3 = m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.CALCULATE_TABLE_TYPE];
+                list.Add(sampleData3);
+                if ((int)sampleData3.itemVal == (int)CALCULATE_TABLE_TYPE.PARTICALE_SIZE_DISTRIBUTION )
+                {
+                    //粒级表
+
+                    var sampleData_partsizefile = m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE];
+                    list.Add(sampleData_partsizefile);
+
+                    //尺寸计算方法
+
+
+                    var sampleData5 = m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE];
+                    list.Add(sampleData5);
+                }
+                if ((int)sampleData3.itemVal == (int)CALCULATE_TABLE_TYPE.PARTICALE_COMP)
+                {
+                    //尺寸计算方法
+
+
+                    var sampleData5 = m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE];
+                    list.Add(sampleData5);
+
+                }
+
+                
+            }
+            else if (tbindex == DisplayPicutureType.AnalyzeDataChart)//Chart图页
+            {
+                //测量结果数据源
+
+                sampleData = m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE];
+                list.Add(sampleData);
+
+
+
+                //数据图类型
+      
+                var sampleData3 = m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.CALCULATE_CHART_TYPE];
+                list.Add(sampleData3);
+                if ((int)sampleData3.itemVal == (int)CALCULATE_CHART_TYPE.PARTICALE_SIZE_DISTRIBUTION)
+                {
+                    //粒级表
+
+                    var sampleData_partsizefile = m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE];
+                    list.Add(sampleData_partsizefile);
+
+                    //尺寸计算方法
+
+
+                    var sampleData5 = m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE];
+                    list.Add(sampleData5);
+
+
+                }
+                else if((int)sampleData3.itemVal == (int)CALCULATE_CHART_TYPE.TRIO_CHART)
+                {
+                    //三元相图模板
+
+                    var sampleData15 = m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.TRIO_CHART_TYPE];
+                    list.Add(sampleData15);
+
+                    //粒级表
+
+                    var sampleData_partsizefile = m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.GRAIN_SIZE_CLASS_TABLE];
+                    list.Add(sampleData_partsizefile);
+
+                    //尺寸计算方法
+
+
+                    var sampleData5 = m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE];
+                    list.Add(sampleData5);
+                }
+
+               
+            }
+
+            return list;
+        }
+
+
+
+        /// <summary>
+        /// 根据样品属性 显示对应的图表
+        /// </summary>
+        /// <param name="tabIndex">标签索引</param>
+        /// <param name="strTableTypeName">属性中选择的图表名称</param>
+        public void ShowDataDiagram(DisplayPicutureType tabindex)
+        {
+
+            int sourceid = m_DataMgr.WorkingResult;
+
+            var resultFile = m_DataMgr.resultFilesList[sourceid];
+
+            var prop = m_SourceGridData;
+
+            String m_fileName = resultFile.FileName;
+
+
+
+            #region 对各窗体模块进行实际加载的代码
+            switch (tabindex)
+            {
+                //分析图
+                case DisplayPicutureType.AnalyzeImg://第一页选项窗体,分析图
+                    m_ReportApp.m_RibbonFun.SetRibbonButnStatu_ByModule(DisplayPicutureType.AnalyzeImg);
+                    int display = prop.GetComboDownListIndexByItemName(OTS_REPORT_PROP_GRID_ITEMS.IMAGE_DISPLAY_TYPE);
+
+                    if (display == (int)IMAGE_DISPLAY_TYPE.DISTRIBUTION)
+                    {
+                        //分布图对象为空,或当前显示的与在测量结果中选择的不匹配,则重新加载
+                        if (null != m_ReportApp.im_Control_DrawDistrbutionImageAndBSE)
+                        {
+                            if (m_fileName != m_ReportApp.im_Control_DrawDistrbutionImageAndBSE.ShowSourceName)
+                            {
+                                //如果已经不是原先的数据源,则需要重新加载,设定为空,后面重新加载
+                                m_ReportApp.im_Control_DrawDistrbutionImageAndBSE = null;
+                            }
+                        }
+
+                        //不需重新加载,则加载条件
+                        if (m_ReportApp.im_Control_DrawDistrbutionImageAndBSE != null)
+                        {
+                            m_ReportApp.m_SImageWindow.Controls.Clear();
+
+                            m_ReportApp.im_Control_DrawDistrbutionImageAndBSE.DataSourceID = sourceid;
+                            m_ReportApp.im_Control_DrawDistrbutionImageAndBSE.ShowSourceName = m_fileName;
+                            m_ReportApp.im_Control_DrawDistrbutionImageAndBSE.Dock = DockStyle.Fill;
+                            m_ReportApp.m_SImageWindow.Controls.Add(m_ReportApp.im_Control_DrawDistrbutionImageAndBSE);
+                           
+                            m_ReportApp.m_SImageWindow.Activate();
+                            m_ReportApp.im_Control_DrawDistrbutionImageAndBSE.DrawDistrbutionImageAndBSE_ByQuery(m_SourceGridData);
+                            m_ReportApp.im_Control_DrawDistrbutionImageAndBSE.SetSelectParticle(m_ReportApp.SelectedParticles);
+
+                            string ImageType = prop.GetItemvalByItemName(OTS_REPORT_PROP_GRID_ITEMS.IMAGE_TYPE);
+                            //切换分布图显示方式
+
+                            m_ReportApp.im_Control_DrawDistrbutionImageAndBSE.ShowMode(ImageType);
+
+                            m_ReportApp.im_Control_DrawDistrbutionImageAndBSE.FullGraphMatch();
+
+                        }
+                        else if (m_ReportApp.im_Control_DrawDistrbutionImageAndBSE == null)
+                        {
+                            m_ReportApp.m_SImageWindow.Controls.Clear();
+                            m_ReportApp.im_Control_DrawDistrbutionImageAndBSE = new OTSIncAReportGraph.Controls.Control_DrawDistrbutionImageAndBSE(m_ReportApp);
+                            m_ReportApp.im_Control_DrawDistrbutionImageAndBSE.DataSourceID = sourceid;
+                            m_ReportApp.im_Control_DrawDistrbutionImageAndBSE.ShowSourceName = m_fileName;
+                            m_ReportApp.im_Control_DrawDistrbutionImageAndBSE.Dock = DockStyle.Fill;
+                            m_ReportApp.m_SImageWindow.Controls.Add(m_ReportApp.im_Control_DrawDistrbutionImageAndBSE);
+                            m_ReportApp.m_SImageWindow.Activate();
+                            m_ReportApp.im_Control_DrawDistrbutionImageAndBSE.DrawDistrbutionImageAndBSE_ByQuery(m_SourceGridData);
+                            m_ReportApp.im_Control_DrawDistrbutionImageAndBSE.SetSelectParticle(m_ReportApp.SelectedParticles);
+                            m_ReportApp.im_Control_DrawDistrbutionImageAndBSE.FullGraphMatch();
+                        }
+
+                    }
+                    else
+                    {
+                        //排列图为空,或与在测量结果中选择的名字不一致时,则重新加载
+                        if (null != m_ReportApp.im_Control_DrawDistrbutionSortImage)
+                        {
+                            if (m_fileName != m_ReportApp.im_Control_DrawDistrbutionSortImage.ShowSourceName)
+                            {
+                                //如果已经不是原先的数据源,则需要重新加载,设定为空,后面重新加载
+                                m_ReportApp.im_Control_DrawDistrbutionSortImage = null;
+                            }
+                        }
+
+                        //不需重新加载,则加载条件
+                        if (m_ReportApp.im_Control_DrawDistrbutionSortImage != null)
+                        {
+                            m_ReportApp.m_SImageWindow.Controls.Clear();
+                            m_ReportApp.im_Control_DrawDistrbutionSortImage.DataSourceID = sourceid;
+                            m_ReportApp.im_Control_DrawDistrbutionSortImage.ShowSourceName = m_fileName;
+                            m_ReportApp.im_Control_DrawDistrbutionSortImage.Dock = DockStyle.Fill;
+                            m_ReportApp.m_SImageWindow.Controls.Add(m_ReportApp.im_Control_DrawDistrbutionSortImage);
+                            m_ReportApp.m_SImageWindow.Activate();
+                            m_ReportApp.im_Control_DrawDistrbutionSortImage.GetDistrbutionSortimage_ByQuery(m_CurrentConditions);
+                            m_ReportApp.im_Control_DrawDistrbutionSortImage.SetSelectParticle(m_ReportApp.SelectedParticles);
+
+                            //判断当前点击测量结果中的数据源名,是否与已经加载的排序图显示的数据源名相同
+                            if (m_fileName == m_ReportApp.im_Control_DrawDistrbutionSortImage.ShowSourceName)
+                            {
+                                //相同,加载计算条件
+                                //  m_RstProp.m_ReportApp.im_Control_DrawDistrbutionSortImage.Control_DrawDistrbutionSortImage_ByQuery(listGriddataclr);
+                                m_ReportApp.im_Control_DrawDistrbutionSortImage.SetSelectParticle(m_ReportApp.SelectedParticles);
+
+                                //idx = m_RstProp.m_ReportApp.m_DataMgrFun.GetPropIndexByPropItemName(m_RstProp.SourceGridData.ConditionItemList, OTSIncAReportApp.OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.IMAGE_TYPE);
+                                string ImageType = prop.GetItemvalByItemName(OTS_REPORT_PROP_GRID_ITEMS.IMAGE_TYPE);
+                                //切换BSE和分类,两种影像的显示方式
+                                if (ImageType == "BSE")
+                                {
+                                    m_ReportApp.im_Control_DrawDistrbutionSortImage.ShowMode(false);
+                                }
+                                else
+                                {
+                                    m_ReportApp.im_Control_DrawDistrbutionSortImage.ShowMode(true);
+                                }
+                                return;
+                            }
+                        }
+                        else if (m_ReportApp.im_Control_DrawDistrbutionSortImage == null)
+                        {
+                            m_ReportApp.m_SImageWindow.Controls.Clear();
+                            m_ReportApp.im_Control_DrawDistrbutionSortImage = new OTSIncAReportGraph.Controls.Control_DrawDistrbutionSortImage(m_ReportApp);
+                            m_ReportApp.im_Control_DrawDistrbutionSortImage.DataSourceID = sourceid;
+                            m_ReportApp.im_Control_DrawDistrbutionSortImage.ShowSourceName = m_fileName;
+                            m_ReportApp.im_Control_DrawDistrbutionSortImage.Dock = DockStyle.Fill;
+                            m_ReportApp.m_SImageWindow.Controls.Add(m_ReportApp.im_Control_DrawDistrbutionSortImage);
+                            m_ReportApp.m_SImageWindow.Activate();
+                            m_ReportApp.im_Control_DrawDistrbutionSortImage.GetDistrbutionSortimage_ByQuery(m_CurrentConditions);
+                            m_ReportApp.im_Control_DrawDistrbutionSortImage.SetSelectParticle(m_ReportApp.SelectedParticles);
+                        }
+                    }
+
+                    break;
+                //分析数据表
+                case DisplayPicutureType.AnalyzeDataTable:
+                    #region 第二页选项窗体,分析数据表
+                    m_ReportApp.m_RibbonFun.SetRibbonButnStatu_ByModule(DisplayPicutureType.AnalyzeDataTable);
+
+                    //idx = m_RstProp.m_ReportApp.m_DataMgrFun.GetPropIndexByPropItemName(m_RstProp.SourceGridData.ConditionItemList, OTSIncAReportApp.OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.CALCULATE_TABLE_TYPE);
+                    int TableType = prop.GetComboDownListIndexByItemName(OTS_REPORT_PROP_GRID_ITEMS.CALCULATE_TABLE_TYPE);
+                    switch (TableType)
+                    {
+                        case 0:
+                            m_ReportApp.m_TablesWindow.Controls.Clear();
+                            m_ReportApp.im_ResultGrid = new ResultGrid(m_ReportApp);
+                            m_ReportApp.im_ResultGrid.Dock = DockStyle.Fill;
+                            m_ReportApp.m_TablesWindow.Controls.Add(m_ReportApp.im_ResultGrid);
+                            m_ReportApp.m_TablesWindow.Activate();
+                            break;
+                        case 1:
+                            if (m_ReportApp.im_ParticlesGridDevidePage != null && m_ReportApp.im_ParticlesGridDevidePage.FileName == m_fileName)
+                            {
+                                m_ReportApp.m_TablesWindow.Controls.Clear();
+                                m_ReportApp.m_TablesWindow.Controls.Add(m_ReportApp.im_ParticlesGridDevidePage);
+                                m_ReportApp.m_TablesWindow.Activate();
+                            }
+                            else
+                            {
+                                m_ReportApp.m_TablesWindow.Controls.Clear();
+                                m_ReportApp.im_ParticlesGridDevidePage = new OTSIncAReportGrids.ParticlesGridDevidePage(m_ReportApp);
+                                m_ReportApp.im_ParticlesGridDevidePage.FileName = m_fileName;
+                                m_ReportApp.im_ParticlesGridDevidePage.Dock = DockStyle.Fill;
+                                m_ReportApp.m_TablesWindow.Controls.Add(m_ReportApp.im_ParticlesGridDevidePage);
+                                m_ReportApp.m_TablesWindow.Activate();
+                            }
+                            break;
+                        case 2:
+                            m_ReportApp.m_TablesWindow.Controls.Clear();
+                            m_ReportApp.im_CompositionDistributionGrid = new CompositionDistributionGrid(m_ReportApp);
+                            m_ReportApp.im_CompositionDistributionGrid.Dock = DockStyle.Fill;
+                            m_ReportApp.m_TablesWindow.Controls.Add(m_ReportApp.im_CompositionDistributionGrid);
+                            m_ReportApp.m_TablesWindow.Activate();
+                            break;
+                        case 3:
+                            m_ReportApp.m_TablesWindow.Controls.Clear();
+                            m_ReportApp.im_ElementContentGrid = new ElementContentGrid(m_ReportApp);
+                            m_ReportApp.im_ElementContentGrid.Dock = DockStyle.Fill;
+                            m_ReportApp.m_TablesWindow.Controls.Add(m_ReportApp.im_ElementContentGrid);
+                            m_ReportApp.m_TablesWindow.Activate();
+                            break;
+                        case 4://颗粒尺寸分布表
+                            m_ReportApp.m_TablesWindow.Controls.Clear();
+                            m_ReportApp.im_ParticlesSizeGrid = new ParticlesSizeGrid(m_ReportApp);
+                            m_ReportApp.im_ParticlesSizeGrid.Dock = DockStyle.Fill;
+                            m_ReportApp.m_TablesWindow.Controls.Add(m_ReportApp.im_ParticlesSizeGrid);
+                            m_ReportApp.m_TablesWindow.Activate();
+                            break;
+                        case 5:
+                            m_ReportApp.m_TablesWindow.Controls.Clear();
+                            m_ReportApp.im_ElementCompositionAvgGrid = new ElementCompositionAvgGrid(m_ReportApp);
+                            m_ReportApp.im_ElementCompositionAvgGrid.Dock = DockStyle.Fill;
+                            m_ReportApp.m_TablesWindow.Controls.Add(m_ReportApp.im_ElementCompositionAvgGrid);
+                            m_ReportApp.m_TablesWindow.Activate();
+                            break;
+                        case 6:
+                            //国标一
+                            string resultfile = m_DataMgr.resultFilesList[m_DataMgr.WorkingResult].FilePath + "\\"
+                                + m_DataMgr.resultFilesList[m_DataMgr.WorkingResult].FileName;
+
+                            m_ReportApp.m_DataMgrFun.m_ReportMgr.AddASmplMsrResultMgr(resultfile);
+
+                            OTSCLRINTERFACE.CPropParamClr clr_prop = m_ReportApp.m_DataMgrFun.m_ReportMgr.GetPropertyParamTable();
+                            clr_prop.SetDataSourceId(0);//
+                            clr_prop.SetType(1);//table
+                            clr_prop.SetCalTableType(6);//国标1                    
+
+                            List<OTSCLRINTERFACE.CGridDataClr> listGriddataclr = m_ReportApp.m_DataMgrFun.m_ReportMgr.GridDataTransfer(clr_prop);//
+
+                            m_ReportApp.m_TablesWindow.Controls.Clear();
+                            m_ReportApp.im_ChineseStandardABCDDS = new ChineseStandardABCDDS(m_ReportApp.m_DataMgrFun.m_ReportMgr, listGriddataclr);
+
+                            m_ReportApp.im_ChineseStandardABCDDS.Dock = DockStyle.Fill;
+                            m_ReportApp.m_TablesWindow.Controls.Add(m_ReportApp.im_ChineseStandardABCDDS);
+                            m_ReportApp.m_TablesWindow.Activate();
+
+
+                            //OpenOTSINcAreportTemplateAPP(m_RstProp.m_ReportApp.m_DataMgrFun.resultFilesList[m_RstProp.m_ReportApp.m_DataMgrFun.WorkingResult].FilePath+"\\"
+                            //    + m_RstProp.m_ReportApp.m_DataMgrFun.resultFilesList[m_RstProp.m_ReportApp.m_DataMgrFun.WorkingResult].FileName, "GB1");
+                            break;
+                        case 7:
+                            //国标二
+                            string resultfile2 = m_DataMgr.resultFilesList[m_DataMgr.WorkingResult].FilePath + "\\"
+                                 + m_DataMgr.resultFilesList[m_DataMgr.WorkingResult].FileName;
+
+                            m_ReportApp.m_DataMgrFun.m_ReportMgr.AddASmplMsrResultMgr(resultfile2);
+
+                            OTSCLRINTERFACE.CPropParamClr clr_prop2 = m_ReportApp.m_DataMgrFun.m_ReportMgr.GetPropertyParamTable();
+                            clr_prop2.SetDataSourceId(0);//
+                            clr_prop2.SetType(1);//table
+                            clr_prop2.SetCalTableType(7);//国标2  
+                            List<OTSCLRINTERFACE.CGridDataClr> listGriddataclr2 = m_ReportApp.m_DataMgrFun.m_ReportMgr.GridDataTransfer(clr_prop2);//
+
+                            m_ReportApp.m_TablesWindow.Controls.Clear();
+                            m_ReportApp.im_NationalStandardMethodTwo = new NationalStandardMethodTwo(m_ReportApp.m_DataMgrFun.m_ReportMgr, listGriddataclr2);
+                            m_ReportApp.im_NationalStandardMethodTwo.Dock = DockStyle.Fill;
+                            m_ReportApp.m_TablesWindow.Controls.Add(m_ReportApp.im_NationalStandardMethodTwo);
+                            m_ReportApp.m_TablesWindow.Activate();
+                            //OpenOTSINcAreportTemplateAPP(m_RstProp.m_ReportApp.m_DataMgrFun.resultFilesList[m_RstProp.m_ReportApp.m_DataMgrFun.WorkingResult].FilePath + "\\"
+                            //    + m_RstProp.m_ReportApp.m_DataMgrFun.resultFilesList[m_RstProp.m_ReportApp.m_DataMgrFun.WorkingResult].FileName, "GB2");
+                            break;
+                        case 8:
+                            //美标
+                            string resultfile3 = m_DataMgr.resultFilesList[m_DataMgr.WorkingResult].FilePath + "\\"
+                                + m_DataMgr.resultFilesList[m_DataMgr.WorkingResult].FileName;
+
+                            m_ReportApp.m_DataMgrFun.m_ReportMgr.AddASmplMsrResultMgr(resultfile3);
+
+                            OTSCLRINTERFACE.CPropParamClr clr_prop3 = m_ReportApp.m_DataMgrFun.m_ReportMgr.GetPropertyParamTable();
+                            clr_prop3.SetDataSourceId(0);//
+                            clr_prop3.SetType(1);//table
+                            clr_prop3.SetCalTableType(8);
+                            List<OTSCLRINTERFACE.CGridDataClr> listGriddataclr3 = m_ReportApp.m_DataMgrFun.m_ReportMgr.GridDataTransfer(clr_prop3);
+
+                            m_ReportApp.m_TablesWindow.Controls.Clear();
+                            m_ReportApp.im_ASTMStandardABCDDS = new ASTMStandardABCDDS(m_ReportApp.m_DataMgrFun.m_ReportMgr, listGriddataclr3);
+                            m_ReportApp.im_ASTMStandardABCDDS.Dock = DockStyle.Fill;
+                            m_ReportApp.m_TablesWindow.Controls.Add(m_ReportApp.im_ASTMStandardABCDDS);
+                            m_ReportApp.m_TablesWindow.Activate();
+                            //OpenOTSINcAreportTemplateAPP(m_RstProp.m_ReportApp.m_DataMgrFun.resultFilesList[m_RstProp.m_ReportApp.m_DataMgrFun.WorkingResult].FilePath + "\\"
+                            //    + m_RstProp.m_ReportApp.m_DataMgrFun.resultFilesList[m_RstProp.m_ReportApp.m_DataMgrFun.WorkingResult].FileName, "ASTM");
+                            break;
+                        case 9:
+                            //德标
+                            string resultfile4 = m_DataMgr.resultFilesList[m_DataMgr.WorkingResult].FilePath + "\\"
+                               + m_DataMgr.resultFilesList[m_DataMgr.WorkingResult].FileName;
+
+                            m_ReportApp.m_DataMgrFun.m_ReportMgr.AddASmplMsrResultMgr(resultfile4);
+
+                            OTSCLRINTERFACE.CPropParamClr clr_prop4 = m_ReportApp.m_DataMgrFun.m_ReportMgr.GetPropertyParamTable();
+                            clr_prop4.SetDataSourceId(0);//
+                            clr_prop4.SetType(1);//table
+                            clr_prop4.SetCalTableType(9);
+                            List<OTSCLRINTERFACE.CGridDataClr> listGriddataclr4 = m_ReportApp.m_DataMgrFun.m_ReportMgr.GridDataTransfer(clr_prop4);
+
+                            m_ReportApp.m_TablesWindow.Controls.Clear();
+                            m_ReportApp.im_DINStandardABCDDS = new DINStandardABCDDS(m_ReportApp.m_DataMgrFun.m_ReportMgr, listGriddataclr4);
+                            m_ReportApp.im_DINStandardABCDDS.Dock = DockStyle.Fill;
+                            m_ReportApp.m_TablesWindow.Controls.Add(m_ReportApp.im_DINStandardABCDDS);
+                            m_ReportApp.m_TablesWindow.Activate();
+                            //OpenOTSINcAreportTemplateAPP(m_RstProp.m_ReportApp.m_DataMgrFun.resultFilesList[m_RstProp.m_ReportApp.m_DataMgrFun.WorkingResult].FilePath + "\\"
+                            //    + m_RstProp.m_ReportApp.m_DataMgrFun.resultFilesList[m_RstProp.m_ReportApp.m_DataMgrFun.WorkingResult].FileName, "DIN");
+                            break;
+                    }
+
+                    #endregion 第二页选项窗体,分析数据表
+                    break;
+                //分析数据图
+                case DisplayPicutureType.AnalyzeDataChart:
+                    m_ReportApp.m_RibbonFun.SetRibbonButnStatu_ByModule(DisplayPicutureType.AnalyzeDataChart);
+                    #region 第三页选项窗体,分析数据图
+                    m_ReportApp.m_ChartsWindow.Controls.Clear();
+
+                    string m_reportname = "";
+                    string m_str_AxisY = "";
+                    string str_operatonmodule = "";
+
+                    //idx = m_RstProp. m_ReportApp.m_DataMgrFun.GetPropIndexByPropItemName(m_RstProp.SourceGridData.ConditionItemList, OTSIncAReportApp.OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.CALCULATE_CHART_TYPE);
+                    int ChartType = prop.GetComboDownListIndexByItemName(OTS_REPORT_PROP_GRID_ITEMS.CALCULATE_CHART_TYPE);
+                    switch (ChartType)
+                    {
+                        case 0:
+                            m_reportname = resTable["m_reportname1"].ToString();//常用夹杂物分类
+                            m_str_AxisY = resTable["m_str_axisy1"].ToString();
+                            str_operatonmodule = resTable["str_operatonmodule1"].ToString();
+
+                            m_ReportApp.im_EChart_ParticlesComposition = new Control_ECharts.EChart_ParticlesComposition(m_ReportApp, "CommonlyUsedClassify");
+                            m_ReportApp.im_EChart_ParticlesComposition.Dock = DockStyle.Fill;
+                            m_ReportApp.m_reportname = m_reportname;
+                            m_ReportApp.im_EChart_ParticlesComposition.m_str_AxisY = m_str_AxisY;
+                            m_ReportApp.type = "pie";
+                            m_ReportApp.m_ChartsWindow.Controls.Add(m_ReportApp.im_EChart_ParticlesComposition);
+                            m_ReportApp.m_ChartsWindow.Activate();
+                            break;
+                        case 1:
+                            m_reportname = resTable["m_reportname2"].ToString();//颗粒成分
+                            m_str_AxisY = resTable["m_str_axisy2"].ToString();//颗粒数
+                            str_operatonmodule = resTable["str_operatonmodule2"].ToString();//颗粒成分图
+
+                            m_ReportApp.im_EChart_ParticlesComposition = new Control_ECharts.EChart_ParticlesComposition(m_ReportApp, "PComponent");
+                            m_ReportApp.im_EChart_ParticlesComposition.Dock = DockStyle.Fill;
+                            m_ReportApp.m_reportname = m_reportname;
+                            m_ReportApp.im_EChart_ParticlesComposition.m_str_AxisY = m_str_AxisY;
+                            m_ReportApp.type = "pie";
+                            m_ReportApp.m_ChartsWindow.Controls.Add(m_ReportApp.im_EChart_ParticlesComposition);
+                            m_ReportApp.m_ChartsWindow.Activate();
+                            break;
+                        case 2:
+                            m_reportname = resTable["m_reportname3"].ToString();//元素成分
+                            m_str_AxisY = resTable["m_str_axisy3"].ToString();//元素含量
+                            str_operatonmodule = resTable["str_operatonmodule3"].ToString();//元素成分图
+
+                            m_ReportApp.im_EChart_ParticlesComposition = new Control_ECharts.EChart_ParticlesComposition(m_ReportApp, "EComponent");
+                            m_ReportApp.im_EChart_ParticlesComposition.Dock = DockStyle.Fill;
+                            m_ReportApp.m_reportname = m_reportname;
+                            m_ReportApp.im_EChart_ParticlesComposition.m_str_AxisY = m_str_AxisY;
+                            m_ReportApp.type = "bar";
+                            m_ReportApp.m_ChartsWindow.Controls.Add(m_ReportApp.im_EChart_ParticlesComposition);
+                            m_ReportApp.m_ChartsWindow.Activate();
+                            break;
+                        case 3://颗粒尺寸分布图
+                            m_reportname = resTable["m_reportname4"].ToString();//颗粒尺寸分布
+                            m_str_AxisY = resTable["m_str_axisy4"].ToString();//颗粒数
+                            str_operatonmodule = resTable["str_operatonmodule4"].ToString();//颗粒尺寸分布图
+
+                            m_ReportApp.im_EChart_ParticlesComposition = new Control_ECharts.EChart_ParticlesComposition(m_ReportApp, "PSize");
+                            m_ReportApp.im_EChart_ParticlesComposition.Dock = DockStyle.Fill;
+                            m_ReportApp.m_reportname = m_reportname;
+                            m_ReportApp.im_EChart_ParticlesComposition.m_str_AxisY = m_str_AxisY;
+                            m_ReportApp.type = "bar";
+                            m_ReportApp.m_ChartsWindow.Controls.Add(m_ReportApp.im_EChart_ParticlesComposition);
+                            m_ReportApp.m_ChartsWindow.Activate();
+                            break;
+                        case 4:
+
+                            //idx = m_RstProp. m_ReportApp.m_DataMgrFun.GetPropIndexByPropItemName(m_RstProp. SourceGridData.ConditionItemList, OTSIncAReportApp.OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.TRIO_CHART_TYPE);
+                            //string TrioChartType = prop.ConditionItemList[idx].itemVal.ToString();
+                            //List<string> nameList = prop.ConditionItemList[idx].comboDownList;
+                            int index = prop.GetComboDownListIndexByItemName(OTS_REPORT_PROP_GRID_ITEMS.TRIO_CHART_TYPE);
+
+                            str_operatonmodule = resTable["str_operatonmodule5"].ToString();
+
+                            m_ReportApp.im_EChart_Trianglediagram = new Control_ECharts.EChart_Trianglediagram(m_ReportApp);
+                            m_ReportApp.im_EChart_Trianglediagram.Template = "";
+                            m_ReportApp.im_EChart_Trianglediagram.Dock = DockStyle.Fill;
+                            m_ReportApp.m_ChartsWindow.Controls.Add(m_ReportApp.im_EChart_Trianglediagram);
+                            m_ReportApp.m_ChartsWindow.Activate();
+                            break;
+                    }
+                    #endregion 第三页窗体,分析数据图
+                    break;
+            }
+            #endregion
+        }
+
+        #endregion
+
+        #region 属性Grid相关事件
+        /// <summary>
+        /// 属性Grid点击事件
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void PropGrid_Click_1(object sender, EventArgs e)
+        {
+            SourceGrid.Grid ls_gd = (SourceGrid.Grid)sender;
+            ls_gd.Focus();
+            m_ConditionGrid.m_ClickRow = ls_gd.Selection.ActivePosition.Row;
+            m_ConditionGrid.m_ClickColumn = ls_gd.Selection.ActivePosition.Column;
+        }
+
+        /// <summary>
+        /// 主窗体大小改变时,同时改变属性Grid的大小事件
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void OTSPropertyWindow_Resize(object sender, EventArgs e)
+        {
+            if (null != m_ConditionGrid)
+            {
+                m_ConditionGrid.m_PropWindow_X = this.Width;
+                m_ConditionGrid.InitGridTitlet();
+            }
+        }
+        #endregion
+
+    }
+}

+ 1253 - 0
OTSIncAReportApp/1-UI/OTSDisplaySourceGridData/frmReportConditionChoose.resx

@@ -0,0 +1,1253 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABAMMOAADDDgAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHsxFwB5MBcAeC4XCnsy
+        Fzh7MhdyfDQXrHw1FtZ8NhXvfTcV/X03Ff99NxX/fTcV/303Ff99NxX/fTcV/303Ff99NxX/fTcV/303
+        Ff99NxX/fTcV/303Ff99NxX/fTcV/303Ff99NxX/fTcV/303Ff99NxX/fTcV/303Ff99NxX/fTcV/303
+        Ff99NxX/fTcV/303Ff99NxX/fTcV/303Ff99NxX/fTcV/303Ff99NxX/fTcV/303Ff99NxX/fTcV/303
+        Ff99NxX/fTcV/303Ff99NxX/fTcV/303Ff99NxX/fTcV/303Ff99NxX/fTcV/303Ff99NxX/fTcV/303
+        Ff99NxX/fTcV/303Ff99NxX/fTcV/303Ff99NxX/fTcV/303Ff99NxX/fTcV/303Ff99NxX/fTcV/303
+        Ff99NxX/fTcV/303Ff99NxX/fTcV/303Ff99NxX/fTcV/303Ff99NxX/fTcV/303Ff99NxX/fTcV/303
+        Ff99NxX/fTcV/303Ff99NxX8fTYV63w1Fs58MxejezIXaHoxFy13LBcGejEXAHoyFwAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAHkwFwB+NxcAeS8YEnsyF1h8NRaqfTgV4X47E/mCPxT/iEUX/41JG/+RTB7/kk4g/5NP
+        IP+TTyD/k08g/5NOIP+TTiD/k08g/5NOIP+TTiD/k04g/5NPIP+TTyD/k04g/5NPIP+TTiD/k04g/5NP
+        IP+TTyH/k08h/5NPIP+TTiD/k08h/5NPIf+TTiD/k04g/5NPIP+TTyH/k08h/5NPIP+STiD/k04g/5NO
+        IP+TTyD/k04g/5NOIP+TTyD/k08h/5NPIP+TTiD/k08h/5NOIP+TTiD/k08h/5NPIP+TTiD/k04g/5NP
+        IP+TTyH/k08g/5NOIP+TTiD/k08h/5NPIP+TTiD/k04g/5NOIP+TTyD/k08h/5NPIP+TTiD/k04g/5NP
+        IP+TTyD/k04g/5NOIP+TTiD/k08g/5NPIP+TTiD/k04g/5NOIP+TTyD/k08h/5NPIP+TTyD/k08g/5NO
+        IP+TTyD/k04g/5NOIP+TTyD/k04g/5NOIP+TTyH/k08g/5NPIf+TTyH/k04g/5BMHv+MSBr/h0MX/4I+
+        FP9+OhP2fTcV2nw1F5h7MhdEdy0YCnw0FwB5MBcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHcsFwB8NBcAdisYCXszF05+Nxa6gDwT9YZD
+        Ff+TTiD/pVwx/7RnP/+/bUj/w3BL/8dyTv/Ick//yHNP/8hyT//Ic0//yXNQ/8lzT//Ic0//yHJO/8hy
+        Tv/Ick//yHNQ/8hzT//Ick7/yXNP/8lzT//Ic0//yHNP/8lzT//Jc1D/yHNP/8lyT//JdFD/yHJO/8hy
+        Tv/Jck//yHJP/8hzT//Jc0//yHJO/8hyT//Ic0//yHJP/8lyT//Jck//yXNP/8lzT//Ic0//yHNP/8hz
+        T//Ic1D/yXNP/8lzT//Jc0//yXNP/8lzT//Jck//yHJO/8hyTv/Jc0//yHNP/8hyTv/Jc0//yXNP/8hy
+        Tv/Jc0//yXNQ/8lzT//Ic0//yHNP/8hyTv/Ic0//yXNP/8hyTv/Ick//yHNP/8hzT//Ick//yXNP/8hy
+        Tv/Jc0//yHJO/8lzT//Jc1D/yXRQ/8hyT//Ic0//yHJP/8hyT//Jc0//yHJO/8hyTv/Ick//yHNP/8lz
+        UP/Ick7/yHJO/8lzT//JdFD/xnFN/8NwS/+9bUf/sWQ7/6FZLf+QTB3/hEEU/387FO19NhakejIXOXEj
+        GAN7MhcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAB4LhcAgj0YAHowGBx+NxaPgT0U7olHF/+gWCz/umtE/8dxTP/LcEz/yWxH/8VmP//DYjr/wmE5/8Jf
+        N//DYTj/w2E4/8JgOP/CYDj/w2A4/8NhOf/DYTn/wmE4/8JgOP/DYDj/wmA3/8JfN//DYDj/wmA3/8Jh
+        OP/CYDj/wmA4/8NgOP/CYDj/w2E5/8NhOP/CYDj/w2A4/8NhOP/DYTj/wl83/8JgN//DYDj/w2E4/8Nh
+        OP/DYDj/w2A4/8JgOP/DYDj/wl83/8JfN//CYDf/w2E4/8JgOP/DYTn/w2E4/8NgOP/DYTn/w2A4/8Jg
+        OP/CYDj/wl42/8JgOP/CYDj/wmA4/8NgOP/DYDj/w2A4/8NhOP/DYTj/w2E5/8JgOP/CYDj/wmA3/8Nh
+        Of/DYDj/wl83/8JhOP/CYDj/wl83/8JgOP/CYDf/w2A3/8NgOP/DYDj/w2E4/8NhOf/DYTn/w2E4/8Nh
+        OP/CYDj/wmA4/8NhOf/CYDf/wmA4/8JgOP/CYDj/wmA4/8JfN//CYTj/w2E4/8NiOf/DYTn/xGM7/8Zn
+        QP/Ja0b/ynFM/8ZxTf+1aED/m1Un/4dEFf+AOxThfTYXeHkuGBF8NRcAcycXAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfDIYAP//WgB8NBg1gDsVu4VDFf2cVij/vWxG/8px
+        Tf/HaEL/wl83/8BcM//AXTP/wF00/8FdNP/BXjX/wV40/8FeNf/BXjX/wV00/8FeNf/BXjX/wV00/8Fe
+        Nf/AXTT/wV41/8FdNP/BXTT/wV00/8BdNP/BXjX/wV41/8FeNf/BXjX/wV00/8FdNP/BXTT/wV41/8Fd
+        NP/AXTT/wV41/8FeNf/BXTT/wV00/8FdNP/BXTT/wF00/8FeNf/AXDP/wFwz/8BcM//AXDP/wFwz/8Fe
+        NP/AXTT/wV41/8FeNf/BXTT/wV40/8FeNf/BXTT/wV00/8FdNP/AXDP/wF00/8BdNP/BXTT/wV41/8Fe
+        Nf/BXzb/wV00/8BdNP/BXjX/wV00/8BdNP/AXTT/wFwz/8FdNP/BXTT/wF0z/8FeNP/AXTP/wF00/8Bd
+        NP/AXDP/wFwz/8FeNP/BXTT/wV00/8FeNf/BXjX/wV00/8FdNP/BXjX/wV41/8BdNP/BXjX/wV41/8Fd
+        NP/BXTT/wV00/8FdNP/BXjX/wV00/8FeNf/BXjT/wFwz/8BcMv/AXTT/w2E5/8dpRP/Jck7/uGlC/5ZR
+        I/+DQRT4fzkWn3syGB6FPxkAeCwZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AACUVxUAfjcYPIE+FNCMSRr/sWU8/8lxTf/GZ0H/wV41/8FdNP/BXTT/wV41/8FdNP/BXjX/wV00/8Fd
+        NP/BXjX/wF00/8FdNP/BXjX/wV41/8BdNP/BXjX/wV41/8FeNf/BXjX/wV41/8FeNf/BXjX/wV00/8Fe
+        Nf/BXjX/wV00/8FeNf/BXTX/wV41/8FdNP/BXjX/wV41/8FeNf/BXjX/wV41/8FfNv/BXTT/wV41/8Fe
+        Nf/BXTT/wV41/8FeNf/BXjX/wV41/8FeNf/BXjX/wV41/8FeNf/CXzb/wF00/8BdNf/BXzb/wV41/8Fe
+        Nf/BXjX/wV41/8FeNf/BXjT/wV41/8FeNv/AXTT/wV00/8FeNf/BXjX/wV41/8FeNf/BXjX/wV41/8Fe
+        Nf/BXzb/wV41/8FeNf/AXTT/wV41/8FeNf/BXjX/wV00/8BdNP/BXjX/wV00/8FdNP/BXjX/wV41/8Fe
+        Nf/BXzb/wV41/8FeNf/BXjX/wV41/8FeNf/BXjX/wV41/8FeNf/BXjX/wV41/8FeNf/AXTT/wV41/8Fe
+        Nf/BXjX/wV00/8FeNf/AXTT/wF0z/8JfNv/IaUP/x3FN/6lfNP+IRRf9gDwVs341GSKFQBgAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg0AWAIE6GDKDQBPPlE8g/75tR//JbUf/wl82/8Bc
+        M//BXjX/wV41/8FeNf/BXzb/wV41/8FeNf/AXDP/wF00/8FeNf/BXjX/wV41/8BdNP/BXjX/wV41/8Bd
+        NP/BXjX/wV00/8FeNf/BXjX/wV82/8FeNf/AXTT/wV41/8FeNf/BXjX/wV41/8FeNf/BXjX/wl82/8Fe
+        Nf/CXzb/wV00/8FdNP/CXzb/wV41/8FdNP/BXjX/wV41/8FeNf/BXTT/wV41/8FfNv/BXjX/wV00/8Fe
+        Nf/BXjX/wV41/8FeNf/BXjX/wV00/8FfNv/BYDb/wV40/8BdNP/BXzX/wV40/8FeNf/BXzX/wWA2/8Ff
+        Nf/BXzX/wWA1/8FeNP/BXzX/wF40/8FeNP/BXjT/wV81/8FfNv/BXjX/wV41/8BdNP/BXjX/wV82/8Ff
+        Nv/BXTT/wV41/8BdNP/BXjX/wV00/8FeNf/BXjX/wF00/8BdNP/BXjX/wV41/8FeNf/BXzb/wV41/8Fe
+        Nf/BXjX/wV00/8FeNf/BXjX/wF00/8FeNf/BXjX/wF00/8FeNf/BXzb/wV41/8FdNP/BXjX/wV00/8Bc
+        M//DYTj/ym9L/7doQf+OShv/gj4UsoA3GRmDPxcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIVA
+        GACCPRgbg0ETvJdSI//Cbkj/x2dA/8BcMv/BXTT/wV41/8FeNf/AXDP/wV41/8FfNv/BXjX/wV41/8Fd
+        NP/BXjX/wV41/8FdNP/BXTT/wV41/8JfNv/BXjX/wV00/8FfNv/BXjX/wV41/8FfNv/BXjX/wV41/8Fe
+        Nf/BXjX/wV41/8FeNf/BXjX/wV00/8FeNf/BXjX/wV00/8FeNf/AXTT/wV41/8FeNf/BXjX/wV00/8Fe
+        Nf/BXjX/wV00/8FdNP/BXjX/wV00/8FdNP/BXjX/wV82/8JgNv/BXzb/wV81/8BeNP/BXjT/wV81/8Ff
+        Nf/BXjX/wV81/8FfNv/BXzX/wV81/8FfNf/BXzX/wF40/8FfNf/AXzX/wV82/8FfNv/BXjX/wV81/8Ff
+        Nf/BXzX/wWA1/8FeNP/BXjT/wV40/8FfNf/BXjT/wV81/8FeNf/BXzX/wV41/8FeNf/BXjX/wl82/8Fe
+        Nf/BXzb/wV41/8FeNf/BXjX/wV41/8FfNv/BXjX/wV41/8FeNf/BXjX/wF00/8BcM//AXTT/wV41/8Bd
+        NP/BXTT/wV41/8FeNf/BXTT/wV00/8FfNv/BXjX/wV41/8FeNP/BXjT/yGpE/7xrRP+PTRz9gkATmX43
+        GQ6IQhoAAAAAAAAAAAAAAAAAAAAAAAAAAACMSRkAgTkaCYRCE5CUUCD8wm1I/8VkPf/AXDP/wV00/8Fd
+        NP/BXjX/wF00/8FdNP/BXTT/wV41/8BdNP/BXjX/wV41/8FfNv/BXjX/wV41/8FeNf/BXzb/wV41/8Fd
+        NP/BXjX/wV42/8FdNP/BXzb/wV41/8FfNv/BXzb/wV41/8FdNP/BXTT/wV41/8FfNv/BXzb/wV41/8Fd
+        NP/BXTT/wV41/8FeNf/BXzb/wV41/8FeNf/BXTT/wV40/8FeNf/BXjX/wV41/8BeNf/BXjT/wV81/8Ff
+        Nf/BXzX/wV81/8FfNv/BXjX/wV81/8FfNv/BXzX/wV82/8FgN//BXzX/wWA2/8JhN//BYDf/wV81/8Fe
+        Nf/BXzb/wWA2/8FgNv/BYDb/wV81/8FgNv/CYDf/wWA2/8FeNf/BXzb/wV82/8FfNv/BXzb/wV81/8Be
+        NP/BXjX/wV41/8JfNv/BXzX/wV81/8FeNf/BXTT/wV40/8FfNv/BXzb/wFwz/8FeNf/AXjX/wV41/8Fe
+        Nf/BXjX/wl82/8FdNP/AXTT/wV41/8BcM//BXjX/wV00/8FeNf/CXzb/wV00/8FeNf/BXjX/wV82/8Fe
+        Nf/BXjX/wV82/8FfNf/AXTT/x2hC/7tqQ/+OSxr1hEEUbIo/IQKaUyQAAAAAAAAAAAAAAAAAAAAAAKhW
+        LwCGRBRVj0sc8bxpQ//GZD3/wFwz/8BdNP/BXjX/wV41/8FeNf/BXjX/wV41/8FeNf/BXjX/wV00/8Fe
+        Nf/BXTT/wV41/8FfNv/BXzb/wV41/8FeNf/BXjX/wV00/8FdNP/BXjX/wV00/8FeNf/BXjX/wV82/8Ff
+        Nv/BXzb/wV41/8BdNP/BXzb/wV41/8FeNf/BXzX/wV00/8BdNP/BXTT/wV41/8FeNf/BXTT/wV41/8Fe
+        NP/BXjX/wV81/8FfNf/AXjT/wV81/8FfNf/BYDb/wmA3/8FgNv/BYDb/wV81/8FfNf/CYDb/wV81/8Jg
+        Nv/CYDb/wmE3/8JfNf/CYDb/wmE3/8JgNv/BXzX/wmA1/8JgNv/CYDb/wV81/8JfNf/CYDb/wmA2/8Jg
+        Nv/CYDX/wmE2/8FgNv/CYDb/wmE3/8JhN//BXzX/wWA2/8FfNv/BXzb/wV82/8FfNf/AXzX/wV82/8Ff
+        Nf/BXzX/wV40/8FfNv/BXjX/wV00/8FeNf/BXjX/wV41/8JfNv/BXjX/wV00/8FeNf/BXzb/wV41/8Fe
+        NP/BXjX/wV41/8FfNv/AXTT/wF00/8BdNP/BXjX/wV41/8FeNf/BXjX/wl82/8FeNf/BXTP/yGhB/7Rl
+        Pf+KRxfdh0QWNYdHFQAAAAAAAAAAAAAAAACLSBcAiEcWHohHFsqwYjn/x2dA/8BdM//BXjX/wFwz/8Fe
+        Nf/BXTT/wF00/8FdNP/BXjX/wV41/8BdNP/AXTT/v100/75bMv+/XTT/v100/79dNf+/XTT/vlwz/79d
+        Nf++XTT/v100/79dNf+/XTT/v100/79eNf+/XjX/v100/79eNv+/XTT/vlwz/79dNP++XTT/vl00/79e
+        Nf+/XTT/v142/79eNf+/XjT/v100/75eNP+/Xzb/v181/79eNf+/Xzb/v182/79eNf+/XzX/v181/79f
+        Nf/AYDf/wGA2/8BfNf+/XzX/v180/8BfNf+/XzX/wF81/8BgNf/AYDX/wGA1/8BhN//AYDb/v2A1/8Bh
+        Nv/AYDb/wGA2/8BfNf/AXzX/wGA1/8BhN//AYDX/wGA1/8BgNf/AXzX/wGA2/8BgNf/AYDb/wGA2/8Bf
+        Nf+/XjT/wF81/8BgNv+/Xzb/wGA2/8BgNv/AYDf/wGA3/75eNP++XjT/v182/79eNf+/XjX/v141/75d
+        NP+/XTT/v100/79dNP++XDP/v100/79dNP+/XTT/v141/79dNP+/XTT/v100/79dNf+/XTT/v100/79d
+        NP+/XTT/wF00/8FeNf/AXTT/wV41/8FeNP/BXTT/x2pE/6VbMP+GRRSqjEoYDdiCXgAAAAAAAAAAAI5J
+        GQKGRROBnVYp/sZqRP/BXjX/wV41/8FdNP/BXTT/wV41/8FdNP/BXjX/wV41/8FeNf/AXjX/v100/75d
+        NP+9XDT/uloy/7laMv+3WTL/tlgx/7dZMv+2WTL/t1ky/7ZZMv+2WDH/t1gy/7dZM/+2WTL/tlky/7dZ
+        Mv+3WTL/tlgx/7ZYMv+3WTP/t1ky/7ZYMv+2WDH/tlgx/7ZZMf+2WjL/t1oy/7daMv+2WTL/t1s0/7da
+        M/+2WjL/t1sz/7daM/+4WzP/t1oy/7daMv+3WzP/t1oy/7dbM/+4XDT/t1sy/7hcM/+4XDP/t1ox/7db
+        Mv+3WzL/t1wz/7hcM/+3XDP/uFwz/7hcM/+3XDT/t1wz/7dbMv+3XDP/t1wz/7hcNP+3WzP/t1wz/7dc
+        M/+4XDT/t1sy/7dbM/+4XTT/uFwz/7dcM/+3XDP/t1sy/7hcM/+4XDP/t1sy/7dbMv+4WzP/uFsz/7hb
+        M/+4XDT/t1oz/7daM/+2WjP/t1sz/7ZaM/+2WjL/tlky/7ZZMf+2WTH/tlkx/7ZZMv+3WTL/t1ky/7ZZ
+        Mv+2WTL/tlky/7ZYMf+3WTL/t1ky/7hZMv+5WTL/u1sz/71cNP+/XTX/wF42/8BeNf/BXjX/wV41/8Ff
+        Nf/DXzb/wmlD/5RPIPWGRRNbajAAAAAAAACWUSEAiEYUK41KGd26ZT7/xGE5/8FeNf/BXjX/wF00/8Fe
+        Nf/BXjX/wF00/8FeNf/BXjX/wV41/8BeNf++XTT/uloz/7ZYMv+wVjH/rFQv/6lTL/+nUS7/plAt/6dR
+        Lv+nUS7/p1Eu/6ZQLf+nUi7/p1Eu/6ZQLf+nUC3/p1Et/6ZQLf+nUS7/p1Eu/6dSL/+mUS3/plEt/6dS
+        Lv+mUS3/p1Iu/6ZRLf+nUi7/p1Eu/6dSL/+nUi7/p1Iu/6hSLv+oUy7/qFIu/6hTL/+oUy7/qFQu/6hU
+        Lv+oVC//qFQv/6hUL/+oVC//qFQv/6hUL/+oUy7/qFUw/6dUL/+oVDD/qFQw/6hUL/+nVC//qFUw/6hV
+        MP+oVC//p1Qv/6hUL/+nVC//p1Qv/6dUL/+nVC//p1Qv/6hVMP+oVTD/qFUw/6hVMP+oVTD/qFUw/6hU
+        L/+oVC//qFMv/6dTLv+nUy3/qFQu/6hUL/+oVC//qFQu/6hUL/+oUy//qFMv/6hTLv+nUi7/plEt/6dS
+        Lv+nUy//p1Iv/6dSLv+nUi7/p1Iu/6dSLv+nUi7/p1Eu/6dRLv+nUS7/p1Eu/6dRLf+pUi7/q1Mu/7BW
+        Mf+1WDL/uVoz/71bM/+/XTT/wV41/8FeNf/BXzb/wV41/8BcM//GZDz/sGE4/4lHFsCJRxUTnlQlAKBY
+        KwKGRRN5n1cq/sVmP//BXTT/wFwz/8FeNf/BXjX/wV41/8FeNf/BXjX/wV41/8FeNf/BXTT/v141/7tc
+        NP+0WDL/q1Mu/6FNK/+ZSin/k0Yn/5BFJv+ORCX/jkQm/49FJv+PRSf/j0Um/49EJv+PRCb/j0Qm/49E
+        Jv+PRCX/j0Qm/49EJf+PRSb/j0Ym/49GJ/+PRSb/jkUm/45EJv+PRyj/j0cn/49GJ/+PRib/j0Yn/49G
+        Jv+QRyf/kEcn/5BHJ/+QRyf/j0cn/5BHJ/+QRyf/kEcn/5BIKP+QRyj/j0cn/5BHKP+PRyj/kEgo/5BI
+        KP+QSCj/kEgo/5BHKP+QRyj/kEgo/5BIKP+PRyj/kEgo/5BIKP+QSCj/kEgo/5BIKf+QSCn/kEgo/5BH
+        KP+QSCf/kEkp/5BIKf+QSCj/kEco/5BIKf+QSCn/kEco/5BIKP+QRyj/kEgo/5BHKP+QSCj/kEco/5BI
+        KP+QSCj/kEcn/5FIKP+QRyf/kEcm/5BHJ/+QRif/kEcn/5BGJ/+QRyf/kEco/49GJ/+PRij/j0Ym/49H
+        J/+PRSb/j0Yn/5BGJ/+QRSb/kkYn/5VIKP+bSyn/pE8s/6xTLv+1WDH/ulkx/75dNP/BXjX/wV41/8Fe
+        Nf/BXjX/wV40/8FdNP/DZ0H/llEj9YZFFFOyXzUAiUcVFotKGca1Yjn/xGA3/8FeNf/BXjX/wF00/8Fe
+        Nf/BXjX/wV41/8FeNf/BXjX/wV41/8FeNf++XDT/t1ky/65WMv+pYkX/oGVM/5ZfSf+QXEf/jFlF/4tZ
+        Rf+LWUX/illF/4pZRf+KWUX/ilhE/4pYRP+JWET/illF/4pYRP+KWET/iVlE/4lYRP+JWUT/illF/4lZ
+        Rf+JWET/iVhE/4lZRP+JWUT/iVlE/4lZRP+JWEP/iVhD/4lYQ/+JWEP/iFhD/4lYQ/+IWEP/iFhD/4hY
+        RP+IWEP/iFhD/4hXQ/+IV0P/iFdD/4hYQ/+IV0L/h1dC/4dXQv+IWEP/h1dC/4dXQf+IV0L/h1hC/4dX
+        Qv+HV0L/h1dB/4ZXQf+GVkH/hlZB/4ZWQf+FVUD/hVVA/4VVQP+FVUD/hVQ//4RUPv+EUz7/hFQ//4RU
+        P/+DUj3/g1M+/4NTPv+DUz7/g1I+/4JSPf+CUj3/glI9/4JRPP+BUTz/gVE8/4FQO/+BUDv/gVA7/4BQ
+        O/+AUDv/gE86/4BPOv+ATzr/f086/39OOv9+Tjn/fk45/35NOf9+TTj/fk04/39NOf+BTjn/hlA6/41T
+        PP+XWUD/o1Y4/7BUL/+5WjP/vl01/8BeNf/AXTT/wV41/8FeNf/BXjX/wFwz/8RhOf+qXTL/iUgWopFL
+        GwaIRhRNllEi7MFlPf/BXTT/wV82/8FeNf/AXTT/wV00/8FeNf/BXjX/wV82/8FeNf/BXjX/wF41/71c
+        NP+1WDL/qFY0/76cjv/Mwb3/yb65/8i9uP/HvLj/xry3/8a7t//Gu7b/xbq2/8W6tf/EubX/xLm0/8O4
+        tP/DuLP/w7ez/8K3sv/Ct7L/wbax/8G1sf/AtbD/wLWw/8C0r/+/tK//v7Ou/76zrv++sq7/vrKt/72y
+        rf+9saz/vLGs/7ywq/+8sKv/u6+q/7uvqv+6r6n/uq6p/7quqf+5raj/ua2o/7msp/+4rKf/uKym/7er
+        pv+3q6b/t6ql/7eqpf+2qqT/tqmk/7WppP+1qaT/taij/7Soo/+0p6L/s6ah/7KloP+xpJ//sKOe/6+i
+        nf+uoZz/raGb/6ygmv+rn5n/qp6Z/6qdmP+pnJf/qJuW/6ealf+mmZT/pZiT/6SXkv+jl5L/opaR/6KV
+        kP+hlI//oJOO/5+Tjv+eko3/nZGM/5yQi/+bj4r/m46K/5qOif+ZjYj/mIyH/5eLh/+Xi4b/loqF/5WJ
+        hP+UiIT/lIiD/5OHg/+ShoL/koaB/5KFgf+ShYH/koaC/5R7cf+fWj7/rlQu/7laM/++XTT/wV41/8Fe
+        Nf/BXTT/wV00/8FeNf/BXjX/wl00/7tjO/+PTBzZiEYUKIhGFImkWS39xGI6/8FdNP/AXTT/wV00/8Ff
+        Nv/AXTT/wV41/8FeNf/BXjT/wV41/8FeNf/BXjX/vFw0/7NXMv+kVDP/waWa/9bRz//Uzsz/1M7M/9PN
+        y//Tzcr/0szK/9LMyf/Ry8n/0crI/9DKx//Qysf/z8nG/8/Ixv/OyMX/zsfF/87HxP/NxsP/zcbD/8zF
+        w//MxcL/y8TB/8vEwf/Kw8D/ysPA/8nCv//Jwr//yMG+/8jBvv/IwL3/x8C9/8e/vP/Gv7z/xr67/8W+
+        u//Fvbr/xL26/8S8uf/EvLn/w7y4/8O7uP/Cu7f/wrq3/8G6tv/Bubb/wbm1/8C4tf/AuLX/v7e0/7+3
+        tP+/t7P/vraz/762s/+9tbL/vbSx/7yzsP+7sq//urGu/7mwrf+4r6z/t66r/7atqv+1rKn/tKuo/7Oq
+        p/+yqab/sail/7CnpP+vpqP/rqWi/62kof+so6D/q6Kf/6qhnv+poJ3/qJ+c/6efnP+mnpv/pZ2a/6Sc
+        mf+jm5j/opqX/6GZlv+gmJX/n5eV/56WlP+dlpP/nZWS/5yUkf+bk5H/mpKQ/5mSj/+YkY//mJCO/5eQ
+        jv+Ug3z/lVtD/6RQLf+yVzH/uloz/79dNP/AXTT/wV41/8FfNv/AXTT/wV00/8FfNv/BXTT/w2M7/5tT
+        JfOJRxVdikkYvLBdM//EYDj/wF00/8FdNP/BXjX/wV41/8BdNP/BXjX/wV82/8FfNv/AXDP/wV41/8Fe
+        Nf+8XDT/sFQv/6BSMv/ApJn/1tHP/9XPzP/Uzsv/1M7L/9PNyv/TzMr/0szJ/9LLyf/Ry8j/0crI/9DK
+        x//Qycb/z8nG/8/Ixf/OyMX/zsfE/83GxP/NxsP/zMXD/8zFwv/LxMH/y8TB/8vDwP/Kw8D/ysK//8nC
+        v//Jwb7/yMG+/8jAvf/HwL3/x7+8/8e/vP/Gvrv/xr67/8W9uv/Fvbr/xLy5/8S8uf/Du7j/w7u4/8O7
+        t//Curf/wrq2/8G5tv/BubX/wbi1/8C4tf/At7T/v7e0/7+3s/+/trP/vray/761sv++tbL/vbSx/7y0
+        sP+7s6//urKu/7mxrf+4sKz/t6+r/7auqv+1ran/tKyo/7Orp/+yqqb/saml/7CopP+vp6P/rqai/62l
+        of+spKD/q6Of/6qinv+poZ7/qKCd/6ifnP+nnpv/pp2a/6Wcmf+km5j/o5qX/6KZl/+hmZb/oJiV/5+X
+        lP+elpP/nZWS/5yUkv+bk5H/m5OQ/5qSj/+akpD/lIN9/41XQf+aSyr/qlMu/7ZaMv+9XDT/v100/8Bd
+        NP/BXjX/wV41/8FeNf/BXjX/wV41/8FdNP/EYTn/plou/4hIFZGQTR3it181/8JdNP/BXjX/wV41/8Fd
+        NP/BXjX/wV41/8FeNf/BXjX/wV41/8FdNP/BXTT/wV41/7xbM/+wVTD/oFIy/8Clmv/X09H/1tDN/9XP
+        zf/Vz8z/1M7M/9TOy//Tzcv/08zK/9LMyf/Sy8n/0cvI/9HKyP/Qysf/0MnG/8/Jxv/PyMX/zsjF/87H
+        xP/NxsT/zcbD/83Gw//MxcL/zMTC/8vEwf/Lw8H/ysPA/8rCv//Jwr//ycG+/8jBvv/IwL3/x8C9/8e/
+        vP/Hv7z/xr67/8a+u//Fvbr/xb26/8S9uf/EvLn/xLy4/8O7uP/Du7f/wrq3/8K6tv/Bubb/wbm2/8G5
+        tf/AuLX/wLi0/7+3tP+/t7P/v7az/762s/++tbL/vbWy/721sf+8tLD/vLOw/7uyr/+6sa3/ubCs/7iv
+        q/+3rqr/tq2p/7WsqP+0q6f/s6qm/7Kppf+xqKX/sKej/6+mov+upaL/raSh/6yjoP+rop//qqGe/6mg
+        nf+on5z/p56b/6admv+lnJn/pJuY/6ObmP+impf/oZmW/6CYlf+fl5T/n5aT/56Vk/+dlZL/nJWS/5aG
+        gP+LV0L/lUko/6dSLv+yVzH/u1w0/75dM//AXjT/wV00/8FeNf/BXjX/wV41/8FeNf/BXjX/wF00/8Rf
+        N/+vXDL/i0kYupNPH/m7YDf/wl41/8BdNP/BXjX/wl82/8FeNf/BXjX/wV00/8FeNf/BXTT/wF00/8Fe
+        Nf/AXTT/vFsz/7BVMP+fUjL/waWb/9jU0v/X0c//1tDO/9bQzv/Vz83/1c/M/9TOzP/Uzsv/083L/9PN
+        yv/SzMn/0svJ/9HLyP/Rysj/0MrH/9DJx//Pycb/z8jG/8/Ixf/Ox8T/zcfE/83Gw//NxsP/zMXC/8zF
+        wv/LxMH/y8TB/8rDwP/Kwr//ycK//8nBvv/Jwb7/yMG9/8jAvf/Hv7z/x7+8/8a/u//Gvrv/xb26/8W9
+        uv/Fvbn/xLy5/8S8uP/Du7j/w7u4/8K6t//Curf/wbm2/8G5tv/BubX/wLi1/8C4tP+/t7T/v7e0/7+2
+        s/++trP/vray/761sv+9tbH/vbSx/7yzsP+7sq//urGu/7mwrf+4r6z/t66r/7atqv+1rKn/tKuo/7Oq
+        p/+yqab/sail/7CnpP+vpqP/rqWi/62kof+so6D/q6Kf/6qhnv+poJ3/qJ+c/6eem/+mnZr/pZ2Z/6Sc
+        mf+jm5j/opqX/6GZlv+gmJX/n5eU/5+Ylf+YiIH/i1lC/5VKKf+mUi7/s1ky/7tcM/++XjX/wF82/8Ff
+        Nf/BXzX/wV81/8FfNv/BXjX/wV41/8FdNP/BXTT/xF82/7ReNP+OTRvVlVAg/75gN//BXTT/wFwz/8Je
+        Nf/BXzb/wV41/8FeNf/BXTT/wV41/8FeNf/BXjX/wV41/8BeNf+8WzP/r1Qv/59RMf/Bppz/2dXT/9jS
+        0P/X0s//19HP/9bRzv/W0M7/1dDN/9XPzP/Uzsz/1M7L/9TNy//Tzcr/0szK/9LMyf/Sy8n/0cvI/9HK
+        x//Qycf/0MnG/8/Jxv/PyMX/zsfF/87HxP/NxsT/zcbD/8zFwv/MxcL/y8TB/8vEwf/Kw8D/ysPA/8nC
+        v//Jwr//ycG+/8jBvv/IwL3/x8C8/8e/vP/Gv7z/xr67/8W+uv/Fvbr/xb26/8S8uf/EvLn/w7u4/8O7
+        uP/Durf/wrq3/8K5tv/Bubb/wbm1/8C4tf/AuLT/wLe0/7+3tP+/t7P/vraz/762sv++tbL/vbWx/720
+        sf+8s7D/u7Ov/7qxrv+5sa3/uK+s/7euq/+2rar/tayp/7SrqP+zqqf/sqmm/7Gopf+wp6T/r6aj/66l
+        ov+tpKH/rKOg/6ujn/+qoZ7/qaGd/6ignP+nn5z/pp6b/6Wdmv+knJn/pJuY/6Oal/+impj/m4qD/4xZ
+        Q/+WSyr/plMu/7NZMv+7XDT/v141/8FgNv/AXzX/wV81/8BeNP/BXjT/wV40/8FdNP/BXjX/wV41/8Fe
+        Nf/CXTT/t140/5FOHeaXUSH/v2E4/8FdNP/BXTT/wV41/8FeNf/BXjX/wF00/8FdNP/AXTT/wV41/8Jf
+        Nv/BXjX/wV82/7xcNP+vVC//oFMz/8Konf/b1tX/2dPR/9nT0f/Y09D/2NLQ/9fRz//X0c//1tDO/9bQ
+        zf/Vz83/1M7M/9TOzP/Uzsv/083K/9PMyv/SzMn/0svJ/9HLyP/Rysf/0MrH/9DJx//Pycb/z8jF/87H
+        xf/Ox8T/zcfE/83Gw//MxcP/zMXC/8zEwv/LxMH/y8PA/8rDwP/Kwr//ycK//8nBvv/Iwb7/yMC9/8fA
+        vf/Hv7z/x7+8/8a+u//Gvrv/xb66/8W9uv/EvLn/xLy5/8O8uP/Du7j/w7u3/8K6t//Curb/wbm2/8G5
+        tv/BuLX/wLi1/8C3tP+/t7T/v7ez/7+2s/++trL/vray/761sv+9tbH/vLSw/7uzr/+6sq7/ubGt/7iw
+        rP+3r6v/tq6q/7Wtqf+1rKj/s6un/7Kqpv+xqaX/sKik/6+no/+upqL/raWh/6ykoP+so6D/qqKe/6mh
+        nv+poJ3/qJ+c/6eem/+mnZr/pZ2a/52Nhv+NWkP/lUsq/6dVMP+zWjL/u141/79gNv/BYjf/wmE2/8Jf
+        Nf/CYDf/wWA2/8FgNv/BXzb/wV81/8FeNf/BXzb/wV41/8NfNv+5XzX/kk4e7JdRIP+/YDf/wV00/8Fe
+        Nf/BXTT/wV41/8BdNP/BXjX/wV41/8FeNf/BXjX/wV41/8FfNv/BXzb/u1sz/69UL/+gUjL/w6ie/9zY
+        1v/a1dP/2tTS/9nU0f/Z09H/2NPQ/9jS0P/X0c//19HO/9bQzv/W0M3/1c/N/9XPzP/Uzsz/1M7L/9PN
+        y//TzMr/0szJ/9LMyf/Ry8j/0crI/9DKx//Qycf/z8nG/8/Ixf/OyMX/zsfE/83HxP/NxsP/zcbD/8zF
+        wv/MxcL/y8TB/8vDwf/Kw8D/ysK//8nCv//Jwr7/yMG+/8jAvf/HwL3/x7+8/8e/vP/Gvrv/xr67/8W+
+        uv/Fvbr/xL25/8S8uf/DvLj/w7u4/8O7uP/Curf/wrq2/8K5tv/Bubb/wbm1/8C4tf/AuLT/wLe0/7+3
+        s/+/trP/vraz/761sv++tbL/vbWx/7y0sf+8s7D/u7Kv/7qxrv+5sK3/uK+s/7euqv+2ran/tayo/7Sr
+        p/+zqqb/sqmm/7GopP+wp6T/r6aj/66lov+tpKH/rKOg/6uin/+qoZ7/qaCd/6ignf+gkIn/j1xF/5ZM
+        K/+nVC//s1sz/7teNf+/YDb/wGA2/8JhNv/CYTX/wmE2/8JhNv/CYDb/wmA2/8FgN//BXzb/wV81/8Ff
+        Nf/BXzX/wl41/7lfNP+STx7tl1Eg/79fNv/BXTT/wV41/8FdNP/BXjX/wV41/8FeNf/BXzb/wV41/8Fe
+        Nf/BXTT/wV41/8BeNf+8XDT/r1Qv/59RMf/EqZ7/3dnX/9vW1P/b1tP/2tXT/9rU0v/Z1NL/2dPR/9jT
+        0P/Y0tD/19LP/9fRz//W0c7/1tDO/9XPzf/Vz8z/1M7M/9TOy//Tzcv/083K/9LMyf/SzMn/0cvI/9HK
+        yP/Qysf/0MnH/9DJxv/PyMb/zsjF/87HxP/Ox8T/zcbD/83Gw//MxcL/zMXC/8vEwf/LxMH/ysPA/8rD
+        v//Jwr//ycK//8jBvv/IwL3/yMC9/8fAvf/Hv7z/xr+7/8a+u//Fvrv/xb26/8S9uf/EvLn/xLy5/8O7
+        uP/Du7j/wrq3/8K6t//Curb/wbm2/8G5tf/AuLX/wLi0/8C3tP+/t7T/v7az/762s/++trL/vrWy/721
+        sf+9tLH/vLOw/7uyr/+6sa7/ubCt/7ivrP+3rqv/tq2q/7Wsqf+0q6j/s6qn/7Kppv+xqKX/sKek/6+m
+        o/+upaL/raSh/6yjoP+ro6D/o5OM/49dR/+VSyr/qFYx/7RcNP+8XzX/v2A2/8FiOP/BYjf/wmE3/8Ji
+        Nv/CYDX/wWA1/8JgNf/CYDX/wmA2/8FgNv/BYDf/wV81/8FeNf/DXzb/uF4z/5NPHu2YUSH/v183/8Fd
+        NP/BXjX/wV41/8FeNf/BXjX/wV41/8FeNf/BXjX/wF00/8FdNP/BXjX/wF41/7xbM/+vVC7/oFIy/8Wq
+        n//e2tn/3NfV/9zX1f/b1tT/29bU/9rV0//a1NL/2dTS/9nU0f/Y09H/2NLQ/9fSz//X0c//19HO/9bQ
+        zv/Vz83/1c/M/9TOzP/Uzsv/083L/9PNyv/SzMr/0szJ/9LLyf/Ry8j/0crH/9DJx//Qycb/z8jG/8/I
+        xf/Ox8T/zsfE/83GxP/NxsP/zMXC/8zFwv/LxMH/y8TB/8rDwP/Kw8D/ysK//8nCv//Jwb7/yMG+/8jA
+        vf/HwL3/x7+8/8a/vP/Gvrv/xr67/8W9uv/Fvbr/xLy5/8S8uf/Du7j/w7u4/8K6t//Curf/wrq2/8G5
+        tv/BubX/wLi1/8C4tP/At7T/v7e0/7+3s/++trP/vray/761sv+9tbL/vbSx/7y0sP+7sq//urKu/7mw
+        rf+4r6z/t66r/7atqv+1rKn/tKuo/7Oqp/+yqab/sail/7CnpP+vpqP/r6ek/6WVjv+QXkf/lkwr/6dV
+        MP+0XDT/vF82/8BiOP/CYzj/w2M4/8NjOP/CYjj/wmI3/8JiN//CYTf/wmE2/8JhNv/CYDX/wmA2/8Ff
+        Nf/CYDf/wV41/8NfNv+4XjP/k08f7ZhSIf+/Xzf/wl41/8FeNf/BXjX/wV41/8FdNP/BXTT/wV41/8Ff
+        Nv/AXTT/wF00/8BdNP/AXTT/vFw0/7BWMP+gVDP/xaug/9/b2v/e2df/3djW/9zX1f/c19X/3NbU/9vW
+        1P/a1dP/2tXS/9nU0v/Z1NH/2dPR/9jS0P/X0s//19LP/9fRzv/W0M7/1tDN/9XPzf/Vz8z/1M7M/9TN
+        y//Tzcr/08zK/9LMyf/Sy8n/0cvI/9HKx//Qysf/0MnG/8/Jxv/PyMX/zsfF/87HxP/Nx8T/zcbD/8zF
+        wv/MxcL/zMTC/8vEwf/Lw8D/ysPA/8rCv//Jwr//ycG+/8jBvv/IwL3/x8C9/8e/vP/Gv7z/xr67/8a+
+        u//Fvbr/xb26/8S8uf/EvLn/xLy4/8O7uP/Du7f/wrq3/8K6tv/Bubb/wbm2/8G4tf/AuLX/wLi0/7+3
+        tP+/t7P/v7az/762s/++trL/vbWy/721sf+8tLD/u7Ov/7uyrv+5sa3/uLCs/7evq/+2rqr/tq2p/7Ss
+        qP+0q6f/sqqm/7Kqp/+ol5D/kV9H/5ZNK/+oVjD/tV41/71hN//BZDj/wWM4/8NkOP/DYzj/w2Q4/8Nj
+        OP/CYjj/wmI4/8JiOP/CYTb/wWA1/8JhNv/CYTb/wmE2/8JgNv/BXzX/wl41/7heNP+UUB/tmVIh/79g
+        N//BXTX/wF00/8FeNf/BXjX/wV41/8FeNf/BXTT/wV41/8FeNf/BXjX/wV41/8BdNP+8XDP/r1Uv/6BT
+        M//GrKL/4N3b/97a2P/e2df/3tnX/93Y1v/d2Nb/3NfV/9zX1f/b1tT/29XT/9rV0//a1NL/2dTS/9nT
+        0f/Y09D/2NLQ/9fSz//X0c//1tDO/9bQzf/Vz83/1c/M/9TOzP/Uzsv/083K/9PMyv/SzMn/0svJ/9HL
+        yP/Rysj/0MrH/9DJx//Pycb/z8jF/87Ixf/Ox8T/zsfE/83Gw//NxcP/zMXC/8zFwv/LxMH/y8PA/8rD
+        wP/Kw8D/ycK//8nBvv/Iwb7/yMG+/8jAvf/Hv7z/x7+8/8a+u//Gvrv/xb66/8W9uv/Evbn/xLy5/8S8
+        uf/Du7j/w7u3/8K6t//Curf/wrm2/8G5tv/BuLX/wLi1/8C4tP/At7T/v7ez/7+2s/++trL/vray/761
+        sv+9tbH/vLSx/7yzsP+7sq//urGu/7mwrf+4r6z/t66q/7atqv+1rar/q5uT/5JhSf+WTSv/qFcx/7Ve
+        Nf+9YTf/wWM4/8JlOf/DZTn/w2Q5/8NkOP/CYzj/w2M3/8NjOP/CYzn/wmM4/8FhNv/BYDb/wmE2/8Jg
+        Nf/DYjf/w2E3/8JfNf/DXzb/uF81/5RQH+2ZUyL/v2A2/8FeNf/BXTT/wF00/8FeNf/BXjX/wV41/8Bd
+        NP/BXjX/wV82/8FeNf/BXjT/wF80/7xdNP+vVjD/oFQz/8eto//h3t3/4NvZ/9/b2f/f2tj/3tnX/97Z
+        1//d2Nb/3djW/9zX1f/c19X/29bU/9vW0//a1dP/2tTS/9nU0v/Z09H/2NPQ/9jS0P/X0s//19HP/9bR
+        zv/W0M7/1c/N/9XPzP/Uzsz/1M7L/9PNy//Tzcr/0szK/9LMyf/Ry8j/0crI/9HKx//Qycf/0MnG/8/I
+        xv/OyMX/zsfF/87HxP/NxsP/zcbD/8zFwv/MxcL/y8TB/8vEwf/Kw8D/ysPA/8nCv//Jwr//yMG+/8jA
+        vf/IwL3/x8C8/8e/vP/Gv7v/xr67/8W+uv/Fvbr/xb25/8S8uf/EvLn/w7u4/8O7uP/Curf/wrq3/8K6
+        tv/Bubb/wbm1/8C4tf/AuLT/wLe0/7+3s/+/trP/vraz/762sv++tbL/vbWx/720sf+8s7D/u7Kv/7qx
+        rv+5sK3/uLCt/66elv+UYkv/l08t/6hYMv+1XzX/vWI2/8FkOP/DZTn/xGY6/8RlOf/EZTn/w2Q4/8Nj
+        OP/DZDj/w2M4/8NkOf/CYjb/wmM4/8JiN//BYDb/wmE3/8FgNf/CYTb/wmI3/8RhN/+6YDX/lVEg7ZlT
+        Iv+/YDf/wV00/8FeNf/BXTT/wl82/8FeNf/BXjX/wV00/8FeNf/BXzb/wF00/8FfNf/AXjT/vF01/7BX
+        Mf+gVDT/yK6j/+Lf3v/h3Nr/4Nza/+Db2f/f29n/39rY/97Z2P/e2df/3djW/93Y1v/c19X/3NfV/9vW
+        1P/b1tT/2tXT/9rU0v/Z1NL/2dPR/9jT0f/Y0tD/19LP/9fRz//W0c7/1tDO/9XPzf/Vz8z/1c7M/9TO
+        y//Tzcv/083K/9PMyv/SzMn/0svI/9HLyP/Rysf/0MrH/9DJxv/PyMb/z8jF/87Hxf/Ox8T/zcbD/83G
+        w//MxcL/zMXC/8vEwf/LxMH/ysPA/8rDwP/Kwr//ycK//8nBvv/Iwb7/yMC9/8fAvf/Hv7z/xr+7/8a+
+        u//Gvrv/xb26/8W9uv/EvLn/xLy5/8O7uP/Du7j/wrq3/8K6t//Curb/wbm2/8G5tf/AuLX/wLi1/8C3
+        tP+/t7T/v7ez/762s/++trL/vrWy/721sv+9tLH/vLSw/7y0sf+xoZn/lWRM/5dQLP+pWTL/tl82/75j
+        OP/BZDj/w2Y6/8RnOv/EZzr/xGY6/8RmOv/EZTn/w2U5/8NlOf/CYzf/w2Q5/8NjOP/DYzj/wmI4/8Ji
+        OP/CYjf/wWA1/8JhNv/CYTX/xGI3/7lfNP+VUR/tmlMi/79gN//CXjX/wV00/8BdNP/BXTT/wF00/8Fd
+        NP/BXTX/wV41/8FeNf/BXjT/wF41/8FgNv+9XjX/sFcx/6FVNP/Ir6T/5OHf/+Le3P/h3dv/4dzb/+Dc
+        2v/g29r/39vZ/9/a2P/e2tj/3tnX/93Z1//d2Nb/3NfV/9zX1f/c1tT/29bU/9rV0//a1dL/2tTS/9nU
+        0f/Z09H/2NLQ/9fS0P/X0c//19HO/9bQzv/V0M3/1c/N/9XPzP/Uzsz/1M3L/9PNyv/TzMr/0szJ/9LL
+        yf/Ry8j/0crH/9DKx//Qycb/z8nG/8/Ixf/OyMX/zsfE/83GxP/NxsP/zMXC/8zFwv/MxMH/y8TB/8rD
+        wP/Kw8D/ysK//8nCv//Jwb7/yMG+/8jAvf/HwL3/x7+8/8a/vP/Gvrv/xr67/8W9uv/Fvbr/xLy5/8S8
+        uf/DvLj/w7u4/8O7t//Curf/wrq2/8G5tv/BubX/wLi1/8C4tf/AuLT/v7e0/7+3s/+/trP/vraz/761
+        sv++t7P/s6Ob/5VlTf+XUS3/qVoz/7ZhNv++ZTj/wmY5/8RnOv/EZzr/xGc7/8NlOf/EZjn/xGY6/8Rm
+        Ov/EZTn/xGU5/8NkOP/DZTn/w2M4/8NjOP/DYzf/wmI3/8JiN//CYjf/wmI3/8JjN//EYjf/uWA1/5ZS
+        IO2bVCP/v182/8FdNP/BXjX/wV82/8BdNP/BXzb/wV41/8BdNP/BXjX/wV81/8BeNP/BXzb/wV81/71e
+        Nf+wVzH/oVU0/8mwpf/l4uH/49/d/+Pe3f/i3tz/4d3b/+Hd2//h3Nr/4Nza/+Db2f/f2tj/3trY/97Z
+        1//e2df/3djW/93Y1v/c19X/3NfV/9vW1P/b1dP/2tXT/9rU0v/Z1NL/2dPR/9jT0P/Y0tD/19LP/9fR
+        z//W0M7/1tDN/9XPzf/Vz8z/1M7M/9TOy//Tzcr/083K/9LMyf/Sy8n/0cvI/9HKyP/Qysf/0MnH/8/J
+        xv/PyMX/z8jF/87HxP/Nx8T/zcbD/83Gw//MxcL/zMXC/8vEwf/Lw8D/ysPA/8rDwP/Jwr//ycG+/8jB
+        vv/Iwb7/yMC9/8e/vP/Hv7z/xr+7/8a+u//Fvrr/xb26/8S9uf/EvLn/xLy4/8O7uP/Du7f/wrq3/8K6
+        t//Cubb/wbm2/8G4tf/AuLX/wLi0/7+3tP+/t7P/v7i1/7Sknf+WZk3/mFEt/6lbM/+3Yjf/v2Y6/8No
+        O//EaDv/xWg6/8VoOv/EZjn/xWc7/8NmOf/EZzr/xGY5/8RmOv/EZjr/xGU5/8RlOf/DZDj/w2Q5/8Nj
+        OP/DYzj/w2M4/8NjN//CYzj/wmI4/8RiOP+6Yjb/llIh7ZtUI/+/YDf/wl41/8FeNf/BXjX/wV41/8Jf
+        Nv/BXjX/wF00/8FfNf/BXzb/wV81/8JgNv/BYDb/vV00/7BXMP+hVTT/yrGm/+bj4v/k4N7/49/e/+Pf
+        3f/j393/4t7c/+Ld3P/h3dv/4dzb/+Dc2v/g29n/39vZ/9/a2P/e2tj/3tnX/93Y1v/d2Nb/3NfV/9zX
+        1f/b1tT/29bT/9rV0//a1dL/2dTS/9nT0f/Y09D/2NLQ/9fSz//X0c//1tHO/9bQzv/V0M3/1c/N/9TO
+        zP/Uzsv/083L/9PNyv/SzMr/0szJ/9HLyP/Ry8j/0crH/9DJx//Qycb/z8jG/8/Ixf/Ox8X/zsfE/83G
+        w//NxsP/zMXC/8zFwv/LxMH/y8TB/8rDwP/Kw8D/ycK//8nCv//Jwb7/yMG+/8jAvf/HwLz/x7+8/8a/
+        vP/Gvrv/xb67/8W9uv/Fvbn/xLy5/8S8uf/Du7j/w7u4/8K6t//Curf/wrq2/8G5tv/BubX/wLi1/8G5
+        tv+1pp7/l2ZO/5hRLf+qXDX/t2I3/79mOf/DaDr/xGo8/8RoO//FaDr/xWg6/8RnOv/FaDv/xWg7/8Vn
+        Ov/EZjn/xGY5/8RmOv/EZTn/xGQ5/8RlOf/EZjr/w2U5/8NkOf/DYzn/w2M4/8JiN//CYjf/xGM5/7ph
+        Nv+XUiDtm1Uj/79gN//CXjX/wV41/8FeNf/BXjX/wV41/8FfNf/BXzX/wF41/8FgNv/CYDb/wmA2/8Fh
+        Nv+9XjT/sFcw/6FWNf/Lsqf/5+Tj/+Xh4P/l4d//5ODf/+Tg3v/j393/49/d/+Le3P/i3dz/4d3b/+Hc
+        2//g3Nr/4NvZ/9/b2f/f2tj/3trY/97Z1//d2Nb/3djW/9zX1f/c19X/29bU/9vW0//a1dP/2tXS/9nU
+        0v/Z09H/2NPR/9jS0P/Y0s//19HP/9bRzv/W0M7/1tDN/9XPzf/Uzsz/1M7L/9PNy//Tzcr/08zK/9LM
+        yf/Ry8j/0cvI/9HKx//Qysf/0MnG/8/Ixv/PyMX/zsfF/87HxP/NxsP/zcbD/8zFwv/MxcL/y8TB/8vE
+        wf/Kw8D/ysPA/8rCv//Jwr//ycG+/8jBvv/IwL3/x8C9/8e/vP/Gv7z/xr67/8a+u//Fvbr/xb26/8S8
+        uf/EvLn/w7u4/8O7uP/Du7f/wrq3/8K6tv/Curf/t6eg/5hoUP+ZUi//qlw0/7ZiN/++Zjn/w2k8/8Vq
+        PP/Gazz/xmo8/8ZqPP/FaTv/xWo7/8VpOv/FaDr/xWg6/8VoO//EZzr/xGY5/8RmOv/DZTn/xGU5/8Rl
+        Of/EZTn/w2Q4/8JjOP/DYzn/w2M4/8JjN//EYjj/umE2/5hTIe2cVST/v2A3/8BcM//BXzb/wl82/8Ff
+        Nf/BXzX/wV81/8BeNP/CYDb/wmA1/8FfNP/CYTX/wWA1/71fNv+xWTL/oVU1/8yzqf/o5eT/5uLh/+bi
+        4P/l4eD/5eHf/+Tg3//k4N7/49/d/+Pf3f/i3tz/4t7c/+Hd2//h3Nv/4Nza/+Db2v/f29n/39rY/97a
+        2P/e2df/3dnX/93Y1v/c19X/3NfV/9vW1P/b1tT/2tXT/9rV0v/a1NL/2dTR/9jT0f/Y0tD/2NLQ/9fR
+        z//X0c7/1tDO/9bQzf/Vz83/1c/M/9TOy//Uzcv/083K/9PMyv/SzMn/0svJ/9HLyP/Rysj/0MrH/9DJ
+        xv/PyMb/z8jF/87Ixf/Ox8T/zcbE/83Gw//NxsP/zMXC/8vEwf/LxMH/y8PB/8rDwP/Kwr//ycK//8nB
+        vv/Iwb7/yMC9/8fAvf/Hv7z/x7+8/8a+u//Gvrv/xb26/8W9uv/Evbn/xLy5/8O8uP/Du7j/w7y5/7io
+        of+YaFD/mVQv/6pcNP+4ZDn/wGk7/8RqPP/FbD3/xms9/8ZrPf/Gazz/xmo8/8VqO//Fajz/xWk8/8Vp
+        O//EaDr/xWg7/8VnOv/EZzr/xGY5/8NmOf/DZTj/xGY6/8RlOf/DZTn/w2Q4/8NkOP/DYzn/w2M4/8Rj
+        OP+6Yjb/mFMi7Z1WJP+/YTj/wV00/8FeNf/BXzb/wmA2/8FeNf/AXzX/wWA2/8JgNv/CYDb/wmE2/8Jh
+        Nv/BYTf/vV41/7FYMv+hVjT/zLSp/+nn5v/n5OL/5+Pi/+bj4f/m4uH/5eLg/+Xh4P/k4N//5ODe/+Pf
+        3v/j393/4t7d/+Le3P/h3dv/4d3b/+Hc2v/g3Nr/39vZ/9/a2P/f2tj/3tnX/97Z1//d2Nb/3djW/9zX
+        1f/c19T/29bU/9vV0//a1dP/2tTS/9nU0v/Z09H/2NPQ/9jS0P/X0s//19HP/9bQzv/W0M7/1c/N/9XP
+        zP/Uzsz/1M7L/9PNy//Tzcr/0szJ/9LLyf/Ry8j/0crI/9DKx//Qycf/z8nG/8/Ixv/PyMX/zsfE/83H
+        xP/NxsP/zcbD/8zFwv/MxML/y8TB/8vEwf/Kw8D/ysK//8nCv//Jwb7/ycG+/8jAvf/IwL3/x7+8/8e/
+        vP/Gv7v/xr67/8W9uv/Fvbr/xb25/8W9u/+5qaL/mWpQ/5pVMP+rXjT/uGU4/8BqO//EbD3/xWs8/8Zs
+        Pf/HbD3/xms8/8ZrPf/Fajv/xms8/8VpOv/FaTv/xWk8/8RoOv/FaDr/xWg6/8VnOv/FaDr/xWc7/8Rn
+        O//EZjr/w2U5/8RlOv/DZDn/w2Q4/8NkOf/CYzj/xGM4/7tjN/+ZVCHtnVYk/79gN//BXTT/wV82/8Fe
+        NP/BXzX/wV82/8FgNv/CYDX/wmE1/8FgNf/CYTb/wmM4/8FiOP+9YDf/slsz/6JXNf/Ntar/6ujn/+jl
+        4//o5OP/5+Tj/+fj4v/m4+H/5uLh/+bi4P/l4eD/5OHf/+Tg3v/k397/49/d/+Pf3f/i3tz/4t3c/+Hd
+        2//h3Nv/4Nza/+Db2f/f2tn/39rY/97a2P/e2df/3djW/93Y1v/c19X/3NfV/9vW1P/b1dP/2tXT/9rV
+        0v/Z1NL/2dPR/9jT0f/Y0tD/19LP/9fRz//W0M7/1tDO/9XQzf/Vz8z/1M7M/9TOy//Uzcv/083K/9LM
+        yv/SzMn/0svJ/9HLyP/Rysf/0MnH/9DJxv/PyMb/z8jF/87Hxf/Ox8T/zcbE/83Gw//MxcL/zMXC/8vE
+        wf/LxMH/ysPA/8rDwP/Jwr//ycK//8nBvv/Iwb7/yMC9/8fAvP/Hv7z/xr+8/8a+u//Gv7z/uquj/5lq
+        UP+aVS//rGA3/7lmOv/Bazz/xW09/8ZtPf/GbTz/x20+/8dtPv/Gazz/xms8/8ZrPP/Fazz/xms8/8Zq
+        O//Gajz/xWo8/8VpO//FaTv/xWg6/8RnOf/FZzr/xWg7/8RmOv/EZjn/xGY6/8RlOf/EZjr/w2U5/8Jk
+        OP/EZDn/vGQ4/5lUIu2eViX/v2A3/8BcM//BXjT/wF40/8BeNf/BXzX/wmA2/8JhNv/CYTb/wWA1/8Jj
+        OP/CYjj/wWI3/75gN/+yWjP/olg2/862q//r6ej/6ebl/+nm5P/o5eT/6OTj/+fk4//n4+L/5uPh/+bi
+        4f/m4uD/5eHg/+Xh3//k4N//5ODe/+Pf3v/j393/4t7c/+Ld3P/h3dv/4dzb/+Dc2v/g29n/39vZ/9/a
+        2P/e2tj/3tnX/93Y1v/d2Nb/3NfV/9zX1f/b1tT/29bT/9rV0//a1dL/2dTS/9nT0f/Y09H/2NLQ/9fS
+        z//X0c//1tHO/9bQzv/W0M3/1c/N/9TOzP/Uzsv/1M3L/9PNyv/TzMr/0szJ/9LLyf/Ry8j/0crH/9DK
+        x//Qycb/z8nG/8/Ixf/Ox8X/zsfE/83Gw//NxsP/zMXC/8zFwv/LxMH/y8TB/8rDwP/Kw8D/ysK//8nC
+        v//Jwb7/yMG+/8jAvf/HwL3/x8C+/7yspf+aa1H/mlcx/6xgNv+5aDr/wWw8/8VuPv/Hbz7/x249/8du
+        Pf/HbT3/x209/8dtPv/HbT7/x2s8/8dsPf/Gazz/xms8/8dsPf/Gajv/xmo7/8VpPP/EaDr/xGg6/8Vo
+        Ov/FZzn/xWc7/8RnO//EZzr/xGY5/8RlOf/EZDn/w2Q4/8VlOv+7ZDj/mlUi7Z5WJf/AYTj/wV00/8Ff
+        Nf/BXzb/wV81/8JfNf/CYTf/wmE2/8JhNf/CYjf/wmE3/8JhN//CYjf/vmE3/7JbM/+iWDb/zrer/+zq
+        6f/q5+b/6ufm/+nm5f/p5uT/6OXk/+jl4//o5OP/5+Ti/+fj4v/m4uH/5uLg/+Xh4P/l4d//5ODf/+Tg
+        3v/j397/49/d/+Le3P/i3dz/4d3b/+Hd2//g3Nr/4NvZ/9/b2f/f2tj/3trY/97Z1//d2df/3djW/93Y
+        1f/c19X/29bU/9vW1P/a1dP/2tXT/9rU0v/Z1NH/2dPR/9jT0P/Y0tD/19HP/9bRzv/W0M7/1tDN/9XP
+        zf/Vz8z/1M7L/9TOy//Tzcr/08zK/9LMyf/Sy8n/0cvI/9HKyP/Qysf/0MnG/8/Jxv/PyMX/zsjF/87H
+        xP/NxsT/zcbD/8zFw//MxcL/y8TB/8vEwf/Lw8D/ysPA/8rCv//Jwr//ycG+/8nCv/+9rqf/m21T/5pY
+        Mf+sYTb/uWk7/8FtPv/Fbz7/x3A//8hxP//Ibz7/x249/8hvPv/Ibz7/yG8+/8dtPf/HbT7/x20+/8ds
+        PP/Gazv/xms8/8ZrPf/Gazz/xmo8/8VqPP/FaTv/xWk7/8RnOf/FZzr/xWc6/8RnO//DZjn/w2U5/8Rm
+        Ov/EZTr/xWU4/7tkOP+aVSPtn1cm/8BhOP/BXjX/wWA3/8FgNv/BXzX/wmA2/8JhNv/CYTb/wWE2/8Ji
+        OP/CYjf/w2M4/8JjOP++YTf/slsz/6JYNf/PuK3/7evr/+vo5//r6Of/6ufm/+rn5v/q5uX/6ebk/+jl
+        5P/o5eP/6OTj/+fk4v/n4+L/5uPh/+bi4P/l4uD/5eHf/+Tg3//k4N7/5ODe/+Pf3f/i3t3/4t7c/+Hd
+        2//h3dv/4dza/+Db2v/f29n/39vZ/9/a2P/e2df/3tnX/93Y1v/d2Nb/3NfV/9zX1P/b1tT/29bT/9rV
+        0//a1NL/2dTR/9nT0f/Y09D/2NLQ/9fRz//X0c//1tHO/9bQzv/Vz83/1c/M/9TOzP/Uzsv/083L/9PN
+        yv/SzMn/0svJ/9HLyP/Rysj/0MrH/9DJxv/Qycb/z8jG/87Ixf/Ox8T/zsfE/83Gw//NxsP/zMXC/8zE
+        wv/LxMH/y8TB/8rDwP/LxMH/vq+n/5ttU/+bWTL/rGI3/7lpO//BbT3/xnA//8hxQP/IckD/yHA//8hx
+        P//IcD7/yG8+/8hvPv/Ibz//x249/8dtPP/GbDz/xmw9/8ZsPf/Gazz/xms8/8VrPP/Gazz/xmo8/8Vq
+        O//Fajz/xGg6/8RnOv/EZzr/xWg6/8VoO//EZzr/xGY5/8RmOf/FZTn/vGQ4/5tVI+2fWCb/wGI4/8Fe
+        Nf/BYDb/wmA2/8FfNf/BYDX/wmA1/8JiN//CYzj/wmI3/8NjOP/DYzf/wmQ4/75iN/+yWzP/olg2/9C5
+        rv/u7ez/7Orp/+zp6P/r6ef/6+jn/+rn5v/q5+b/6ufl/+nm5f/p5eT/6OXk/+jk4//n5OL/5+Pi/+bj
+        4f/m4uH/5eLg/+Xh4P/k4d//5ODf/+Tg3v/j393/497d/+Le3P/i3dz/4d3b/+Hc2v/g3Nr/4NvZ/9/b
+        2f/f2tj/3tnY/97Z1//d2db/3djW/9zX1f/c19X/29bU/9vW0//a1dP/2tTS/9nU0v/Z1NH/2NPR/9jS
+        0P/X0s//19HP/9fRzv/W0M7/1c/N/9XPzP/Uz8z/1M7L/9PNy//Tzcr/0szK/9LMyf/Sy8n/0cvI/9DK
+        x//Qycf/0MnG/8/Ixv/PyMX/zsfE/87HxP/NxsP/zcbD/8zFwv/MxcL/zMbD/7+xqf+bblP/m1ky/61j
+        N/+7azz/wm8+/8ZxQP/IckH/yXJA/8lyQP/IcD7/yHA//8hxQP/IcD//yHA+/8hwQP/Ibz//yG49/8dt
+        PP/Hbj3/xmw9/8dtPf/HbD3/x2w9/8ZrPP/Gaz3/xmo7/8ZqO//FaTv/xGg6/8VpO//FaTv/xWg7/8Vo
+        O//EZzr/xGY5/8VmOv+8ZDj/nFYk7aBYJv+/YTj/wV82/8FfNf/CYTb/wmE2/8JgNf/CYTb/wmI4/8Jj
+        OP/CYjf/w2I3/8NkOf/DZTn/v2M4/7JcNP+iWTf/0bqu/+/u7f/t6+r/7erp/+zq6f/s6ej/7Ono/+vo
+        5//r6Ob/6ufm/+rn5f/p5uX/6ebk/+jl5P/o5eP/5+Tj/+fj4v/m4+H/5uPh/+bi4P/l4eD/5eHf/+Tg
+        3//k4N7/49/e/+Pf3f/i3tz/4t7c/+Hd2//h3Nv/4Nza/+Db2f/f29n/39rY/97a2P/e2df/3dnX/93Y
+        1v/c19X/3NfV/9vW1P/b1tT/2tXT/9rV0v/Z1NL/2dTR/9nT0f/Y0tD/19LP/9fRz//X0c7/1tDO/9bQ
+        zf/Vz83/1M7M/9TOzP/Uzcv/083K/9PMyv/SzMn/0svJ/9HLyP/Rysf/0MnH/9DJxv/Pycb/z8jF/87H
+        xf/Ox8T/zcbE/87HxP/Bsqv/nW9U/5xaMv+tZDj/u2w8/8JwPv/HckD/yXRB/8l0Qf/Jc0H/yHE//8ly
+        QP/JckD/yXFA/8lxQP/IcT//yHA//8hwP//IcD//yW8//8hvP//Hbj7/x24+/8dsPf/HbD3/x2w9/8ds
+        Pv/Gaz3/xWo7/8VpOv/FaTv/xGk7/8VoOv/EZzn/xWc6/8VoO//EZzv/xmg7/71mOf+cViTtoFgn/8Bi
+        Of/CYDb/wmE2/8JhNv/CYDX/wmE3/8FhN//CYjf/wmI2/8NjOP/CYjf/w2Q4/8NkOP+/Yzj/slw0/6Na
+        N//Suq//8O/u/+7s6//u6+r/7evq/+3q6f/s6un/7Ono/+zp6P/r6Of/6+jm/+rn5v/q5+b/6ebl/+nm
+        5P/o5eT/6OXj/+jk4//n5OL/5+Ph/+bj4f/m4uH/5eHg/+Xh3//k4N//5ODe/+Pf3v/j393/4t7c/+Le
+        3P/h3dv/4d3b/+Dc2v/g29n/4NvZ/9/a2P/e2tj/3tnX/93Z1//d2Nb/3NjV/9zX1f/b1tT/29bU/9vV
+        0//a1dP/2dTS/9nU0f/Z09H/2NPQ/9jS0P/X0c//19HP/9bQzv/W0M3/1c/N/9XPzP/Uzsz/1M7L/9PN
+        yv/TzMr/0szJ/9LLyf/Ry8j/0crH/9DKx//Qycf/z8nG/8/Ixf/Pycb/wrWt/51wVf+bWjL/rmY5/7ps
+        PP/Dcj//x3RA/8h0QP/KdUL/ynRB/8p0Qf/Kc0H/yXNA/8lzQf/IckD/yXJA/8lyQP/JckD/yXJB/8dw
+        Pv/IcD//yG8+/8hvP//Hbj7/x209/8ZsPP/GbD3/x209/8ZrPf/Gazz/xmo7/8ZqO//FaTv/xGg6/8Vo
+        Ov/FZzr/xGg6/8VpPP/FZzr/vWY5/5xXJO2hWCb/wGI4/8JgNf/CYTb/wmE2/8JiN//CYzj/wmI4/8Nj
+        OP/DYzj/w2Q5/8JjN//DZDj/w2U5/79jOf+yXTT/o1o3/9K7sP/x8PD/7+3s/+/s6//u7Ov/7uvq/+3r
+        6v/t6un/7erp/+zq6P/s6ej/6+jn/+vo5//q5+b/6ufm/+nm5f/p5uT/6OXk/+jl4//o5OP/5+Ti/+fj
+        4v/m4uH/5uLh/+Xi4P/l4d//5ODf/+Tg3v/j397/49/d/+Le3f/i3tz/4t3b/+Hd2//g3Nr/4Nva/+Db
+        2f/f2tn/39rY/97Z1//e2df/3djW/93Y1v/c19X/3NbU/9vW1P/b1dP/2tXT/9rU0v/Z1NH/2dPR/9jT
+        0P/Y0tD/19HP/9fRzv/W0M7/1tDN/9XPzf/Vz8z/1M7M/9TOy//Tzcv/08zK/9LMyf/SzMn/0cvI/9HK
+        yP/Qysf/0cvI/8O2rv+dclf/m1sy/61mOf+6bT3/w3JA/8h2Qv/JdkH/ynZC/8p2Qv/KdUL/ynRB/8p1
+        Qf/KdEH/yXNA/8lyQP/JckD/yHJA/8hxPv/JckD/yHJA/8hwP//IcD//yHA//8huPv/HbT3/xm09/8Zt
+        Pf/GbDz/x2w9/8ZsPf/GbD3/xmo8/8VpO//FaTr/xWo8/8VpO//FaTv/xWk7/8ZnO/+9Zzr/nVck7aFZ
+        J//AYjj/w2E2/8JhNv/CYTb/wmM4/8JhN//DYjf/w2Q5/8NjOP/DZDj/w2Q4/8RlOf/DZTr/v2M4/7Jd
+        NP+jWjf/07yx//Lx8f/w7u3/8O7t/+/t7P/v7Ov/7+zr/+7s6//u6+r/7evp/+3q6f/s6un/7Ono/+vp
+        5//r6Of/6+jm/+rn5v/q5+X/6ebl/+nl5P/o5eT/6OTj/+fk4v/n4+L/5+Ph/+bi4f/l4uD/5eHg/+Th
+        3//k4N//5ODe/+Pf3f/j3t3/4t7c/+Ld3P/h3dv/4dza/+Dc2v/g29n/39vZ/9/a2P/e2df/3tnX/93Y
+        1v/d2Nb/3NfV/9zX1f/b1tT/29bU/9rV0//a1NL/2dTS/9nT0f/Y09H/2NLQ/9fSz//X0c//1tHO/9bQ
+        zv/Vz83/1c/M/9XOzP/Uzsv/083L/9PNyv/SzMn/0szJ/9PNyv/Dtq//mnBV/5hZMf+rZjn/uW09/8Jz
+        QP/HdkL/yXhD/8p3Qv/Kd0P/yndC/8p2Qv/KdEH/ynVB/8p1Qv/KdUL/ynRB/8p0Qf/Jc0D/yHE//8hx
+        P//JcT//yHE//8hxP//IcD//yHA//8hwP//Ibz7/xm08/8dtPf/Hbj7/x24+/8ZsPP/Gazz/xms8/8Vp
+        O//FaTv/xWk7/8RoOv/FaTv/xmg7/75nOv+eWCXtoloo/8FkOf/CYTb/wmE2/8JjOP/CYTf/wmE2/8Ni
+        Nv/CYjj/w2M4/8RlOf/EZTr/xGY6/8NlOf+/ZDj/s100/6NaN//UvLL/8/Ly//Hv7v/x7+7/8O7t//Du
+        7f/v7ez/7+3s/+/s6//u7Ov/7uvq/+3r6v/t6un/7Orp/+zp6P/s6ej/6+jn/+vo5//q5+b/6ufl/+nm
+        5f/p5uT/6OXk/+jl4//n5OP/5+Pi/+bj4v/m4uH/5uLg/+Xh4P/l4d//5ODf/+Tg3v/j393/49/d/+Le
+        3P/i3tz/4d3b/+Hc2//g3Nr/4Nva/9/b2f/f2tj/3trY/97Z1//d2df/3djW/9zX1f/c19X/3NbU/9vW
+        1P/a1dP/2tXS/9rU0v/Z1NH/2NPR/9jS0P/X0s//19HP/9fRzv/W0M7/1dDN/9XPzf/Vz8z/1M7M/9TN
+        y//Uzsz/wrew/5FrU/+MUy7/n181/69oOv+5bj3/wHJA/8R0Qf/GdkL/yHdD/8l3Qv/Jd0L/yndD/8p2
+        Qv/KdUH/ynVB/8p1Qv/KdUH/ynVB/8p0Qf/KdEL/yXNA/8lyQf/JckD/yHA//8hwP//Hbz3/yG8+/8hv
+        P//Ibz7/x249/8duPv/HbT3/x20+/8dtPv/GbD3/xms8/8ZqPP/FaTv/xWk7/8VpOv/GaDr/vmc6/59Y
+        Ju2iWif/wGM4/8JhNv/CYjf/wWA2/8JhNv/DYzf/wmI3/8NkOP/DZTj/xGU5/8RnO//EZzr/wmU4/79j
+        OP+zXjX/o1o3/9S+s//08/P/8vDv//Lw7//x7+7/8e/u//Du7f/w7u3/7+3s/+/t7P/v7Ov/7uzr/+7r
+        6v/t6+r/7erp/+3q6f/s6ej/7Ono/+vo5//r6Of/6ufm/+rn5v/p5uX/6ebk/+jl5P/o5eP/6OTj/+fk
+        4v/n4+L/5uPh/+bi4f/l4eD/5eHf/+Tg3//k4N7/49/e/+Pf3f/i3t3/4t7c/+Hd2//h3dv/4Nza/+Dc
+        2v/g29n/39rY/97a2P/e2df/3tnX/93Y1v/d2Nb/3NfV/9zX1P/b1tT/29XT/9rV0//Z1NL/2dTR/9nT
+        0f/Y09D/2NLQ/9fSz//X0c//1tDO/9bQzf/Vz83/1tDO/8G3sf+DY0//eEgo/4tTL/+bXTX/p2U5/65p
+        O/+0bD3/uG49/71wP//Bc0H/xHVC/8Z0QP/IdkL/yXdC/8l2Qf/JdUH/ynVB/8p1Qf/KdUL/yXRB/8p0
+        Qf/Kc0D/ynNB/8lyQP/IcT//yXE//8dvPv/HcD//yHE//8hvPv/Ibj7/x249/8duPv/HbT3/x20+/8ds
+        Pf/GbDz/xms9/8ZrPP/Gajz/xWk7/8ZpO/++aTv/n1kl7aNaKP/BYzj/wmI3/8FiN//CYjf/w2M4/8Nj
+        OP/DZDj/w2Q4/8RlOf/EZjr/xGY5/8RnO//EZzr/wGU5/7NeNf+jWjb/1b6z//X09P/z8fD/8/Hw//Lw
+        7//y8O//8e/u//Hv7v/x7u7/8O7t//Dt7P/v7ez/7+3s/+7s6//u6+r/7evq/+3q6f/t6un/7Ono/+zp
+        6P/r6Of/6+jn/+rn5v/q5+b/6ebl/+nm5P/p5eT/6OXj/+jk4//n5OL/5+Pi/+bj4f/m4uH/5eHg/+Xh
+        3//k4d//5ODe/+Pf3v/j393/4t7c/+Le3P/h3dv/4d3b/+Dc2v/g3Nr/4NvZ/9/a2f/e2tj/3tnX/97Z
+        1//d2Nb/3djW/9zX1f/c19X/29bU/9vV0//a1dP/2tTS/9nU0v/Z09H/2NPQ/9jS0P/X0c//19HP/9fR
+        z//CubT/d19P/2E8JP9wRSj/fUwr/4hRLf+QVS7/mFoy/59fNf+lYjf/q2c6/7JqO/+4bT3/vXFA/8Jz
+        Qf/FdUH/yHdD/8h2Qv/Kd0P/ynZC/8p2Qv/KdUL/ynVC/8p1Qv/KdED/yXNA/8hyP//IckD/yXJA/8lx
+        P//IckD/yHE//8hwP//Ibz7/yG8+/8dtPf/Hbj7/x2w9/8ZsPP/Gazz/xms9/8ZrPP/Gajz/xmo8/75p
+        O/+gWSftpFsp/8FkOv/DYjj/wmI4/8NjOP/DZDn/w2M4/8NkOP/DZTn/xGU5/8RmOv/EZzr/xWc6/8Rn
+        Ov/AZjn/s140/6NcOP/Wv7X/9vX1//Ty8f/z8vH/8/Hw//Px8P/y8PD/8vDv//Hv7//x7+7/8e/u//Du
+        7f/w7u3/7+3s/+/t7P/u7Ov/7uzr/+7r6v/t6un/7erp/+zq6P/s6ej/6+jn/+vo5//r6Ob/6ufm/+rm
+        5f/p5uX/6ebk/+jl5P/o5OP/5+Ti/+fj4v/m4+H/5uLh/+Xi4P/l4eD/5eHf/+Tg3//k4N7/49/d/+Pe
+        3f/i3tz/4t3c/+Hd2//h3Nr/4Nza/+Db2f/f29n/39rY/97Z1//e2df/3djW/93Y1v/c19X/3NfV/9vW
+        1P/b1tP/2tXT/9rU0v/Z1NL/2dPR/9jT0f/Y0tD/2NLQ/8K5tf+pm5P/rJ2U/6eTh/+iiXr/mnxo/5Js
+        VP+LYEP/hVMy/4lSLv+RVi//mlsz/6RiN/+taDr/tGs8/7tvPv/BckD/xHNA/8h3Qv/Jd0L/yXVB/8p2
+        Qv/KdkL/ynVC/8p1Qv/KdEH/ynNB/8lyQP/IcT//yXJA/8hwP//IcT//yHE//8hwPv/Ibz//yG8+/8du
+        Pf/GbT3/x2w9/8ZsPP/HbD3/xmw+/8ZrPP/Gajv/vmk7/6BaJ+2kWyn/wWQ6/8JhN//DYjf/w2I3/8Nk
+        Of/CZDf/w2Q4/8RlOf/EZTn/w2Y5/8VoO//FZzr/xGc6/8BmOf+zXzX/pF05/9bAtf/39vb/9fPz//Tz
+        8v/08vL/8/Lx//Px8f/z8fD/8vHw//Lw7//x8O//8e/u//Hv7v/w7u3/8O7t/+/t7P/v7ez/7+zr/+7s
+        6//u6+r/7evq/+3q6f/s6un/7Ono/+vp5//r6Of/6+jn/+rn5v/q5+X/6ebl/+nm5P/o5eT/6OXj/+fk
+        4//n5OL/5+Pi/+bi4f/m4uD/5eHg/+Xh3//k4N//5ODe/+Pf3f/j393/4t7c/+Le3P/h3dv/4dzb/+Dc
+        2v/g29r/39vZ/9/a2P/e2tj/3tnX/93Z1//d2Nb/3NfV/9zX1f/b1tT/29bU/9rV0//a1dP/2tTS/9nU
+        0f/Y09H/2NPR/9nT0f/Y09H/19LQ/9bRz//V0M3/0MnF/8W6tP+4p53/pIp5/5BqUf+GVjf/iFEt/5NX
+        Mf+fXzb/qmU5/7NqO/+7bz7/wnNA/8V1QP/IdkH/yndD/8p3Q//KdkP/ynVC/8p1Qv/KdUL/ynRB/8ly
+        QP/JcUD/yHE//8lyQP/IcT//yXJA/8hvPv/Ibz//yG8+/8dtPf/HbT3/x209/8dsPP/GbD3/xms9/8dr
+        PP+/ajv/oVon7aVcKv/AZDr/wmE2/8NiN//DYzj/w2Q5/8NlOf/EZTn/xGY5/8NlOP/EZzr/xWc6/8Vo
+        Ov/EaDr/v2U4/7NeNP+kXDj/18G2//f39//19PT/9fTz//Xz8//08/L/9PLy//Ty8f/z8fH/8/Hw//Lx
+        8P/y8O//8vDv//Hv7v/x7+7/8O7t//Du7f/v7ez/7+3s/+/s6//u7Ov/7uvq/+3r6v/t6un/7erp/+zp
+        6P/s6ej/6+jn/+vo5//q5+b/6ufl/+nm5f/p5uX/6eXk/+jl4//n5OP/5+Ti/+fj4v/m4+H/5uLg/+Xh
+        4P/l4d//5ODf/+Tg3v/j397/49/d/+Le3f/i3tz/4d3b/+Hc2//h3Nr/4Nza/9/b2f/f2tj/39rY/97Z
+        1//e2df/3djW/9zY1f/c19X/3NfU/9vW1P/b1dP/2tXT/9rU0v/Z1NL/2dPR/9jT0P/Y0tD/19LP/9fR
+        z//W0c7/19HP/9fRz//Uz8z/zsbD/7usov+fg3L/iV9D/4ZSL/+RVjD/nl40/6tmOf+2bDz/vnJA/8R0
+        Qf/HdkL/yXhD/8p3Q//KdUH/ynVB/8p1Qv/KdUL/ynRB/8pzQP/Jc0H/yXJA/8hxP//IckD/yHE//8dv
+        Pv/IcD//yG8+/8dtPf/HbT3/x209/8dsPf/Gazz/x2s9/8BrPP+iWyjtpVwp/8FlOv/DYzj/w2Q5/8Nl
+        Of/DZTj/xGY6/8RlOf/DZTj/xGY6/8VnOv/FaDv/xWg6/8RpO//AZzr/tF80/6RcOP/Xwrf/+Pj4//b1
+        9f/29fT/9vT0//X08//18/P/9PPy//Ty8v/08vH/8/Lx//Px8f/y8fD/8vDv//Lw7//x7+//8e/u//Du
+        7f/w7u3/8O3s/+/t7P/v7Oz/7uzr/+7r6v/t6+r/7evp/+3q6f/s6ej/7Ono/+vp5//r6Of/6ufm/+rn
+        5v/q5uX/6ebl/+nl5P/o5eP/6OTj/+fk4v/n4+L/5uPh/+bi4f/l4uD/5eHg/+Th3//k4N7/49/e/+Pf
+        3f/j3t3/4t7c/+Hd2//h3dv/4dza/+Dc2v/g29n/39rZ/9/a2P/e2df/3tnX/93Y1v/d2Nb/3NfV/9zX
+        1f/b1tT/29XT/9rV0//a1NL/2dTS/9nT0f/Y09D/2NLQ/9fSz//X0c//1tDO/9bQzf/V0M3/1tHO/9PN
+        yv/EubP/qJCB/4lfRP+GUC3/lVky/6NhNv+waTv/u3A//8J0Qf/GdUL/yHZB/8l3Qv/KdkL/ynZC/8l0
+        Qf/JdEH/yXRA/8lyQP/Jc0D/yHE//8lxP//IcT//yHE//8hvPv/Ibj3/yG4+/8dtPf/GbT3/x20+/8dt
+        Pf/Hazz/v2s8/6JbKO2mXSr/wmY7/8RjOP/DZDn/w2Q3/8RlOf/FZjv/xGY6/8RmOf/EZzr/xWc6/8Vo
+        O//FaTv/xWo8/8FoO/+0YDb/pF46/9jCt//5+fn/9/b1//f19f/29fX/9vX0//b09P/19PP/9fTz//Xz
+        8v/08/L/9PLx//Py8f/z8fH/8/Hw//Lw8P/y8O//8u/v//Hv7v/x7+7/8O7t//Dt7f/v7ez/7+3s/+7s
+        6//u7Ov/7uvq/+3r6v/t6un/7Oro/+zp6P/r6Oj/6+jn/+vo5v/q5+b/6ubl/+nm5f/p5eT/6OXk/+jk
+        4//n5OL/5+Pi/+bj4f/m4uH/5eLg/+Xh4P/l4d//5ODe/+Pf3v/j393/49/d/+Le3P/i3dz/4d3b/+Hc
+        2//g3Nr/4NvZ/9/b2f/f2tj/3trY/97Z1//d2Nb/3djW/9zX1f/c19X/29bU/9vW0//a1dP/2tXS/9nU
+        0v/Z09H/2NPR/9jS0P/X0s//19HP/9bRzv/W0M7/1tDN/9bQzv/Uz83/xbmz/6CEc/+FVzn/ilIt/5xe
+        Nf+rZjn/t209/8ByQP/FdUL/yHdC/8l3Q//KdkH/ynVB/8p0Qf/JdEH/ynRB/8p0Qf/Jcj//yXJA/8ly
+        QP/JcUD/yHE//8hwP//Ibz//yG8//8duPv/Hbj7/x2w9/8drPP+/ajr/o1wo7addK//CZTr/w2M4/8Jj
+        N//DZTj/xWY7/8RmOv/EZjr/xGc6/8RnOv/FZzr/xWg6/8VqPP/Fajz/wWg6/7RgNv+lXjn/2cO4//r6
+        +v/49/f/+Pb2//f29v/39vX/9/X1//b19P/29PT/9fTz//X08//18/P/9PPy//Ty8v/z8vH/8/Lx//Px
+        8P/y8PD/8vDv//Lw7//x7+7/8e/u//Du7f/w7u3/8O3s/+/t7P/v7Ov/7uzr/+7r6v/t6+r/7erp/+zq
+        6f/s6ej/7Ono/+vo5//r6Ob/6ufm/+rn5f/p5uX/6ebk/+jl5P/o5OP/5+Tj/+fk4v/n4+L/5uLh/+Xi
+        4P/l4eD/5eHf/+Tg3//k4N7/49/d/+Pf3f/i3tz/4t3c/+Hd2//h3dv/4Nza/+Db2f/f29n/39rY/97a
+        2P/e2df/3djW/93Y1v/d2NX/3NfV/9vW1P/b1tT/2tXT/9rV0//Z1NL/2dTR/9jT0f/Y09D/2NLQ/9fR
+        z//W0c7/1tDO/9bQzf/W0M7/083K/7mqoP+Pa1T/hFAu/5ZZMv+nZDj/tGw8/79yQP/FdUL/yHdC/8l3
+        Qv/KdkL/ynVB/8p1Qv/JdED/ynRB/8lyP//Jc0H/yHJA/8hxP//JcT//yHFA/8hwP//IcED/yG8+/8du
+        Pf/HbT3/yGw9/8BrPP+jXCntp14r/8JmOv/DYzj/w2U4/8RlOf/EZjr/xGc6/8RnOv/FaDv/xWg7/8Vp
+        O//EaDv/xmo8/8VrPP/AZzr/tGE2/6VfOv/ZxLn/+/v7//n49//49/f/+Pf3//j39v/39vb/9/b1//f1
+        9f/29fT/9vX0//X08//19PP/9fPz//Tz8v/08vL/9PLx//Py8f/z8fD/8vHw//Lw7//y8O//8e/u//Hv
+        7v/w7u3/8O7t//Dt7f/v7ez/7+zr/+7s6//u6+r/7uvq/+3q6f/t6un/7Ono/+zp6P/r6Of/6+jn/+rn
+        5v/q5+b/6ebl/+nm5P/o5eT/6OXj/+jk4//n5OL/5+Pi/+bj4f/m4uD/5eLg/+Xh3//k4N//5ODe/+Pf
+        3v/j393/4t7d/+Le3P/h3dv/4d3b/+Hc2v/g29r/39vZ/9/b2f/f2tj/3tnX/97Z1//d2Nb/3djW/9zX
+        1f/c1tT/29bU/9vW0//a1dP/2tTS/9nU0f/Z09H/2NPQ/9jS0P/X0c//19HO/9bQzv/W0M7/1tHP/8rB
+        vP+fhHP/g1Mz/5BVL/+jYTb/sms8/75xP//FdEH/yHZC/8l3Qv/Kd0P/y3dD/8p1Qv/KdUH/ynRB/8pz
+        QP/Jc0H/yHJA/8hxPv/IcD//yHE//8hwP//Hbj7/yG4+/8dvPv/IbT3/wW0+/6RdKe2oXiz/wmY7/8Nk
+        OP/EZTn/w2Q4/8RmOv/EZzr/xWc6/8VoO//FaTv/xWo8/8VpO//FaTv/xWs8/8FoOv+1YTb/pV86/9rE
+        uf/7/Pz/+fn4//n4+P/5+Pf/+Pj3//j39//49/b/9/b2//f29f/39vX/9vX1//b19P/29PT/9fTz//Xz
+        8//08/L/9PLy//Ty8f/z8vH/8/Hx//Px8P/y8O//8vDv//Hv7//x7+7/8O7u//Du7f/w7u3/7+3s/+/s
+        7P/u7Ov/7uzr/+7r6v/t6+n/7erp/+zp6P/s6ej/6+nn/+vo5//q5+b/6ufm/+rm5f/p5uX/6eXk/+jl
+        4//o5OP/5+Ti/+fj4v/m4+H/5uLh/+Xi4P/l4eD/5OHf/+Tg3v/j4N7/49/d/+Pe3f/i3tz/4d3b/+Hd
+        2//h3Nr/4Nza/+Db2f/f29n/39rY/97Z2P/e2df/3djW/93Y1v/c19X/3NfV/9vW1P/b1dP/2tXT/9rU
+        0v/Z1NL/2dPR/9jT0f/Y0tD/19LP/9fRz//W0M7/1tHP/9PMyf+sl4n/hFc6/41ULv+iYTb/sWo8/75x
+        P//FdEH/yHZB/8l3Qv/Kd0P/yndD/8p1Qf/KdUL/ynRB/8p0QP/Jc0H/yXNB/8lxP//JcUD/yHE//8hv
+        Pv/Ibj7/x249/8duPv/AbD3/pV0q7aheK//BZTr/w2Q3/8RlOv/EZjr/xGY5/8RmOv/FaDv/xWg6/8Ro
+        Ov/FaTv/xWk6/8ZqPP/Faz3/wWk7/7VjOP+lXzr/2sW6//z8/f/6+fn/+vn5//n5+P/5+Pj/+fj3//n4
+        9//49/f/+Pf2//f29v/39vX/9/b1//b19f/29fT/9vT0//X08//19PP/9fPy//Tz8v/08vL/8/Lx//Px
+        8f/z8fD/8vDw//Lw7//x8O//8e/u//Hu7v/w7u3/8O7t/+/t7P/v7ez/7uzr/+7s6v/u6+r/7evq/+3q
+        6f/s6uj/7Ono/+vp5//r6Of/6ujm/+rn5v/q5+X/6ebl/+nl5P/o5eP/6OXj/+fk4//n4+L/5uPh/+bi
+        4f/m4uD/5eHg/+Th3//k4N7/5N/e/+Pf3f/j393/4t7c/+Ld3P/h3dv/4dzb/+Dc2v/g29n/39rZ/9/a
+        2P/e2tj/3tnX/93Y1v/d2Nb/3NfV/9zX1f/b1tT/29XT/9rV0//a1dL/2dTS/9nT0f/Y09H/2NLQ/9fS
+        z//X0c//19HP/9XPzf+1pJn/hlxA/4xTLv+hYDb/sms8/75xQP/FdkL/yHdC/8p4Q//KeEP/ynZB/8p1
+        Qf/KdUL/ynRB/8p0Qf/JckD/yXNB/8lyQP/IcD7/yHA//8hwP//Ibz7/yW49/8FsPP+lXintqV8s/8Jn
+        O//EZDj/xGU5/8RmOf/EaDv/xWg7/8VpO//EaDr/xWk7/8ZqO//FaTr/xms9/8ZsPf/BaTv/tGI3/6Vg
+        O//axrr//f3+//v6+v/6+vr/+vn5//r5+f/6+fj/+fj4//n4+P/5+Pf/+Pf3//j39v/39vb/9/b2//f2
+        9f/39fX/9vX0//b09P/19PP/9fTz//Xz8//08/L/9PLy//Ty8f/z8fH/8/Hw//Lw8P/y8O//8vDv//Hv
+        7v/x7+7/8O7t//Du7f/v7ez/7+3s/+/s6//u7Ov/7uvq/+3r6v/t6un/7Orp/+zp6P/s6ej/6+jn/+vo
+        5v/q5+b/6ufl/+nm5f/p5uT/6OXk/+jk4//o5OP/5+Ti/+bj4f/m4uH/5uLg/+Xh4P/l4d//5ODf/+Tg
+        3v/j397/49/d/+Le3P/i3dz/4d3b/+Hc2//g3Nr/4NvZ/9/b2f/f2tj/3trY/97Z1//d2Nf/3djW/9zY
+        1f/c19X/29bU/9vW1P/b1dP/2tXS/9nU0v/Z09H/2NPR/9jS0P/Y0tD/19LP/9fRz/+4p57/hVtA/4tS
+        Lf+iYTf/s2s9/79xP//GdUH/yXhE/8p5RP/Kd0L/y3dD/8p2Qv/JdEH/ynRB/8pzQP/Jc0D/yXNB/8hw
+        Pv/IcD7/yHA//8hvPv/Jbz7/wm09/6ZeK+2pYC3/w2g8/8RlOf/DZTj/w2U4/8RmOf/FaDv/xWk7/8Vp
+        O//FaTv/xmo8/8ZqPP/Gazz/xmw9/8JrPf+2ZDj/pmE7/9vGu//9/v7/+/v7//v7+v/7+vr/+/r6//r5
+        +f/6+fn/+vn5//n4+P/5+Pj/+fj3//j39//49/f/+Pf2//f29v/39vX/9/X1//b19P/29PT/9vT0//X0
+        8//18/P/9PPy//Ty8v/08vH/8/Lx//Px8P/y8fD/8vDv//Lw7//x7+7/8e/u//Du7f/w7u3/8O3s/+/t
+        7P/v7Ov/7uzr/+7r6v/t6+r/7erp/+zq6f/s6uj/7Ono/+vo5//r6Of/6ufm/+rn5v/p5uX/6ebk/+jl
+        5P/o5eP/6OTj/+fk4v/n4+L/5uLh/+bi4f/l4uD/5eHf/+Tg3//k4N7/49/e/+Pf3f/i3tz/4t7c/+Ld
+        2//h3dv/4Nza/+Db2v/g29n/39rZ/9/a2P/e2df/3dnX/93Y1v/d2Nb/3NfV/9zW1P/b1tT/29XT/9rV
+        0//a1NL/2dTR/9nT0f/Y09D/2NLQ/9fSz/+5qZ//h11C/41UL/+kYjf/tWw8/8ByP//Hd0L/ynhD/8p2
+        Qf/KdkH/ynVB/8p2Qv/KdUL/ynRA/8p0QP/Jc0D/yXJA/8lxQP/IcD//yHA+/8lwPv/Cbj3/p18q7apg
+        Lf/DZzz/xGU5/8RmOv/EZzv/xmk8/8VpO//FaDr/xWk7/8ZqO//Fajv/xms8/8dsPP/HbT3/wms8/7Zk
+        OP+mYTv/3Me8//7////8/Pv//Pv7//z7+//7+/v/+/r6//v6+v/6+vr/+vn5//r5+f/5+fj/+fj4//n4
+        +P/4+Pf/+Pf3//j39v/39vb/9/b2//f29f/29fX/9vX0//b09P/19PP/9fPz//Tz8v/08vL/9PLy//Py
+        8f/z8fD/8vHw//Lw8P/y8O//8e/v//Hv7v/w7u3/8O7t//Du7f/v7ez/7+zr/+7s6//u7Ov/7uvq/+3q
+        6f/t6un/7Oro/+zp6P/r6ef/6+jn/+ro5v/q5+b/6ubl/+nm5f/p5eT/6OXk/+jk4//n5OL/5+Pi/+bj
+        4f/m4uH/5eLg/+Xh4P/k4N//5ODf/+Tg3v/j393/497d/+Le3P/i3dz/4d3b/+Hc2v/g3Nr/4NvZ/9/b
+        2f/f2tj/3tnX/97Z1//d2Nb/3djW/9zX1f/c19X/29bU/9vW0//a1dP/2tTS/9nU0v/Z09H/2NPR/9jT
+        0f+3ppz/hFg6/5FWMP+nYzj/uG09/8N0Qf/Id0L/ynhD/8t4RP/KeEP/yndD/8p2Qv/JdUH/yXRA/8ly
+        P//JckH/yXJA/8hwPv/IcD//yXA+/8JuPv+nXyvtq2At/8NoPP/EZjn/xGY5/8VnOv/FaDr/xWk7/8Vp
+        O//Fajv/xmo8/8ZrPP/HbD3/x209/8ZtPf/CbDz/tmQ4/6ZgOv/cx7z///////38/P/8/Pz//Pz8//z7
+        +//8+/v/+/v7//v6+v/7+vr/+vr5//r5+f/6+fn/+fn4//n4+P/5+Pj/+Pj3//j39//49/b/9/b2//f2
+        9v/39vX/9vX1//b19P/29PT/9fTz//Xz8//18/L/9PPy//Ty8v/z8vH/8/Hx//Px8P/y8PD/8vDv//Hv
+        7//x7+7/8e7u//Du7f/w7u3/7+3s/+/t7P/u7Ov/7uzr/+7r6v/t6+r/7erp/+zq6f/s6ej/6+nn/+vo
+        5//r6Ob/6ufm/+rn5f/p5uX/6eXk/+jl5P/o5eP/5+Tj/+fj4v/m4+L/5uLh/+bi4P/l4eD/5eHf/+Tg
+        3//k4N7/49/d/+Pf3f/i3tz/4t7c/+Hd2//h3Nv/4Nza/+Db2f/f29n/39rY/97a2P/e2df/3dnW/93Y
+        1v/c19X/3NfV/9vW1P/b1tT/2tXT/9rU0v/Z1NL/2dTR/9jS0P+sl4n/g1Mz/5dbM/+sZzr/vHFA/8V1
+        Qf/Jd0L/ynhD/8p4Q//Ld0P/ynVB/8p1Qf/KdUL/yXNA/8lyQP/IckD/yXE//8hxP//JcT//wm8+/6hg
+        LO2sYS3/w2k9/8RmOf/EZzr/xWg6/8RnOf/FaTv/xWk7/8ZqO//Gajz/xms8/8ZsPP/HbT3/xm4+/8Jr
+        PP+2ZDj/pmE7/93Ivf///////f39//39/f/9/Pz//Pz8//z8/P/8+/v//Pv7//v7+//7+/r/+/r6//r6
+        +f/6+vn/+vn5//r5+P/5+Pj/+fj4//n49//49/f/+Pf2//f29v/39vb/9/b1//b19f/29fT/9vX0//X0
+        9P/19PP/9fPy//Tz8v/08vL/9PLx//Px8f/z8fD/8vHw//Lw7//y8O//8e/u//Hv7v/w7u3/8O7t/+/t
+        7P/v7ez/7+zr/+7s6//u6+r/7evq/+3q6f/s6uj/7Ono/+zp6P/r6Of/6+jm/+rn5v/q5+X/6ufm/+nm
+        5f/l4d//49/d/+Le3P/i3tz/4t3b/+Hd2v/h3Nr/4NzZ/+Db2f/f29j/39rY/97a1//e2df/3tnW/93Y
+        1v/c19X/3NfU/9zW1P/b1tP/29bT/93Y1v/f29n/3tnY/93Y1v/d2Nb/3NfV/9zX1f/b1tT/29bU/9rV
+        0//a1dL/2tXT/9TNyv+egW7/hVEu/51eNP+yazz/wHRC/8d2Qf/KeEP/yndC/8p3Qv/Kd0P/ynZB/8p1
+        Qf/JdED/yXNA/8lyQP/IckD/yXJA/8lxQP/Cbz3/qWEs7axiLv/DaT3/xGY6/8VnO//FaDr/xWg6/8Vp
+        O//Gajv/xms9/8ZrPf/HbD3/x2w9/8dtPf/Hbz7/w2w8/7ZlOP+mYjz/3ci9///////+/v7//v39//39
+        /f/9/f3//f38//38/P/8/Pz//Pz7//z7+//7+/v/+/v6//v6+v/6+vr/+vr5//r5+f/6+fn/+fj4//n4
+        +P/5+Pf/+Pf3//j39//49vb/9/b2//f29f/39fX/9vX0//b19P/29PT/9fTz//Xz8//08/L/9PPy//Ty
+        8f/z8vH/8/Hw//Px8P/y8O//8vDv//Hv7v/x7+7/8O7u//Du7f/w7ez/7+3s/+/s6//u7Ov/7uvq/+3r
+        6v/t6un/7erp/+zp6P/s6ej/6+jn/+zp6P/e2db/p5qQ/417bf+OfG7/jn1u/418bv+Ne23/jXtt/4x7
+        bf+Me23/jHps/4x6bP+Lemz/i3lr/4t5a/+LeWv/i3lr/4t4av+KeGr/i3hq/4t4av+JdGb/i3do/7So
+        n//d2NX/39rY/97Z1//e2df/3djW/93Y1v/c19X/29bU/9vW1P/b1dP/29bU/8zCvf+OaVD/jFMu/6Vk
+        OP+4bz//w3RA/8l4Q//KeEP/y3hD/8p4Q//Kd0L/ynVB/8p0Qf/KdEH/ynNA/8lzQf/JcT//ynFA/8Jw
+        P/+qYSztrWIv/8NoPP/EZTj/xWc6/8VoO//Fajz/xWo8/8ZqO//Gazz/xms8/8dsPf/HbT3/yG4+/8du
+        Pf/DbT3/tmY5/6ZiO//dyb3///////7+/v/+/v7//v7+//79/f/9/f3//f39//39/f/9/Pz//Pz8//z8
+        +//8+/v//Pv7//v7+v/7+vr/+/r6//r6+f/6+fn/+vn5//n5+P/5+Pj/+fj4//j39//49/f/+Pf2//f2
+        9v/39vX/9/X1//b19f/29fT/9vT0//X08//18/P/9PPy//Tz8v/08vH/8/Lx//Px8P/z8fD/8vDw//Lw
+        7//x7+//8e/u//Hv7v/w7u3/8O3t/+/t7P/v7ez/7uzr/+7s6//u6+r/7erp/+3q6f/t6un/4d3b/5iK
+        fv+dj4T/y8O9/9XOyv/Uzsr/1M7J/9PNyf/TzMj/08zI/9LMx//Sy8f/0cvG/9HKxv/QysX/0MnF/9DJ
+        xP/PyMT/z8jD/8/Hw//Ox8L/zsbC/8rBvP+rnJL/e2JQ/6ydk//f29n/39vZ/9/a2P/e2df/3tnX/93Y
+        1v/d2Nb/3NfV/9zX1f/b1tT/3NfV/7uqoP+FVjf/lloz/61oOv+9cUD/xndC/8p4Q//LeEP/ynhD/8p3
+        Q//KdkP/ynZC/8p1Qv/KdEH/yXJA/8hyP//Kc0H/xHFA/6phLe2tYy//w2k9/8VnOv/FaDr/xWk6/8Vq
+        PP/Gajv/xmo8/8VqO//Gazz/xm09/8duPf/Hbjz/x28//8NtPf+1Zjn/pmM8/93Kvv//////////////
+        ///+/v7//v7+//7+/v/+/v3//f39//39/f/9/f3//fz8//z8/P/8/Pz//Pz7//z7+//7+/v/+/r6//v6
+        +v/6+vr/+vn5//r5+f/5+fj/+fj4//n4+P/4+Pf/+Pf3//j39v/49vb/9/b2//f29f/29fX/9vX0//b0
+        9P/19PP/9fTz//Tz8v/08/L/9PLy//Py8f/z8fH/8/Hw//Lx8P/y8O//8e/v//Hv7v/x7+7/8O7t//Du
+        7f/v7ez/7+3s/+/s6//u7Ov/7uvq/+/s6/+7sqv/pZmP/+nl5P/t6+r/7Ono/+zp6P/r6Of/6+jn/+rn
+        5v/q5+b/6ebl/+nm5P/o5eT/6OXj/+jk4//n5OL/5+Pi/+bi4f/m4uH/5eHg/+Xh3//k4N//5ODf/+Tg
+        3v+8san/gGlX/8/Hwv/h3dv/4NvZ/9/b2f/f2tj/3trY/97Z1//d2df/3djW/9zX1f/c19X/2NPQ/6CD
+        cf+HUS3/oWE2/7ZuPv/CdEH/yHhC/8p4Qv/LeUT/y3hD/8t4RP/KdkL/y3ZD/8p0Qf/Jcj//yXJA/8pz
+        Qv/EckD/q2It7a5jMP/EaT3/xWg6/8VoO//FaTv/xWo8/8ZrPP/Fajv/x2w8/8dsPf/HbT3/yG49/8du
+        Pf/Hbz7/wm09/7ZlOP+nYjz/3cq+/////////////////////////////v7+//7+/v/+/v7//v79//39
+        /f/9/f3//f39//38/P/8/Pz//Pz8//z8+//8+/v/+/v7//v6+v/7+vr/+/r6//r5+f/6+fn/+fn4//n4
+        +P/5+Pj/+fj3//j39//49/b/+Pf2//f29v/39vX/9vX1//b19P/29fT/9fTz//X08//18/P/9PPy//Ty
+        8v/z8vH/8/Hx//Px8P/y8fD/8vDv//Hw7//x7+7/8e/u//Du7f/w7u3/7+3s/+/t7P/v7Ov/7+3s/7Oq
+        ov/Vz8v/7+3s/+/t7P/v7ez/7+zr/+7r6//t6+r/7evq/+zq6f/s6ej/7Ono/+vo6P/r6Of/6ufm/+rn
+        5v/p5uX/6ebl/+jl5P/o5eP/5+Tj/+fj4v/m4+L/5uPh/+Dc2v+Pe2z/vrOs/+Tg3v/h3Nv/4Nza/+Db
+        2v/f29n/39rY/97a2P/e2df/3dnX/93Y1v/d2df/yr64/4pgQ/+TWDD/rGk7/7xxPv/Hd0L/ynlD/8t5
+        RP/LeUT/ynhD/8p2Qv/Kd0L/yXRB/8p0Qf/KdEH/ynNB/8NxP/+rYy3trmQw/8RqPf/FZzr/xWk7/8Vq
+        PP/FaTv/xmw9/8ZrPP/HbD3/x209/8duPv/Ibz7/yG8//8dvPv/Dbj7/tmc6/6djPP/dyb7/////////
+        //////////////////////////////7+/v/+/v7//v7+//7+/v/+/f3//f39//39/f/9/fz//fz8//z8
+        /P/8/Pz//Pv7//v7+//7+/r/+/r6//v6+v/6+vn/+vn5//r5+P/5+fj/+fj4//n49//49/f/+Pf2//j3
+        9v/39vb/9/b1//f19f/29fX/9vX0//b09P/19PP/9fPz//Tz8v/08vL/9PLx//Px8f/z8fD/8vHw//Lw
+        7//y8O//8e/u//Hv7v/w7u3/8O7t//Dt7P/w7u3/vraw/+Pf3f/f29j/vrSt/720rP+9tKz/vbOr/72z
+        q/+9s6v/vbKq/7yyqv+8sar/vLGp/7yxqf+7sKj/u7Co/7uvp/+6r6f/uq+n/7qupv+5rqb/ua2m/7mt
+        pf+5rqb/08zI/5+Ogv+8sKj/5eHg/+Le3P/h3dv/4d3b/+Dc2v/g3Nr/4NvZ/9/a2P/e2tj/3tnX/97Z
+        1//c2Nb/p45+/4dSLv+iYjf/tm4+/8N1Qf/JeEP/y3lD/8t5RP/LeEP/yndC/8p2Qv/KdkL/ynRB/8p1
+        Qv/LdEL/xHJA/6xjLu2vZDD/xGo8/8VnOf/Fajv/xWk6/8VqO//Gaz3/xms8/8dtPv/Hbj7/x249/8hv
+        Pv/Ibz7/x3E//8NuPf+3aDr/p2Q9/97Jvv//////////////////////////////////////////////
+        /////v7//v7+//7+/v/+/v7//v39//39/f/9/f3//f38//38/P/8/Pz//Pz8//z7+//7+/v/+/v6//v6
+        +v/7+vr/+vr5//r5+f/6+fn/+fn4//n4+P/5+Pj/+Pf3//j39//49/b/9/b2//f29f/39fX/9vX1//b1
+        9P/29PT/9fTz//Xz8//18/L/9PPy//Ty8f/z8vH/8/Hw//Px8P/y8PD/8vDv//Hv7v/x7+7/8e/u//Hv
+        7v/AuLL/5eHf/9fSzv+ilYr/oZSI/6KUif+jlIn/o5WJ/6OUiP+ilIj/opOI/6KTh/+ik4f/opOH/6GT
+        hv+hkob/oZGG/6GRhf+gkYX/oJCF/6CQhf+fkIT/n5CE/6GRhf/Lwrz/oZGF/7yxqf/m4uH/49/d/+Pf
+        3f/i3tz/4t3c/+Hd2//h3Nr/4Nza/+Db2f/f29n/39rY/9/b2f/Kv7j/il9C/5ZbMv+vajv/vnM//8h3
+        Q//LekT/y3lE/8t5RP/Kd0L/yndD/8p3Q//KdUL/yXRB/8t0Qf/EckD/rGMu7a9lMf/Eaj3/xWg6/8Vp
+        O//Gajz/xWo7/8VqPP/Gajv/x209/8dtPf/Ibj3/yHA//8hwPv/HcD//xG8+/7ZmOP+nYzz/3sq+////
+        //////////////////////////////////////////////////////////////7+/v/+/v7//v7+//79
+        /f/+/f3//f39//39/f/9/Pz//fz8//z8/P/8+/v//Pv7//v7+//7+/r/+/r6//r6+v/6+fn/+vn5//r5
+        +P/5+Pj/+fj4//j49//49/f/+Pf2//j29v/39vb/9/b1//f19f/29fT/9vT0//X08//18/P/9fPz//Tz
+        8v/08vL/8/Lx//Px8f/z8fD/8vDw//Lw7//x8O//8vDv/8C5s//k4N7/8O7t/+/t7P/v7Ov/7uzr/+7r
+        6v/u6+r/7erp/+3q6f/s6ej/7Ono/+vo5//r6Of/6ufm/+rn5v/p5uX/6ebl/+nl5P/o5eP/6OTj/+fk
+        4v/n4+L/5uPh/+bi4P+gkIT/vbKq/+fk4//k4N//5ODe/+Pf3f/j393/4t7c/+Ld3P/h3dv/4d3b/+Dc
+        2v/g29n/4NvZ/93Y1v+gg2//i1Qv/6dlOf+5cD//xXZC/8t6Rf/MekT/y3hD/8t4RP/LeET/yndD/8p1
+        Qf/KdUH/y3VC/8VzQf+tZC7tsGUx/8RqPf/FaTr/xWk7/8VpOv/Gazz/xmw9/8dtPf/HbT3/x249/8du
+        Pv/IcD7/yHE//8hxP//Dbz7/t2g6/6dlPf/eyr7/////////////////////////////////////////
+        ///////////////////////////////////+/v7//v7+//7+/v/+/v3//v39//39/f/9/f3//fz8//z8
+        /P/8/Pz//Pz7//z7+//7+/v/+/r6//v6+v/7+vr/+vn5//r5+f/6+fn/+fj4//n4+P/5+Pf/+Pf3//j3
+        9//49/b/9/b2//f29f/39fX/9vX0//b19P/19PP/9fTz//Xz8//08/L/9PLy//Py8f/z8fH/8/Hw//Lx
+        8P/z8fD/wbq0/+Xh3//y8O//8vDv//Hv7//x7+7/8e/u//Du7f/w7e3/7+3s/+/t7P/u7Ov/7uvr/+7r
+        6v/t6un/7erp/+zp6f/s6ej/6+jn/+vo5//q5+b/6ufm/+nm5f/p5uX/5+Tj/6GRhf++s6v/6OXk/+Xi
+        4P/l4d//5ODf/+Tg3v/j397/49/d/+Le3P/i3tz/4d3b/+Hc2//g3Nr/4d3c/7+vpf+GVTT/nmA1/7Rt
+        Pf/CdEH/ynlE/8x6RP/LeUP/y3lE/8t4Q//Kd0L/y3dD/8p0QP/LdUL/xXRB/65lL+2wZjH/xGs9/8Vp
+        Ov/FaTv/xWk6/8ZrPP/HbD3/x20+/8duPf/Hbj3/yHA//8dvPf/IcT//yHFA/8NuPf+3aTr/qGU9/97K
+        vv//////////////////////////////////////////////////////////////////////////////
+        //////////7+//7+/v/+/v7//v7+//39/f/9/f3//f39//38/P/8/Pz//Pz8//z8+//8+/v/+/v7//v7
+        +v/7+vr/+/r6//r6+f/6+fn/+vn5//n5+P/5+Pj/+fj3//j39//49/f/+Pf2//f29v/39vX/9/b1//b1
+        9f/29fT/9fT0//X08//18/P/9PPy//Ty8v/08vH/8/Lx//Ty8f/Cu7X/5uPh/+jl4//QycT/0MnD/9DJ
+        w//QycP/0MnD/9DIwv/PyML/z8fB/87Hwf/Ox8H/zsbA/87GwP/Nxb//zcW//8zEvv/MxL7/zMO9/8vD
+        vf/Lwrz/ysK8/8vCvP/c19T/opKG/7+0rP/p5uX/5uPh/+bi4P/l4eD/5eHf/+Tg3//k4N7/49/e/+Pf
+        3f/i3t3/4t7c/+Hd2//i3tz/1c3I/5BpT/+VWjL/r2o8/79zQP/IeUP/y3pD/8x6RP/LeUT/y3hD/8p4
+        Q//KeEP/ynZB/8p0Qf/FdEH/r2Uw7bJmMf/Eaz3/xmk7/8ZrPP/Fajz/x2w9/8dsPf/GbDz/x209/8dt
+        Pf/IcD7/yHE//8lxQP/IckD/xHA//7dpOv+oZT7/3sq/////////////////////////////////////
+        ///////////////////////////////////////////////////////////////////+/v7//v7+//7+
+        /v/+/v3//f39//39/f/9/fz//fz8//z8/P/8/Pz//Pv7//v7+//7+/r/+/r6//v6+v/6+vn/+vn5//r5
+        +f/5+fj/+fj4//n49//49/f/+Pf3//j39v/39vb/9/b1//f29f/29fX/9vX0//b09P/19PP/9fTz//Xz
+        8v/08/L/9fPz/8K7tf/o5eP/19HN/5iKfv+YiXz/mop8/5uLff+bi3z/mot8/5qLfP+ainz/mop7/5mK
+        e/+ZiXv/mYl7/5iJev+YiHr/mIh5/5iIev+Yh3n/mId5/5eGeP+Xhnj/mId5/8rBu/+klIj/wLWt/+ro
+        5//n5OL/5+Pi/+bj4f/m4uH/5eLg/+Xh4P/k4d//5ODe/+Pf3v/j393/497d/+Le3P/h3dz/o4dz/4xV
+        L/+oZzr/u3E//8d4Q//Le0T/zHpE/8t5Q//LeEP/y3hD/8p4Q//Kd0L/y3ZC/8V1Qv+vZjDtsmcy/8Rs
+        Pv/Gajv/xms9/8ZrPP/Gazz/x2w9/8ZsO//Hbj3/yG8+/8hwP//IcD//yXJA/8hyQP/FcUD/t2k6/6hm
+        Pv/eyr7/////////////////////////////////////////////////////////////////////////
+        /////////////////////////////////////////v7+//7+/v/+/v7//v7+//39/f/9/f3//f39//38
+        /P/9/Pz//Pz8//z7+//8+/v/+/v7//v7+v/7+vr/+vr6//r5+f/6+fn/+vn4//n4+P/5+Pj/+fj3//j3
+        9//49/b/9/b2//f29v/39vX/9vX1//b19P/29PT/9fTz//X08//19PT/w7y2/+fk4v/08vH/8e/u//Hv
+        7v/x7u7/8O7t//Du7P/v7ez/7+3s/+/s6//u7Ov/7uvq/+3r6f/t6un/7Orp/+zp6P/s6ef/6+jn/+vo
+        5//q5+b/6ufl/+nm5f/p5uT/6ebl/6OUh//Atq7/6+no/+jl5P/o5OP/6OTj/+fj4v/m4+H/5uLh/+bi
+        4P/l4eD/5eHf/+Tg3//k4N7/49/e/+Th3/+4pZn/iVc0/6JkOP+4cD//xnhE/8t7Rf/Me0X/y3lD/8t5
+        RP/LeUT/y3hE/8p3Q//LdkL/xnVC/7BmMO2yZzL/xGw+/8ZqO//Fajz/xms8/8dtPf/HbD3/x209/8hu
+        Pv/IcD//yHA//8hxP//JcT//yHNB/8VxP/+3aTr/qGY+/97Kvv//////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////7+/v/+/v7//v7+//7+/v/+/f3//f39//39/f/9/Pz//fz8//z8/P/8/Pv//Pv7//v7
+        +//7+/r/+/r6//r6+v/6+fn/+vn5//r5+f/5+Pj/+fj4//n49//49/f/+Pf3//j39v/39vb/9/b1//f1
+        9f/29fT/9vT0//b19f/Evbf/6OXj//b09P/29fX/9vX0//X09P/19PP/9fPz//Tz8v/08vL/8/Lx//Px
+        8f/z8fD/8vDw//Lw7//x7+//8e/u//Du7v/w7u3/8O3t/+/t7P/v7Oz/7uzr/+7s6//s6ej/pJSI/8G3
+        r//t6un/6ebl/+nm5P/o5eT/6OXj/+jk4//n5OL/5+Pi/+bi4f/m4uH/5eLg/+Xh3//k4N//5eHg/8/F
+        vv+KXDz/nWA1/7RuPv/Ed0P/y3tF/8x7Rf/MekT/y3pE/8t4Q//LeET/yndC/8t2Qv/GdUH/sWcx7bNo
+        M//Eaz3/xmo8/8ZrPf/GbD3/x209/8duPv/HbT3/yG4+/8dvPv/IcUD/yXE//8lyQf/Jc0H/xHE//7dp
+        Ov+oZj7/3sq+////////////////////////////////////////////////////////////////////
+        /////////////////////////////////////////////////////////////////////v7//v7+//7+
+        /v/+/v7//v39//39/f/9/f3//fz8//38/P/8/Pz//Pz7//z7+//8+/v/+/v6//v6+v/7+vr/+vr5//r5
+        +f/6+fn/+fn4//n4+P/5+Pf/+Pf3//j39//49/b/9/b2//f29f/39fX/9/b2/8S+uP/q5+b/5ODd/7yz
+        q/+8s6r/vLOq/72zqf+9s6r/vbOp/72yqf+9sqn/vbKo/7yxqP+8saj/u7Cn/7uwp/+6sKb/uq+m/7qv
+        pv+6r6X/uq6l/7mupP+4raT/ua6l/9jSzv+llon/wriw/+7r6v/q5+b/6ufm/+nm5f/p5uT/6OXk/+jl
+        4//o5OP/5+Ti/+fj4v/m4+H/5uLh/+Xi4P/m4uH/2tLP/5FqTv+YXTT/sW0+/8F1Qf/Ke0T/zHxF/817
+        Rf/MekT/y3lE/8t4Q//Kd0L/y3ZC/8Z2Qv+xZzHttGgz/8VsPv/Gajv/xmw9/8dtPf/HbT7/x209/8dt
+        PP/Hbj3/x3A+/8hxQP/JckD/yXJB/8lzQf/EcT//t2k6/6hmPv/ey7//////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////////////////////////////////////7+/v/+/v7//v7+//7+/f/9/f3//f39//39
+        /P/9/Pz//Pz8//z8/P/8+/v/+/v7//v7+//7+vr/+/r6//r6+f/6+fn/+vn5//n5+P/5+Pj/+fj3//j4
+        9//49/f/+Pf2//f29v/49/f/xb64/+vp5//e2tb/p5yR/6ibkP+onJD/qZyQ/6mckP+pnJD/qZyP/6mb
+        j/+pm4//qZuP/6ibj/+om47/p5qO/6eajv+nmY3/p5mN/6eZjP+mmIz/pZiM/6WXi/+nmI3/0svF/6aW
+        iv/CuLH/7+zs/+vp5//r6Of/6ufm/+rn5v/q5+X/6ebl/+nl5P/o5eP/6OTj/+fk4v/n4+L/5uPh/+bj
+        4v/f2tf/nXxl/5NaMv+uazz/wHVB/8p7Rf/NfEb/zHtE/8x6RP/LeUT/y3hD/8p4Q//Ld0P/xnVC/7Jo
+        Me20aDP/xm0//8ZrPP/Gazz/x209/8dtPf/HbTz/yG8+/8hvPv/IcUD/yHJA/8lyQP/Jc0D/yXNA/8Vx
+        P/+3ajv/qGc+/97Lv///////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ///////////////////+/v7//v7+//7+/v/+/v7//f39//39/f/9/f3//fz8//z8/P/8/Pz//Pv7//z7
+        +//7+/v/+/r6//v6+v/6+vn/+vr5//r5+f/5+fj/+fj4//n4+P/5+Pf/+Pf3//n49//Gv7n/6ujm//j3
+        9v/39vb/9/b1//f19f/29fX/9vX0//X09P/19PP/9fPz//Tz8v/08vL/9PLx//Px8f/z8fD/8vHw//Lw
+        7//y8O//8e/u//Hv7v/w7u3/8O7t/+/t7P/u7Ov/pZaK/8O5sv/w7e3/7Oro/+zp6P/s6ej/6+jn/+vo
+        5v/q5+b/6ufl/+nm5f/p5eT/6OXk/+jl4//n5OP/5+Ti/+Tg3/+ni3j/j1gw/6xqO/++dUL/yXtF/818
+        Rv/NfEf/zHtE/8t5RP/LeUT/y3hD/8t4Q//GdkL/smgy7bVpNP/GbT//xmo8/8dtPv/HbT7/x249/8hu
+        Pv/Ibj7/yHE//8hxP//Jcj//yXJA/8lzQP/JdED/xHI//7hqO/+oZz7/3su/////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        /////////////////////////////////////////////////////////////////////////v7+//7+
+        /v/+/v7//v7+//79/f/9/f3//f39//39/P/9/Pz//Pz8//z8+//8+/v/+/v7//v7+v/7+vr/+vr6//r6
+        +f/6+fn/+vn5//n4+P/5+Pj/+fn4/8bAuv/r6ef/+fj4//n4+P/49/f/+Pf3//j29v/39vb/9/b1//b1
+        9f/29fT/9vT0//X08//18/P/9PPy//Tz8v/08vL/8/Lx//Px8f/y8fD/8vDw//Lw7//x7+//8e/u/+/t
+        7P+ll4r/xLqy//Hv7v/t6+r/7erp/+zq6f/s6ej/7Ono/+vo5//r6Ob/6ufm/+rn5v/p5uX/6ebk/+jl
+        5P/o5eP/6ebl/7CYh/+MVS7/qmk7/711Qv/Je0X/zXxG/8x8Rf/MekT/zHpE/8x6RP/LeUP/y3hD/8Z3
+        Q/+zaTLttmk0/8VtP//FaTr/xms8/8ZsPf/Ibz//yG4+/8hvPv/IcD//yXFA/8hwP//JckD/ynRA/8hz
+        P//Ecj//uGs8/6hnPv/ey7//////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ///////////////////////////////////////////////+/v/+/v7//v7+//7+/v/+/f3//f39//39
+        /f/9/f3//fz8//z8/P/8/Pv//Pv7//z7+//7+/r/+/r6//v6+v/6+vn/+vn5//r5+f/6+vn/x8G7/+3q
+        6f/u6+r/1M/K/9TPyf/Uzsn/1M7J/9TOyP/Uzsj/1M7I/9PNx//Tzcf/08zG/9LMxv/SzMb/0cvF/9HL
+        xf/RysT/0crE/9DJxP/QycP/0MnD/8/Iwv/QycP/49/c/6aXi//Eu7P/8vDv/+7s6//u6+r/7uvq/+3q
+        6f/t6un/7Oro/+zp6P/r6Of/6+jn/+ro5v/q5+b/6ubl/+nm5P/r6Oj/t6GS/4xXMP+paDr/vHRB/8h7
+        Rf/NfUb/zXxG/8x7Rf/Ne0X/zHpE/8t5Q//LeEP/xndD/7RpMu22ajT/xWw9/8ZqO//HbT3/xmw8/8du
+        Pf/Ibj7/x289/8dwPv/JckD/yHI//8pzQf/LdUL/yXVC/8VyP/+3ajv/qGc+/97Lv///////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////////////7//v7+//7+/v/+/v7//v39//39/f/9/f3//f39//38/P/8/Pz//Pz7//z7
+        +//8+/v/+/v7//v6+v/7+vr/+vr6//v6+v/Hwbv/7uzr/9zY1P+ekYX/nZCD/56Rg/+ekYP/n5GD/5+R
+        g/+ekYP/npGC/56Qgv+ekIL/no+B/52Qgf+dj4H/nY6B/52Ogf+djoH/nY6A/5yNgP+cjYD/nIx//5+Q
+        g//RysT/qJmN/8W8tP/y8fD/7+3s/+/s6//v7Ov/7uzr/+7r6v/t6un/7erp/+zq6f/s6ej/6+nn/+vo
+        5//r5+b/6ufm/+vp6P+/rJ//jlo1/6dnOf+8dUH/yHtF/8x9Rv/OfUb/zXtF/8x6Rf/MekT/y3lC/8x5
+        RP/HeEP/tGkz7bdqNf/GbT//x2w9/8dtPv/Hbj7/yG8+/8huPv/IcD7/yHA+/8lyQP/Jc0H/ynNB/8p0
+        QP/JdED/xHJA/7drPP+oZz//3su/////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////////////////////////////////////////////////////////////////////7+
+        /v/+/v7//v7+//7+/f/9/f3//f39//39/f/9/Pz//Pz8//z8/P/8+/v//Pv7//v7+//7+vr//Pv7/8jC
+        vP/t6+r/+vn5//f29f/39vX/9vX1//b19P/29PT/9fTz//X08//18/L/9PPy//Ty8v/08vH/8/Lx//Px
+        8P/z8fD/8vDv//Lw7//y8O//8e/u//Hv7v/w7u3/8O7t//Hv7v+nmYz/xr21//Ty8v/w7u3/8O7t/+/t
+        7P/v7ez/7+zr/+7s6//u6+r/7evq/+3q6f/s6un/7Ono/+vp5//r6Of/7Orp/8Cuof+OWzb/p2g5/7x1
+        Qv/IfEX/zH1H/818Rf/NfEb/zHtF/8x5RP/LeUP/zHlE/8d3Q/+1ajPtt2s1/8ZuQP/Gazv/x209/8dt
+        Pf/Hbj3/yG8+/8hxP//IcD7/yXE//8lzQf/Kc0D/yXRA/8l2Qv/Fc0D/t2w8/6loP//ey7//////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ///////////////////////////////////////////////////+/v7//v7+//7+/v/+/v7//v39//39
+        /f/9/f3//f38//38/P/8/Pz//Pz7//z7+//8/Pz/yMO9/+7s6v/8+/v//Pv7//v7+//7+/r/+/r6//r6
+        +v/6+fn/+vn5//n5+P/5+Pj/+fj4//j39//49/f/+Pf2//f29v/39vX/9/X1//b19f/29PT/9fT0//X0
+        8//18/P/8/Hx/6eZjf/Hvrb/9fPz//Hv7v/x7+7/8O7t//Du7f/v7ez/7+3s/+/s6//u7Ov/7uvq/+3r
+        6v/t6un/7erp/+zp6P/t6+v/wa+h/5BdN/+oaTr/vXVC/8h7RP/MfUX/zXxF/818Rf/Me0T/zHpF/8x6
+        RP/MekT/x3hD/7VqNO24azb/xm4//8drPP/HbT7/yG4+/8hwP//IcD7/yHJA/8lxP//JckD/yXJA/8p0
+        Qf/KdEH/yXVB/8V0Qf+4bDz/qWk//97Lv///////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////////////////7+//7+/v/+/v7//v7+//79/f/9/f3//f39//39/P/9/Pz//Pz8//39
+        /f/Jw73/7+3r//b08//n5OH/5+Th/+fk4P/n4+D/5+Pg/+bj4P/m4t//5uLf/+bi3//l4d7/5eHe/+Xh
+        3f/k4N3/5ODd/+Tf3P/j39z/49/b/+Pe2//i3tr/4t7a/+Le2v/t6uj/qJqO/8e+t//19PT/8vDw//Lw
+        7//x7+7/8e/u//Hu7v/w7u3/8O3t/+/t7P/v7ez/7uzr/+7r6v/t6+r/7evq/+/t7P++qZv/j1s0/6pr
+        PP+9dkL/yXxF/81+Rv/NfUX/zX1G/818Rv/Me0X/zHlD/8x6RP/IeET/tms17blsNv/Gbj//x2s8/8Zs
+        Pf/Hbj3/yG8+/8hwP//IcUD/yXFA/8lyQP/Jcj//ynRB/8p1Qf/KdkL/xXRB/7htPf+paD//3su/////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ///////////////////////////////////////////////////////////////////////////////+
+        /v/+/v7//v7+//7+/v/+/f3//f39//39/f/9/f3//v39/8nEvv/x7+7/3NjU/5aJev+WiHn/l4l6/5iK
+        ev+Yinr/mIp6/5iJev+YiXr/mIl5/5iJef+YiHn/mIh5/5eIeP+XiHj/l4d4/5eHeP+Xh3f/loZ3/5WF
+        dv+WhXb/l4d3/9DJw/+qnJD/yL+4//b19f/z8fD/8/Hw//Lw8P/y8O//8e/v//Hv7v/x7+7/8O7t//Dt
+        7f/v7ez/7+3s/+7s6//u7Ov/8O7u/7ihkP+OWDD/rGw8/793Qv/KfUb/zn9G/81+R//NfUb/zXxG/8x7
+        Rf/MekT/zHpE/8h5Rf+3bDTtuWw2/8ZuP//HbDz/x209/8huPf/Ibz//yHA+/8hxQP/JcT//yXNB/8ly
+        QP/JdED/ynZC/8p3Qv/FdUL/uGw9/6lpP//ey7//////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        /////////////////////////////////////////////////////////v7+//7+/v/+/v7//v79//39
+        /f/+/v7/ysS+//Du7f/4+Pf/7uzq/+7r6f/t6+n/7evp/+3r6P/t6uj/7ero/+zq5//s6ef/7Onn/+vp
+        5v/r6Ob/6+jl/+vo5f/q5+X/6ufk/+rm5P/p5uP/6eXj/+nl4//p5eL/8O7s/6mcj//IwLj/9/b2//Ty
+        8v/z8vH/8/Hx//Px8P/y8fD/8vDv//Hv7//x7+7/8e/u//Du7f/w7u3/7+3s/+/t7P/v7ez/tJqH/5Ja
+        Mf+ubTz/wHdB/8p+Rv/OgEf/zX5G/819Rv/NfUb/zXxG/817Rf/MekP/yHlE/7dsNe25bTf/xm5A/8dt
+        Pf/HbT3/yG8+/8hwQP/Hbz7/yHA//8lxP//Jc0H/ynRB/8p0Qf/KdUH/yndD/8V1Qf+4bTz/qWk//97L
+        v///////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////////////////////7+/v/+/v7//v7+///////Kxb//8O/t//7+/v///v///v7+//7+
+        /v/+/v7//v39//39/f/9/f3//fz8//z8/P/8/Pz//Pv7//v7+//7+/r/+/r6//r6+v/6+fn/+vn5//n5
+        +P/5+Pj/+fj4//j39//39vX/qpyP/8nBuf/49/f/9fPz//Tz8v/08vL/9PLx//Px8f/z8fD/8vHw//Lw
+        7//y8O//8e/u//Hv7v/w7u3/8O7t/+vo5v+qjHX/l14z/7FvPv/CeUT/y39H/8+ASP/Of0f/zX1G/818
+        Rf/Me0T/zHpE/8x6RP/IeUT/uGw17bptN//Hbj//x2w9/8duPv/Ibz7/yG8+/8hwP//IcT//yHE//8ly
+        QP/KdEH/yXVB/8l0QP/Kd0P/xXVB/7htPf+paD//3su/////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        /////////////8vGwP/x8O7/+/v6//Py8P/z8fD/8/Hv//Px7//y8e//8vDv//Lw7v/x8O7/8e/u//Hv
+        7f/x7+3/8O7t//Du7P/w7uz/8O3s/+/t6//v7ev/7+zq/+7s6v/u6+r/7uvp//Py8P+rnZD/ysK6//n4
+        +P/29PT/9fTz//Xz8//18/L/9PPy//Ty8f/z8vH/8/Hx//Px8P/y8PD/8vDv//Hv7//x8O//5+Lf/556
+        Xv+dYjb/tnNA/8V8Rv/Mf0f/zoBI/85/SP/Nfkb/zn1G/818Rv/MekT/zHlD/8h5Q/+4bTbtum44/8Zu
+        P//HbD3/yG8+/8huPv/Hbj7/yHA//8lxQP/IcT//yXJA/8p1Qv/KdEH/ynRA/8l2Qv/FdEH/uG08/6lp
+        QP/ey7//////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////zMbA//Py8f/g3Nj/m46A/5uN
+        fv+bjn7/m45+/5uNfv+bjX7/m41+/5uNfv+bjH3/m419/5qMff+ajH3/mot8/5qLfP+ajHz/mYt8/5mK
+        e/+Zinv/mop7/5qLfP+djX3/1c7H/62fkv/Lwrv/+vn5//b19f/29fT/9vT0//X08//19PP/9fPy//Tz
+        8v/08vH/8/Lx//Px8f/z8fD/8vDw//Px8f/j3Nf/lWlI/6JmOP+5dUH/x3xF/82ASP/OgEj/zn9H/81/
+        R//Ofkf/zX1G/8x6Q//NekX/yHpF/7ltN+27bjf/x29B/8dtPf/Ibz7/yG8+/8hxP//IckD/yXFA/8ly
+        QP/JckD/yXRA/8p1Qf/KdUH/yndC/8V1Qf+5bj3/qWpA/97Lv///////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ///////////////////Fvrj/7evp//j39v/o5eL/6OTh/+jk4f/o5OH/5+Tg/+fj4P/n4+D/5+Pg/+bj
+        3//m4t//5uLf/+bi3v/l4d7/5eHe/+Xh3v/k4d3/5ODd/+Tg3P/k4Nz/5N/c/+Tg3P/v7ev/o5OE/83E
+        vP/6+vr/9/b2//f29f/39fX/9vX0//b09P/19PP/9fTz//Xz8//08/L/9PLy//Py8f/z8fH/9PPy/9HD
+        uP+TYjz/qGo7/7x3Qv/Jfkf/zoBI/86AR//OgEf/zX5G/819Rv/NfUf/zHtF/817Rf/JekX/um437bxu
+        OP/Hb0D/x209/8hvPv/Hbj3/yHA+/8hxQP/JckD/yXNB/8p0Qf/KdEH/ynVB/8p2Qv/JdkL/xXVC/7lt
+        Pf+paT//3su/////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        /////////////////////////////////////////////////////////////7+4sP/Iwrv/////////
+        ///////////////////////////////////+/v///v7+//7+/v/+/v7//f39//39/f/9/f3//fz8//z8
+        /P/8/Pz//Pv7//v7+//7+/v//f39/+Xh3f+Ld2T/29XP//r6+v/49/f/+Pf2//f29v/39vX/9/X1//b1
+        9P/29fT/9fTz//X08//18/P/9PPy//Ty8v/19PT/u6OR/5VgNv+vbz7/wXpE/8t/Rv/OgUj/z4FJ/86A
+        SP/Nf0f/zX1G/819Rv/MfEb/zXtF/8l6Rf+7bzftvW85/8dwQf/HbT3/yG8+/8hvP//IcD//x289/8ly
+        QP/Jc0H/ynNA/8l0Qf/KdUH/yndC/8l2Qf/GdUL/uW08/6lqP//ezL//////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////5eLe/5iMfv/PycL/9/b1//////////////////////////////////7+
+        ///+/v7//v7+//79/v/+/f3//f39//39/f/9/Pz//Pz8//z8/P/8+/v//Pv7//j39v/h3dj/mIZ1/6KS
+        g//08/H/+fn4//n49//4+Pf/+Pf3//j39v/39vb/9/b1//f29f/29fX/9vX0//b09P/19PP/9fT0/+7r
+        6f+nhWr/nGI1/7VyP//FfUb/zIBH/8+BSf/PgUj/zn9H/85/R//Nfkf/zX1G/818Rv/Ne0X/yXpF/7tv
+        N+29bzj/x3BB/8duPf/Ibj3/yHA//8hxP//IcD//yXJA/8lzQf/Jc0D/ynVC/8p1Qf/KdkL/ynhE/8Z2
+        Qv+5bj3/qmk//97Lv///////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////19LN/5WI
+        eP+ajXz/ppmJ/6iaiv+pm4v/qpuL/6qbiv+qm4v/qpuK/6qbiv+qm4r/qpuK/6qbiv+qm4r/qpqJ/6qa
+        if+qmor/qpqJ/6uaif+qmon/pJKB/415ZP+klIX/6ufk//v7+v/6+fn/+fn4//n4+P/5+Pj/+fj3//j3
+        9//49/b/9/b2//f29f/39vX/9vX1//b19P/39vb/39XO/5drRv+majv/u3dC/8h/R//OgUn/z4FJ/86A
+        R//Of0b/zX5G/81+R//OfUb/zXxF/817Rf/Kekb/vG837b1vOf/HcEH/x24+/8huPf/Ibj3/x289/8hx
+        P//JckD/yXJA/8lzP//JdEH/ynRB/8p2Qv/KeET/xnZD/7lvPf+paT//3su/////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////8vDu/9jTzP/SzMP/1MzE/9TNxP/VzcT/1c3E/9XN
+        xP/VzcT/1c3E/9XNxP/VzcT/1c3D/9TMw//UzMP/1MzD/9TMw//UzML/1MvC/9PLwv/Uy8P/4NrV//f1
+        9P/8+/v/+/r6//r6+v/6+fn/+vn5//r5+P/5+Pj/+fj4//n49//49/f/+Pf2//j29v/39vb/9/b1//f2
+        9v/Bq5n/l2I3/69wPv/Be0X/y4FJ/8+DSf/PgUj/zoBH/85/Rv/Nf0b/zX1G/819Rv/NfEb/zHtE/8p7
+        Rv+8cDjtvnA5/8dwQf/Hbj7/yG8+/8hvPv/HcD7/yXJA/8lzQf/Jc0D/ynRB/8p0Qf/KdkH/yndC/8p4
+        Q//GdkL/uG49/6lqQP/ey7//////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ///////////////////+/////v7+//7+/v/9/f3//Pz7//z7+//7+/v/+/v6//v6+v/7+vr/+vn5//r5
+        +f/6+fn/+fj4//n4+P/5+Pf/+Pf3//j39//4+Pf/7enm/6R+YP+hZzj/uHVB/8Z9Rv/Ogkn/z4NJ/8+C
+        Sf/PgUj/zoBH/85/R//Nfkf/zX1G/818Rv/Ne0b/yntG/71wOO2/cTr/x29A/8dtPf/Hbj3/x28+/8dv
+        Pv/IckD/yXNB/8lyQP/Jc0D/ynZC/8p1Qf/KdkL/ynlE/8V0Qf+5bjz/qWk//97Lv///////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////////////////////////////////////Ty8P/c1s7/3tbM/+HXy//j2Mn/5NfH/+PV
+        xP/i08H/4dG+/9/Pu//ezLj/3cu2/9zIsv/axq//2MOs/9fCqf/Wv6b/1L2j/9K6oP/Ntp3/xa6W/7yo
+        k//j3db//f39//z8+//8+/v//Pv7//v7+//7+vr/+/r6//r6+f/6+fn/+vn5//n5+P/5+Pj/+fj4//n5
+        +f/QwLP/l2U8/61wP//Ae0X/yoBH/86DSf/Pg0n/0INJ/8+CSf/OgEf/zn9G/81+Rv/Nfkb/zX1H/817
+        Rf/Ke0X/vXE57b9xOv/Hb0D/x208/8huPv/IcD//x28+/8hwP//JckD/yXNB/8p0Qf/KdUH/ynVB/8p3
+        Qv/KeUT/xnZC/7huPf+qakD/3su/////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////4d3Y/4BpTf+DYzz/mHNF/6d9Sf+yhE3/tYdP/7aHTv+3hk3/t4dO/7eGTP+3hUv/t4RK/7eD
+        Sf+2gkj/t4NJ/7eDSf+2gUj/sn9G/6l3Qf+Xajn/k29K/+Xe1//+/v7//fz8//z8/P/8/Pz//Pv7//z7
+        +//7+/v/+/r6//v6+v/7+vn/+vn5//r5+f/6+fn/8e7r/6qHaf+gZzj/t3ZC/8V/Rv/NgUf/0IRK/9CD
+        Sf/Pgkj/z4JJ/86AR//OgEf/zX5G/819Rf/NfEb/zXtF/8p6Rf++cTntv3E6/8dwQf/HbTz/x249/8hw
+        Pv/IcUD/yXJA/8hxP//KdEH/ynRA/8p1Qv/KdUH/ynZC/8p4Q//GdkL/uG08/6pqQP/ey7//////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ///////////////////////////////////////////////////5+Pf/n412/35dM/+ZcT//rn9G/7yJ
+        S//Ej0//x5FQ/8iSUf/JklL/yJJR/8iSUP/JkVD/yZFR/8mQUP/JkE//yI5P/8aNT/+/iEz/sn1F/5tt
+        O/+1m4H/+fj3//7+/v/9/f3//f39//38/P/9/Pz//Pz8//z7+//8+/v/+/v7//v7+v/7+vr/+/r6//v6
+        +v/OvK3/mmg+/65xPv/AfEX/yoFI/8+DSv/QhEr/0INJ/8+CSf/PgUj/zoBI/86ASP/Of0j/zX1G/818
+        Rf/Ne0X/yntG/79xOu3AcTr/x3BA/8dtPP/Ibj7/yHA//8hxP//JckD/yXNB/8lzQf/KdED/ynVC/8p1
+        Qf/Kd0P/ynhD/8Z1Qv+5bj3/qmo//97Lv///////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ///////////////////WzsT/hmhD/5VuPf+tgEf/wI1O/8uVUv/RmVX/1JtW/9WaVf/VmlX/1ZtV/9ab
+        Vv/VmlX/1JlU/9OXU//RlFL/zJFQ/8GJTf+ve0T/oXhL/9/UyP///////v7+//7+/v/+/f3//f39//39
+        /f/9/fz//fz8//z8/P/8/Pv//Pv7//v7+//8/Pz/6+Tf/6R8W/+kajr/uXhC/8eBSP/Og0j/0IRK/9CE
+        Sv/Qg0n/z4JJ/8+BSP/OgUj/zoBH/81+Rv/NfUb/zXxF/8x7RP/Ke0b/v3I67cFyO//HcUH/xmw7/8hu
+        Pf/Ibz//x3A+/8lyQP/Jc0H/ynRC/8p1Qf/KdEH/y3dC/8p3Qv/Kd0P/xnZC/7luPf+qaj//3su/////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////////////////////////////////////////////////////r5+P+yoYz/h2Q4/591
+        Qf+1hkr/xpFR/8+YVf/Um1X/15xW/9idVv/YnVb/2ZxW/9icVv/VmVT/05dU/86UUv/Fi0z/tYBH/6Fy
+        P//AqI//+/r4/////////v7//v7+//7+/v/+/v7//v39//39/f/9/f3//f39//38/P/8/Pz//fz8//j3
+        9v+8oIr/nWg7/7N1Qv/Cfkb/y4RK/8+FSv/RhUr/0IRJ/8+DSf/Pg0n/z4JJ/86BSP/OgEf/zX5G/81+
+        Rv/NfUb/zHtE/8p7Rf/AczrtwXI7/8hxQf/HbT3/yG4+/8hvP//IcUD/yXJA/8lyQf/Jc0D/ynRB/8l1
+        Qf/KdkH/ynZB/8p3Qv/FdUH/uW49/6lqQP/ey7//////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        /////////////////////////////+/s6P+hi3D/iGQ3/591Qf+yg0j/v4xO/8iRUf/NlVP/0JdU/9GZ
+        Vf/RmFX/z5VS/8uSUP/Hj1D/vohL/7J+Rv+fcD3/r5Jx//Ds5/////////////////////////////7+
+        /v/+/v7//v7+//7+/f/9/f3//f39//39/f/9/f3/1MO1/55tRP+tcT//vnxE/8mCR//OhUr/0IZL/9GG
+        S//RhUr/0IRK/8+DSv/PgUf/z4FI/86AR//Nf0f/zn5H/859Rv/Me0T/yntF/8BzO+3Bczz/x3BB/8ds
+        PP/Ibz//yG8+/8dvPv/JcT//yXJA/8p0Qf/KdUL/ynZC/8p1Qf/Kd0L/yXdB/8V1Qf+5bj3/qWk//97L
+        v///////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        /////////////////////////////////////////////////////////////////////////////+vn
+        4v+ijXP/h2M5/5duPP+nekT/soJI/7qGSv++ik3/wIxO/8CLTv++iEv/uYRI/7KAR/+nd0H/mm4+/6yP
+        b//q5N7////////////////////////////////////////////+/v7//v7+//7+/v/+/v7//////+Xc
+        1P+le1b/p208/7p6RP/Hgkj/zoZK/9CGS//Rhkr/0YVK/9CESv/QhEr/z4NJ/86AR//Of0f/zn9H/81/
+        R//NfUb/zXxF/817Rf/LfEb/wXM77cJzPP/HcEH/x24+/8huPv/Hbz3/yHA//8hxP//JckD/ynNB/8p0
+        Qf/KdkL/ynZC/8p2Qv/KeEP/xnZC/7lvPv+qakD/3su/////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////////////////////////////////////Du6/+5qpf/jXBM/4pmOf+Uazr/nnE+/6R3
+        Qv+nekT/p3lD/6R1QP+dcDz/l2w8/5l1Tf+9qJH/7+vm////////////////////////////////////
+        /////////////////////////v7+///////w6ub/r4ts/6NsO/+4eUT/xIBH/82GS//Qhkv/0IZK/9GH
+        S//RhUr/0IRJ/8+DSf/Pgkn/z4JI/86ASP/OgEj/zX9H/819Rv/NfEX/zXtF/8t7Rv/BczvtwnM8/8hx
+        Qv/HbT3/yG4+/8hvPv/HcD//yXE//8lyQP/Kc0H/ynRB/8p1Qf/KdUH/yndD/8p4Q//GdUH/uW49/6pp
+        QP/ey77/////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////z8+//h29T/uqqY/5+Gaf+TdFH/jmxE/41qQP+QbUT/l3ZR/6OIaf+9qpX/4trR//v6
+        +f//////////////////////////////////////////////////////////////////////9PDt/7ma
+        f/+ibDz/tXhD/8OASP/LhUr/0IhM/9GITP/Rh0v/0YZK/9GESv/Qg0j/z4JH/8+CSf/Pgkn/zoBH/85/
+        Rv/Nfkb/zX1G/817RP/Me0X/y3xH/8J0PO3DdDz/x29A/8dsPP/Ibz7/yHA//8dwP//IcT//yXJB/8lz
+        Qf/KdEH/ynVB/8p2Qv/Kd0L/ynhD/8V1Qf+4bTz/qWpA/97Lv///////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ///////////////////////////////////////////////////////////////////+/v//9fPw/+rm
+        4P/k3tf/49zU/+Xe1//q5eD/9PLv//7+/v//////////////////////////////////////////////
+        //////////////////////////////Tw7P+6nIH/oWw9/7R4Q//CgEf/y4VL/8+IS//RiU3/0ohL/9GH
+        S//Sh0v/0IVK/8+DSP/Pg0n/z4NJ/8+BSP/OgEj/zoBH/81/R//NfUb/zXtE/8x6RP/LfEb/wnU87cN0
+        Pf/IcEH/x208/8hvPv/IcD//yHA//8lzQf/Jc0H/yXJA/8p0Qf/KdUH/ynVB/8p2Qv/KeET/xnZC/7lu
+        Pf+qakD/3su/////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ///////////////////////////////////////////////////////////////////z7ur/upyA/6Jt
+        Pf+0d0H/woFI/8qGSv/PiEv/0YlM/9KITP/RiEz/0YZK/9GGSv/RhUv/0IRK/8+DSf/Pgkn/z4JJ/86B
+        SP/Of0f/zX5G/819Rv/NfUb/zHtF/8t8R//DdD3txHU9/8hwQf/HbT3/yG8//8hvPv/Hbz7/yXE//8ly
+        QP/Jc0H/ynVB/8p1Qf/KdkL/yndD/8p4Q//FdUH/uG49/6lqQP/ey7//////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////7ebg/7eWd/+kbz7/tXlD/8KCSP/Lh0v/0IhL/9GJTf/SiUz/0olN/9GI
+        TP/Rh0v/0YZL/9CFSv/QhEr/z4JI/8+BSP/PgUj/zoFI/85/R//NfUb/zX1G/8x7RP/Me0X/y3xH/8N1
+        Pe3EdT3/yHBB/8dtPf/Ibz//yG8//8hwP//JckD/yXJB/8pzQf/KdEH/ynVC/8p1Qv/Kd0P/yndC/8Z1
+        Qv+4bTz/qWk//97Mv///////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        /////////////////////////////////////////////////////////v7+/+TZzv+wimf/p3A//7d7
+        RP/Dgkf/zIdL/9CKTf/Si0//0opO/9KJTP/SiEv/0YhM/9GHS//RhUr/0IVK/9CESf/Pgkj/z4JJ/86A
+        R//OgEf/zn9H/819Rv/NfUf/zHtF/8x7RP/MfEf/xHY97cV1Pv/IcEH/x249/8duPv/Ibz7/x3A+/8hw
+        P//JckH/yXJB/8p0Qf/KdUH/ynZC/8p3Q//Jd0L/xnZC/7htPP+paT//3su/////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////j18//Svqv/qX1T/6tzP/+7fkb/xYRJ/82JTf/Rik3/0YpM/9OLTv/Sik3/0olM/9KI
+        TP/RiEz/0YdL/9GFSv/QhEr/z4JI/9CDSv/Pgkj/zoBH/86AR//Nf0b/zX5H/819Rf/MfEX/zXtF/8t8
+        Rv/Edj3txnY+/8hxQv/HbT3/x249/8hvPv/IcD//yHE//8lxQP/JcUD/yXI//8lzQP/KdEH/ynZC/8l3
+        Q//GdkL/uW09/6lpP//ey7//////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////////////////////////////////////39/f/n3tT/vJx9/6d0RP+xeEH/v4BH/8mH
+        S//Oik3/0YxO/9OMTv/Ti03/04pM/9KKTf/SiUz/0YhL/9GHS//Rhkr/0YVK/9CESv/Qg0n/0IRL/8+C
+        SP/OgEf/zn5G/81+Rv/Nfkf/zX1G/8x7Rf/Me0X/y3xG/8V3Pe3Gdj//yHFC/8ZsPP/Hbj7/yG4+/8hw
+        P//JckH/yXJA/8lyQP/Jc0D/ynVC/8p0Qf/KdkL/yXdC/8V2Qv+6bz7/q2pA/9/Mv///////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////////////////////////////////////////////////////////////////////39
+        /P/v5+H/ya+W/6x/U/+sdUD/un5G/8OESf/KiEr/0ItN/9KNT//UjU//1IxO/9OLTf/Tik3/0otN/9OK
+        Tf/SiUz/0YdL/9GGSv/QhUv/0YVK/9CDSf/Pgkn/z4JJ/86AR//OgEf/zX5G/85/SP/NfUb/zHxG/8x6
+        Rf/LfEf/xXc+6cZ4QPzIckP/x2w9/8duPf/Hbj3/x289/8hwP//JckD/yXJA/8lzQP/KdED/ynVC/8p1
+        Qf/JdkL/xnZC/7xvPv+ubEH/4M3A////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////////////////////////r59//n3dP/ya6U/7GGXP+sdkL/tnxE/8GDSf/Ih0r/zotO/9GN
+        Tv/SjU7/04xN/9SNTv/TjE3/04tN/9OLTf/Sik3/0olM/9GHS//Rhkr/0YZL/9GFS//QhEr/0INJ/8+D
+        Sf/PgUf/zn9G/86AR//NfUX/zX5H/818Rf/MfEb/zXtG/8t+Sf/FeD7bxnlA68l0Rf/HbD3/x24+/8hu
+        Pv/Hbz7/x3A+/8lxP//IcD//yXJA/8lzQP/KdEH/ynZC/8l2Qv/HdkH/vnE//7NvQv/jzsH/////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ///////////////////////////////////////////////////+/v7/+/n4/+zk2//YxbL/v558/65/
+        UP+ueEL/uH1F/8GESf/IiUz/zYxO/9CNT//TjlD/1I5P/9SPUP/Ujk//04xN/9OMTv/Tik3/04tO/9KJ
+        TP/RiEv/0ohM/9GHS//Rhkv/0YVL/9CESv/Pg0n/z4JJ/86AR//OgEf/zX5G/81+R//NfUb/zXtE/8x7
+        Rf/Ne0b/zH9K/8V2PMPGdz3JyndG/8dtPv/HbT3/yG8+/8hvPv/Hbz7/yXJA/8hyQP/Jc0H/ynRB/8l0
+        QP/JdEH/ynZC/8d3Qv/Bcj//unNE/+LIt//49PH/9/Lw//fy7//28u//9vLv//by7//28u//9vLv//by
+        7//28u//9vLv//by8P/28/D/9vPw//bz8P/28/D/9vPw//bz7//28/D/9/Pw//fz8P/38/D/9/Pw//fz
+        8P/38/D/9/Pw//fz8P/38/D/9/Pw//fz8P/38/D/9/Pw//fz8P/38/D/9/Pw//fz8P/39PD/9/Tw//f0
+        8P/39PD/9/Tw//f08P/39PD/9/Tw//f08P/39PD/9/Tw//f08P/39PD/9/Tw//f08P/39PD/9/Tw//f0
+        8P/39PD/9/Tw//f08P/39PD/9/Tw//f08P/39PD/9/Tw//f08P/39PD/9/Tw//f08P/39PD/8+7p/+7m
+        3f/n3ND/3Mu5/8yzmP+7l3D/s4ZY/656Rf+ze0P/u4FH/8OFSf/JiUv/zo1P/9GPUP/TkFD/1I9Q/9SO
+        Tv/Ujk//1I5P/9SNT//UjU//04xO/9OLTv/Sik3/04pN/9GITP/Rh0v/0YZK/9GGS//QhUr/0IRJ/8+D
+        Sf/PgUn/zoFI/86ASP/Nfkb/zX5G/818Rf/Me0X/zHtF/818Rv/Mf0r/xXQ6n8Z2OpjKekj/x25A/8dt
+        Pf/Hbj3/yG8//8dwPv/IcD//yXJA/8lzQv/KdEH/ynRB/8p0Qf/KdkL/yXhD/8V0Qf/Ac0L/w4Rb/8KL
+        aP+8iGb/uIZk/7aFZP+1hmT/todl/7eHZf+2h2X/t4hl/7eHZf+3iGX/t4lm/7iKZ/+3imb/t4pm/7iL
+        Z/+4jWj/uI1o/7mNaP+5jmn/uY5o/7qPaf+6kGr/uo9p/7qQaf+7kWr/u5Jr/7uSa/+7k2v/u5Jr/7uT
+        a/+7k2v/vJRs/7yUbP+8lGv/u5Vs/7yVbP+9lm3/vJZt/72Xbf+9l23/vZdt/72Xbv+9mG7/vZht/72Y
+        bv+9mG7/vplv/72Ybv+9mW7/vZlu/72Zbv+9mW//vZlu/72Zbv+9mW//vZlu/72Zb/+9mW//vZlu/72Y
+        bv+9mG7/vZhu/72Ybv+9mG7/vZhu/76Ybv+6kmb/totb/7KCTv+wfEX/tH5G/7iARf+9g0j/w4dL/8eK
+        Tf/MjU7/0I9Q/9OQUf/UkVH/1JFQ/9SQUP/Vj1D/1Y9P/9SOT//Ujk//1I1P/9OMTf/Ti07/04tO/9KL
+        Tv/SiUz/0YhM/9CFSf/RhUr/0IVK/9CESv/Pg0n/z4JI/8+BSP/OgEf/zn9H/81+Rv/Nfkb/zXxF/8x7
+        Rf/MekT/zX5K/8p+SPjFdTlsxnY6Xsp8RvPJdEb/xmw8/8duPv/Ibz7/yHA+/8hxP//IcT//yXJA/8ly
+        QP/JdED/ynVC/8p2Q//Jd0P/yHZC/8V1Qv+/cD3/um48/7ZsO/+0azr/s2w7/7JsO/+ybTz/s248/7Nu
+        PP+0bz3/tG89/7RxPf+1cT3/tXI+/7ZzPv+2dD//tnU//7Z1P/+2dkD/uHdB/7h4Qf+4eUH/uXlC/7l6
+        Qv+4e0P/uXtD/7l7Qv+5fEP/un1E/7p+RP+6f0X/u39F/7t/Rf+7gEb/u4JH/7uBRv+7gkb/u4NH/7uD
+        Rv+8hEf/vIRH/7yFSf+9hUn/vYVI/72GSf+9hkj/vYdJ/72HSf+9iEr/vodJ/76HSf++h0r/vohK/76I
+        Sv++h0n/vodJ/76ISv++iEn/vohK/72ISv+9iEr/vYdJ/72HSf+9hkj/vIVH/7yFSP+9hUf/voZI/7+H
+        Sf/Ah0n/w4pM/8WLTP/IjU//y41O/86QUP/QkFD/0pJR/9SSUf/VklH/1ZFR/9WRUP/VkVD/1JBQ/9WQ
+        UP/Ujk//1I5P/9SOT//UjU7/04xO/9OKTf/Sik3/0olM/9GIS//Rh0v/0YZK/9GFSv/QhEr/0IRJ/8+D
+        Sf/OgUf/zoFH/86AR//Of0f/zX5G/819Rv/NfEX/zHtF/8x5RP/OgU7/yHpC4sZ1OTfGdTgkyHpB1st6
+        Tf/GbDz/yG8//8hwP//IcD//yHA//8lyQP/Jc0H/ynNB/8p0Qf/JdEH/ynZC/8p3Q//JeEP/yXhD/8d2
+        Qf/FdkL/xHZC/8R3Qv/Dd0L/w3hD/8N5RP/EekT/xHpF/8V8Rf/FfEX/xX1G/8Z9Rf/Gfkb/x4BI/8eB
+        SP/HgUj/x4FH/8iCSP/Ig0n/yYRL/8mGSv/Khkv/yYZK/8qIS//LiU3/y4hM/8uKTf/Likz/zItN/8yM
+        T//NjU7/zYxN/82NT//Nj0//zI5O/82PT//NkE//zZFR/82RUP/OkVD/zpNR/86TUv/Pk1L/z5NT/8+U
+        U//PlFL/z5VT/8+VU//PlFL/z5VT/8+VU//PlVP/z5VT/8+WU//PlVL/z5VS/8+VUv/PlVP/z5ZU/8+V
+        U//PlFH/z5RT/8+TUv/PklD/z5NS/86TUv/OklH/z5JR/9CTUf/Qk1H/0pNR/9OTUv/VlVP/1ZRS/9WT
+        Uf/WlFL/1pJR/9aTUv/WklH/1pFQ/9WQUP/Vj0//1Y9Q/9SPUP/UjU7/1I1O/9OMTf/TjE7/04tO/9KK
+        Tf/SiUz/0YdK/9CFSf/RhUn/0YVL/9CESf/Pgkj/0INK/8+CSf/PgUj/zoBH/85/Rv/Nf0f/zX1G/818
+        Rv/MekT/zXxH/86DUP/Hdz23xnQ4Dcd3PgXHdzuTzH9N/8lyRP/HbT3/yG4+/8hwP//HcD7/yHE//8lz
+        Qf/Jc0H/ynRB/8p1Qv/KdUH/yndC/8p4Q//KeUT/ynlE/8t6RP/LekT/y3tF/8t6RP/Le0T/y31G/8x+
+        Rv/MfkX/zYBH/82AR//Og0n/z4NK/8+ESv/PhEr/z4VJ/8+GSf/Phkr/0YdL/9CJTP/RiUz/0YtO/9GL
+        Tf/Si03/0o1N/9KNTv/Tjk//1I9Q/9OQUP/UkVH/1ZJR/9SRUP/VklD/1ZNR/9WUUf/VlFH/1pZU/9aW
+        U//Wl1P/1pdU/9aXU//WmFT/1phU/9eZVf/XmVX/2JpV/9eaVf/XmlT/2JtW/9ibVv/Ym1b/15tV/9ib
+        Vv/Xm1X/15tW/9ebVf/Ym1b/2JtW/9ibVv/Ym1X/15pV/9iaVv/YmlX/2JpV/9eZVP/XmVX/15hU/9eY
+        VP/XmFT/15dU/9aWU//Xl1T/2JdU/9eWU//XlVP/15VT/9eTUv/Wk1H/1pNS/9aSUP/VkVH/1ZBQ/9WO
+        T//Ujk//1I9P/9SOT//UjU7/04xN/9OLTf/Sikz/0opN/9KITP/Rh0v/0YZK/9GFSv/QhEr/0IRK/8+C
+        SP/PgUf/z4FI/86BSP/NfkX/zX5G/819R//NfUb/zX1G/8x5Q//PgU//zIFL+8Z0OWrLgEkBxXI2AMd2
+        OT/KfETrzX5S/8dtPv/Hbj3/yG8+/8hwP//IcT//yXNB/8lzQf/Jc0D/ynVB/8l0QP/KdUH/yndD/8t4
+        RP/LeEP/y3pD/8x6RP/Me0X/zHxF/819Rv/NfUb/zn5G/8+BSP/OgUj/z4JJ/8+CSf/Qg0r/0IRJ/9CE
+        Sv/RhUr/0YdK/9GITP/SiEz/0opN/9KKTP/Ti07/04xO/9SNTv/Ujk//1I5O/9SOT//WkFH/1ZBQ/9WR
+        UP/WkU//1pJR/9eTUv/XlFL/15RT/9eUUv/XllP/15ZT/9iWU//YmFT/15hV/9iZVf/YmVT/2JlU/9iZ
+        VP/ZmlX/2ZtW/9maVv/ZmlX/2ZtW/9mbVf/Zm1b/2ZtW/9mbVf/ZnFb/2ZpV/9maVP/anFf/2ptW/9qb
+        V//ZmlX/2ZpV/9mbVv/Zm1b/2ZpV/9mZVf/YmFT/2JhU/9iYVP/Xl1T/2JdU/9eWVP/Yl1T/15VS/9eU
+        Uv/XlFL/15NS/9aSUf/WklH/1ZFQ/9WQUP/Vj0//1I5O/9SPUP/Ujk7/1I1O/9ONTv/Ti03/04pN/9KK
+        TP/SiEv/0YZK/9GHS//Rhkr/0IVK/9CDSf/Qg0n/z4NJ/8+CSf/PgUj/zoBI/81+Rf/NfUX/zn1G/819
+        Rv/Me0X/zXtH/9CHV//IekDUx3U5Icl7QgAAAAAAx3Y8CMd3O6DNglH/ynVI/8dtPP/Ibz//yHA+/8hx
+        P//JckH/yXJB/8pzQP/KdEH/ynRB/8p2Qf/KdkL/yndC/8p3Qv/LeUP/zHpE/8x7Rf/Me0X/zXxF/819
+        Rf/NfUb/zoBH/86BSP/Pgkj/z4JI/8+DSf/QhEn/0IRK/9CESv/RhUn/0YhM/9GIS//SiU3/0opN/9KJ
+        TP/Ti07/04xO/9SNT//UjlD/1I5P/9SPT//VkFD/1ZFR/9aRUP/WklH/1pNR/9aTUf/XlFL/15RS/9eV
+        Uv/XllP/15ZU/9eVUv/XllL/2JhU/9iYVP/YmVX/2JlV/9iZVf/YmVX/2JpW/9mbVv/Zmlb/2ZpV/9mb
+        Vv/ZmlX/2ZpV/9maVf/ZmlX/2ZpV/9qbV//Zm1f/2ZpV/9iZVP/ZmlX/2JlV/9maVv/Zmlb/2JlU/9iY
+        VP/Xl1P/15dT/9eXVP/XllP/2JdV/9eWU//XlVL/15NR/9eTUf/Wk1L/1pJQ/9WRUP/VkVL/1ZBQ/9SO
+        T//Ujk//1I1O/9SNT//UjE7/04tM/9OKTf/Sikz/0opN/9KJTf/Qhkr/0YZK/9GGS//QhUv/0IRK/8+D
+        Sf/Pgkj/z4FJ/86BSf/Of0f/zX5G/818Rf/NfEX/zXxG/8x5Q//QhVP/zIJN/MZ1OnnHekgAAAAAAAAA
+        AADFcjMAyHY6Ncp7QuHPhFj/yHBB/8duPf/IcD//yHA//8lxP//IcT//yXJA/8p0Qf/JdEH/ynZC/8p1
+        Qf/Kd0L/yndC/8t5Rf/LekT/zHpE/8x6RP/NfEX/zXxF/819Rv/NfUX/z4BI/86AR//PgUj/z4FH/9CD
+        SP/QhEr/0IVK/9GFSv/Rh0z/0YdL/9GIS//SiUz/0ohL/9OKTv/TjE7/1IxO/9SMTv/Ujk7/1I5P/9WP
+        UP/VkFD/1ZBR/9aRUP/WkVD/1pJR/9eUUv/Xk1H/15RS/9eVU//XlVP/15dU/9eXU//Yl1P/15dT/9eX
+        U//XmFT/2JlV/9iYU//YmFP/2JlU/9iZVP/Zmlb/2ZpW/9maVf/YmVT/2ZpU/9iZVP/YmlX/2ZtX/9mb
+        V//YmVX/2JlV/9mZVf/YmFP/2JlU/9iZVf/XmFX/15hU/9eXU//XllP/15ZU/9eWU//XllT/15VT/9eT
+        Uv/Xk1H/1pNS/9aRUP/WkVD/1ZBQ/9WQUf/VkFH/1I1O/9SNTv/Ujk//1I1P/9OMTf/Ti07/0opN/9KK
+        TP/SiU3/0YdL/9GHS//Rhkr/0YVL/9CESf/QhEn/z4JJ/8+CSf/PgUj/zoBI/85+Rv/Nfkb/zX1G/818
+        Rf/Me0X/zoBM/9GKWf/IeD3GyHY6HMd5QQAAAAAAAAAAANuekwDJekADyHY5dMyAS/nOgVb/x208/8hv
+        P//IcD7/yHA//8hxP//Jc0H/ynRB/8p1Qf/KdUL/ynVB/8p3Qv/LeEP/y3lD/8x6RP/MekT/zHpE/8x8
+        Rf/NfEX/zX1G/81+Rv/PgEj/zn9H/8+CSf/Pgkn/z4JI/9CESv/QhEr/0YVL/9GHS//Rhkv/0YdK/9KI
+        S//SiUz/0opM/9OKTf/TjE7/04xN/9SNT//TjU3/1I5P/9WPT//Vj0//1ZBR/9aRUP/WklH/1pJR/9aT
+        Uf/WklD/15NS/9eVU//XllP/2JdV/9eWU//XllP/15dU/9eXU//Xl1P/2JhU/9iYVP/YmFT/2JhU/9ma
+        Vf/ZmVX/2ZlV/9maVf/YmVT/2JlU/9iaVf/ZmVX/2ZlU/9iYU//YmVX/2JlV/9iZVf/YmFT/2JhU/9eY
+        VP/Xl1T/15ZU/9eWU//XlVL/15VS/9eVU//XlFP/15NR/9aTUf/WklH/1pFQ/9WQUP/VkFD/1Y9P/9SP
+        UP/Uj1D/1I1O/9SNTv/UjE7/04xO/9OKTf/SiUz/0olM/9KHS//Rh0v/0YhM/9GGSv/QhEr/0IRK/9CD
+        Sv/PgUf/z4JI/8+ASP/Of0f/zX5G/819Rv/NfUb/zHtE/85+Sf/Tjl//y35F7Md2OVDNhFUAAAAAAAAA
+        AAAAAAAAAAAAAMl4PQDIeD0RyXc6o8+EUv7OgFb/x208/8hwPv/IcD//yHE//8lzQv/Jcj//ynRB/8p1
+        Qv/KdUH/yndD/8p3Qv/Kd0L/y3hD/8t5Q//MekT/zHtF/818Rf/NfUb/zX1G/85/R//OgEf/zoBG/8+B
+        SP/Pg0n/0IRK/9CESv/QhUr/0YVK/9GHS//Rh0v/0ohM/9KKTf/Sikz/04lM/9OLTf/TjE3/04xO/9SM
+        Tf/UjU7/1I5Q/9SOT//Vj0//1ZFR/9aSUv/WklH/1pJR/9aSUP/XlFL/15RT/9eUU//XlVP/15VT/9eW
+        U//XllP/15ZT/9eWU//XllL/2JdU/9iYVP/YmFX/2JlU/9iYU//YmFT/2JpV/9iZVf/YmFT/2JlV/9iY
+        VP/YmFX/15hU/9eYVP/YmFX/15dU/9eXU//XllL/15dU/9eXVf/XllP/15VR/9eVUv/XlFL/15RS/9eT
+        Uv/WklH/1ZJQ/9WRUP/VkE//1ZBR/9WQUP/Uj0//1I9Q/9SNTv/UjE3/1I1O/9OLTf/Sikz/0opL/9KJ
+        TP/SiEz/0YhM/9GHS//Rhkr/0IVL/9CESf/Qg0n/z4JI/8+BR//PgUj/zoBH/86ASP/NfUb/zX1G/818
+        RP/MfEb/1I9h/86CTPnIdjmBynxCBcl4PwAAAAAAAAAAAAAAAAAAAAAAAAAAAMd1OADKeD0gyXg8utCH
+        Vv/Pglj/yG8+/8dwPf/JcT//yXJA/8hxP//KdEH/ynRB/8p0QP/KdkL/yndC/8p3Qv/LeUP/y3lE/8x6
+        RP/Me0X/zXxG/818Rf/NfUb/zX5G/86AR//Of0b/z4FI/8+CSf/Pg0n/0IRK/9CESv/RhUr/0YdL/9GF
+        Sf/Rh0v/0ohM/9KKTP/SiUz/04tO/9OMTv/TjU7/1I1P/9SNTv/Ujk//1I5P/9WPUP/VkFH/1ZBQ/9WR
+        UP/WklH/1pNS/9aTUv/WklD/15NS/9eUUv/XlVP/15RR/9eVUv/XllP/15dU/9eWU//XllP/2JdU/9iX
+        VP/Yl1P/2JhU/9eYVf/XmFT/15hU/9eYVf/XmFX/15hU/9iXVP/XllP/15ZS/9iXVP/Yl1T/15ZT/9eV
+        U//XlVL/15VS/9eVUv/XlFL/15RT/9eUUv/Xk1L/1pNS/9aSUP/WklH/1ZFR/9WQUP/Vj0//1Y9Q/9SP
+        UP/Uj1D/1I1P/9SMTf/Ti03/04pN/9OLTv/SiEv/0olM/9KITP/Rh0z/0YdL/9GGS//RhUv/0INJ/9CD
+        Sv/Pgkn/z4FH/8+BSP/OgEf/zX5G/819Rv/NfEX/zX5I/9SQY//PhVH8yXY6nMp5PxLJeTwAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMl1OADJeDwoyXg8vdCHVf7Qhl3/yHFB/8dvPf/Jc0H/yXJA/8pz
+        QP/KdUL/ynZC/8t2Qv/Kd0L/yndC/8t4Q//LeUP/zHpE/8x6RP/MfEX/zXxG/819Rv/Nfkb/zn9G/85/
+        R//OgUf/z4JJ/8+DSf/Qg0r/0IRJ/9GFS//Rhkv/0YZK/9GHTP/SiEz/0ohM/9KKTf/Si03/04tN/9OL
+        Tf/UjU7/1I1O/9ONTv/Ujk//1I5P/9WPUP/VkFH/1ZBQ/9aSUv/Xk1L/1pJR/9WSUP/WklH/15NR/9eU
+        Uv/XlFL/15VT/9eVUv/XllP/15ZT/9eWU//XllT/2JdU/9eWU//XlVL/15ZT/9eWU//XllP/2JdU/9eW
+        U//XllP/15ZT/9eWU//XllP/15ZU/9eWU//WlVL/15ZU/9eVUv/XlFL/15RT/9eTUv/Xk1H/1pJR/9aR
+        UP/WkVD/1ZFQ/9WRUv/VkFD/1Y9Q/9SOTv/Ujk//1I5P/9SNTv/TjE3/04xN/9OKTP/Tik3/0opN/9KJ
+        TP/SiUz/0YdM/9GHS//Rhkv/0YVL/9CESv/QhEr/z4JJ/8+CSf/PgUf/zoBH/85/Rv/NfkX/zXxE/9CD
+        T//Vk2b/z4VQ/Ml2OqHKeT4XyHU5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAy3tDAMdz
+        NADJeT0lyXg7rc+EUPzTjGP/zHtO/8hxP//IcD3/yHI//8p0Qf/JdED/ynVB/8p2Qv/Kd0L/ynhD/8t4
+        Qv/LekT/zHpE/818Rf/NfUb/zn5G/819Rv/Mfkb/zn9G/85/R//PgUj/0IJJ/9CDSv/QhEr/0IVK/9CF
+        Sv/Rhkv/0ohM/9GITP/SiUz/0olM/9KKTf/SiUz/04pN/9KLTf/TjE7/1I1P/9SOT//Ujk7/1I9Q/9WP
+        T//Vjk//1ZBQ/9WQUP/WkVD/1pJR/9aSUv/WkVD/15RS/9aTUf/XlVP/15NR/9eTUf/XlFL/15VT/9eV
+        U//XlFL/15VS/9eVU//XlVL/15ZT/9eWU//XllT/15ZT/9eWU//XllP/15ZU/9eVUv/XlVP/15VT/9eV
+        Uv/XlFL/15RS/9eTUv/Wk1H/1pNS/9aSUv/WklH/1pFQ/9WQT//VkFD/1ZBQ/9WPT//VjlD/1I5P/9SO
+        T//UjU7/1I1O/9OMTf/Tik3/0olM/9OLTf/Sikz/0ohM/9GHS//Rh0v/0YZL/9GFSv/QhEr/0INJ/9CD
+        Sf/Pgkn/z4FI/86AR//OgEf/zX1E/81+R//TjVz/1pRm/86CSvbJdzqVyno+GMl2OgDMgEcAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzH5GAMl5PADLeT4Yync6is1+RuvSjF//0oph/8x6
+        TP/IcT7/yXA8/8pzP//JdED/ynZC/8p3Q//Kd0P/y3hE/8t5Q//LekT/zHtF/8x8Rv/NfUb/zX1G/81+
+        R//OgEj/zn9H/86BSP/PgUj/0INJ/8+DSf/Pg0n/0IRK/9CFSv/Sh0z/0YdL/9GHTP/RiEv/0olN/9KK
+        Tf/Ti03/04pN/9OLTf/UjU7/1I1O/9SOTv/Uj0//1I5P/9WPT//Vj0//1ZBR/9WRUf/VkVH/1pFQ/9aS
+        UP/WklH/1pNR/9aTUv/Wk1H/15NR/9eUU//XlVP/15RT/9aUUf/XlVL/15VT/9eVU//XlVP/1pRR/9eV
+        U//XlVL/15VT/9eVU//XlVP/15VS/9eUUv/XlFL/15RS/9eUU//Wk1H/1pNR/9aSUf/WklD/1pJR/9aS
+        Uf/VkVH/1ZBQ/9WPUP/Vj0//1I9Q/9SNTv/TjE3/1I5P/9SNTv/TjE7/04tN/9OKTv/Sik3/0olM/9KI
+        TP/RiEz/0ohM/9GGSv/RhUr/0IVK/9CFSv/Pg0n/z4JJ/8+BSP/OgEb/zX1E/85/Rv/SiVf/1pZp/9OO
+        XP/MfEHfyXY5a8t7QA3JeT0A05VmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAMp5PADMfEIHync6S8p5PbrPg075045i/9ONZP/Pglb/zHlJ/8l0Qf/KdED/ynVA/8l1
+        P//KdkD/y3dC/8p3QP/LeEL/zHlC/8x5Qv/Ne0P/zHtE/8x8Q//NfUT/zX5E/85/Rf/PgUf/zn9F/86A
+        Rf/Qgkf/z4NH/9CDSP/RhUj/0IVI/9CGSf/Rh0n/0YhK/9GISv/SiUv/04pM/9KKTP/Ti0v/04tL/9SM
+        Tf/UjU3/1I1N/9SNTf/Ujk3/1I5N/9SOTv/Uj07/1ZBO/9WQTv/VkE3/1ZBN/9aRT//WklD/1pJP/9aR
+        T//VkU3/1pFO/9eSUP/WklD/1pJQ/9eTUf/WkU7/15NR/9aSUP/WklD/15JQ/9aST//Xk1D/1pJP/9aR
+        T//VkU7/1pFP/9WQTv/VkU//1ZBN/9WQTv/Vj07/1Y9O/9SOTv/UjU3/1I1N/9SNTf/TjEz/1IxM/9SL
+        TP/Ti0z/0opL/9KKS//SiEr/0YhK/9GISv/Rh0n/0YdK/9GGSv/QhUj/0IRI/8+CR//Pgkf/z4JH/8+B
+        Rv/PgUf/zoBH/9GHUf/VkWD/1pZp/9SRYv/Ogkrwync6pMp3OjrVmWsBynk+AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMt7QADJczQAyng+FMp3
+        OmPLej65zoJL7NKLW//VkGX/1JBm/9ONYv/SiV3/0IdY/9CHV//Rh1j/0YhY/9GIWP/SiVn/0opZ/9KK
+        Wv/Tiln/0opZ/9ONW//TjVv/041b/9SPXP/Uj1z/1ZFe/9WRXf/VkV3/1ZJe/9aTX//WlF//1pVg/9aU
+        X//Xll//15dh/9eWX//Yl2H/2Jdh/9iZYv/YmWH/2Zpi/9maYv/ZmmL/2Ztj/9mcY//anGP/2pxj/9qc
+        ZP/anmX/2p5l/9qeZP/anWP/259l/9ufZf/boGb/259l/9qeZP/an2T/26Bl/9ugZf/bn2X/259k/9uf
+        Zf/boGX/259l/9ygZv/bn2X/26Bl/9ugZf/boGX/259l/9qfZP/bn2X/255k/9qeZP/anGP/2p1k/9qd
+        ZP/anGP/2Zti/9mbYv/Zm2P/2Zti/9maYv/ZmWH/2Jlh/9iZYf/YmGL/2Jdh/9eXYf/Xl2H/15Zg/9eV
+        YP/WlWD/1pNd/9aUXv/Wk1//1ZFc/9WSXv/Wk2H/1pRj/9iXaP/Xl2n/1pVn/9OMWf3NgUjmyng8qsl2
+        Ok3LekEMyXU3AMt9QwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADLekEAw2kmAMt5PhPLeDpOy3c6lsx7QNLOgEj50IZQ/9KK
+        WP/Tjl7/1JBh/9SQYf/UkGH/1JFh/9SRYv/UkWH/1ZFi/9SRYf/UkWH/1ZJi/9WTY//VkmL/1ZNi/9WT
+        Y//Vk2P/1ZRi/9aUY//VlGP/1pRj/9aVY//WlWP/1pVj/9aVY//WlWT/1pVk/9aVZP/XlmT/15Zk/9eW
+        Zf/XlmT/15dl/9eXZP/Xl2T/15dl/9eXZf/Xl2T/15dk/9eXZf/Xl2X/15hl/9eYZf/XmGX/2Jll/9iY
+        Zf/YmGb/2Jhm/9iYZv/XmGX/15hl/9iYZv/YmGX/15hl/9eYZP/XmGX/15hl/9eYZf/YmGb/2Jhm/9eY
+        Zf/XmGX/15hl/9eXZf/XmGX/15hl/9eYZf/Xl2T/15dl/9eXZf/Xl2T/15dk/9eXZf/XlmT/15Zk/9eX
+        ZP/XlmT/15Zk/9eWZP/WlWT/1pZk/9aVZP/WlmT/1pVk/9aVY//WlWP/1pVj/9aUY//WlGP/1ZNi/9SR
+        X//Si1j/0IVP/86AR/TLej7GynY6h8p3OkLMfEALyXM3AMt7QgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAA//gAAAAAAAAAAAAAAAAf///gAAAAAAAAAAAAAAAAB///gAAAAAAAAAAA
+        AAAAAAH//wAAAAAAAAAAAAAAAAAA//4AAAAAAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAA/+AAAAAAA
+        AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/gAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAB8AA
+        AAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAA
+        AAPAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAA
+        AAAAAAAf/AAAAAAAAAAAAAAAAAAAP/4AAAAAAAAAAAAAAAAAAH//AAAAAAAAAAAAAAAAAAD//8AAAAAA
+        AAAAAAAAAAAD///wAAAAAAAAAAAAAAAAD/8=
+</value>
+  </data>
+</root>