From efc590edc611b872576698c721af680b62867ee1 Mon Sep 17 00:00:00 2001 From: lh <2334563547@qq.com> Date: Fri, 14 Aug 2026 09:54:09 +0800 Subject: [PATCH 01/10] =?UTF-8?q?feat(nmNum):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E5=82=A8=E5=B1=82=E5=8F=82=E6=95=B0=E8=AE=BE=E7=BD=AE=E5=AF=B9?= =?UTF-8?q?=E8=AF=9D=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增模块化参数页面、字段目录和编辑会话 - 通过数据源注入实现工作副本及统一提交 - 支持单位换算、参数校验和分类联动 - 无对应对象时禁用分类按钮 - 统一渗透率基准单位为 D --- Bin/Config/Lang/cn/nmNum_cn.qm | Bin 108029 -> 113262 bytes Bin/Config/Lang/cn/nmNum_cn.ts | 76 +- Bin/XmlFiles/ModelParaDefinesNM_cn.xml | 21 +- Bin/XmlFiles/ModelParaDefinesNM_en.xml | 21 +- .../nmSubWxs/nmReservoirParameterCatalog.h | 143 +++ .../nmSubWxs/nmReservoirParameterField.h | 155 ++++ .../nmNum/nmSubWxs/nmReservoirParameterPage.h | 128 +++ .../nmReservoirPropertiesDataSource.h | 92 ++ .../nmSubWxs/nmReservoirPropertiesSession.h | 98 ++ .../nmSubWxs/nmWxReservoirPropertiesEditor.h | 148 +++ Src/nmNum/nmData/nmDataAutomaticFitting.cpp | 7 +- Src/nmNum/nmData/nmDataReservoir.cpp | 26 +- Src/nmNum/nmSubWnd/nmSubWndMain.cpp | 28 +- .../nmSubWxs/nmReservoirParameterCatalog.cpp | 852 ++++++++++++++++++ .../nmSubWxs/nmReservoirParameterField.cpp | 429 +++++++++ .../nmSubWxs/nmReservoirParameterPage.cpp | 539 +++++++++++ .../nmReservoirPropertiesDataSource.cpp | 119 +++ .../nmSubWxs/nmReservoirPropertiesSession.cpp | 242 +++++ Src/nmNum/nmSubWxs/nmWxAutomaticFitting.cpp | 2 +- .../nmWxReservoirPropertiesEditor.cpp | 544 +++++++++++ Src4/nmNum/nmSubWxs/nmSubWxs.pro | 4 +- 21 files changed, 3638 insertions(+), 36 deletions(-) create mode 100644 Include/nmNum/nmSubWxs/nmReservoirParameterCatalog.h create mode 100644 Include/nmNum/nmSubWxs/nmReservoirParameterField.h create mode 100644 Include/nmNum/nmSubWxs/nmReservoirParameterPage.h create mode 100644 Include/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.h create mode 100644 Include/nmNum/nmSubWxs/nmReservoirPropertiesSession.h create mode 100644 Include/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.h create mode 100644 Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp create mode 100644 Src/nmNum/nmSubWxs/nmReservoirParameterField.cpp create mode 100644 Src/nmNum/nmSubWxs/nmReservoirParameterPage.cpp create mode 100644 Src/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.cpp create mode 100644 Src/nmNum/nmSubWxs/nmReservoirPropertiesSession.cpp create mode 100644 Src/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.cpp diff --git a/Bin/Config/Lang/cn/nmNum_cn.qm b/Bin/Config/Lang/cn/nmNum_cn.qm index 32bc151c051c51952484720af60633b42170db74..3092a7f82694ec20f4b0c0073dd0dd867a5ee791 100644 GIT binary patch delta 14466 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 MEp{|cV<&C?4=Cq{AOHXW delta 10592 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 + @@ -6781,4 +6781,78 @@ Average pressure in contour: %2 MPa Kriging 结果中包含无效数值。 + + nmReservoirParameterField + The parameter layout is unavailable.参数布局不可用。 + Parameter definition not found: %1未找到参数定义:%1 + Failed to bind the unit for parameter: %1参数单位绑定失败:%1 + Dimensionless无量纲 + + + nmReservoirParameterPage + Reservoir parameters储层参数 + Well parameters井参数 + Fault parameters断层参数 + Fracture parameters裂缝参数 + Composite region parameters复合区参数 + Region mark parameters区域标记参数 + Select well:选择井: + Select fault:选择断层: + Select fracture:选择裂缝: + Select composite region:选择复合区: + Select region mark:选择区域标记: + Select object:选择对象: + No editable objects in this category.此分类中没有可编辑对象。 + + + nmWxReservoirPropertiesEditor + Reservoir properties settings储层特性设置 + Reservoir properties储层参数 + Help帮助 + OK确定 + Cancel取消 + Basic基础 + Wells + Geometry objects几何对象 + Reservoir parameters储层参数 + Well parameters井参数 + Faults断层 + Fractures裂缝 + Composite regions复合区 + Region marks区域标记 + Please correct the invalid parameter values.请修正无效的参数值。 + Reservoir type储层类型 + Homogeneous均质储层 + Dual porosity pseudo steady state双重介质拟稳态 + Fault flow model断层流动模型 + Region flow model复合区流动模型 + Leaky泄漏 + Composite limit复合边界 + Fracture flow model裂缝流动模型 + Finite conductivity有限导流 + Infinite conductivity无限导流 + Vertical well直井 + Vertical fractured well垂直压裂井 + Horizontal fractured well水平压裂井 + Position and wellbore位置与井筒 + Storage and fracture储集与裂缝 + Basic properties基础特性 + Fluid parameters流体参数 + Compression and saturation压缩与饱和度 + Dual-medium parameters双重介质参数 + Geometry几何位置 + Flow properties流动属性 + Conductivity properties导流属性 + Region properties区域属性 + + + nmSubWndMain + Reservoir properties储层参数 + The current numerical well-test data is unavailable.当前数值试井数据不可用。 + + + QObject + The current numerical well-test data is unavailable.当前数值试井数据不可用。 + The reservoir properties editing session is unavailable.储层参数编辑会话不可用。 + diff --git a/Bin/XmlFiles/ModelParaDefinesNM_cn.xml b/Bin/XmlFiles/ModelParaDefinesNM_cn.xml index 367fb1c..8788ebc 100644 --- a/Bin/XmlFiles/ModelParaDefinesNM_cn.xml +++ b/Bin/XmlFiles/ModelParaDefinesNM_cn.xml @@ -17,8 +17,11 @@ - + + + + @@ -32,11 +35,11 @@ - + - - + + @@ -44,7 +47,8 @@ - + + @@ -52,6 +56,7 @@ + @@ -85,12 +90,12 @@ - + - + @@ -99,7 +104,7 @@ - + diff --git a/Bin/XmlFiles/ModelParaDefinesNM_en.xml b/Bin/XmlFiles/ModelParaDefinesNM_en.xml index fb7e17f..02be24f 100644 --- a/Bin/XmlFiles/ModelParaDefinesNM_en.xml +++ b/Bin/XmlFiles/ModelParaDefinesNM_en.xml @@ -18,8 +18,11 @@ - + + + + @@ -33,11 +36,11 @@ - + - - + + @@ -45,7 +48,8 @@ - + + @@ -53,6 +57,7 @@ + @@ -86,12 +91,12 @@ - + - + @@ -100,7 +105,7 @@ - + diff --git a/Include/nmNum/nmSubWxs/nmReservoirParameterCatalog.h b/Include/nmNum/nmSubWxs/nmReservoirParameterCatalog.h new file mode 100644 index 0000000..0824746 --- /dev/null +++ b/Include/nmNum/nmSubWxs/nmReservoirParameterCatalog.h @@ -0,0 +1,143 @@ +#pragma once + +#include "nmSubWxs_global.h" +#include "nmDefines.h" + +#include +#include + +class nmAttrRegistry; +struct nmReservoirPropertiesSnapshot; + +/** @brief 储层参数编辑页面分类。 */ +enum nmReservoirPropertiesCategory +{ + NM_RESERVOIR_PAGE_RESERVOIR = 0, ///< 储层。 + NM_RESERVOIR_PAGE_WELL, ///< 井。 + NM_RESERVOIR_PAGE_FAULT, ///< 断层。 + NM_RESERVOIR_PAGE_FRACTURE, ///< 裂缝。 + NM_RESERVOIR_PAGE_COMPOSITE_REGION, ///< 复合区。 + NM_RESERVOIR_PAGE_REGION_MARK, ///< 区域标记。 + NM_RESERVOIR_PAGE_COUNT ///< 分类数量。 +}; + +/** @brief 参数对象的具体类型。 */ +enum nmReservoirPropertiesObjectType +{ + NM_RESERVOIR_OBJECT_RESERVOIR = 0, ///< 储层对象。 + NM_RESERVOIR_OBJECT_VERTICAL_WELL, ///< 直井对象。 + NM_RESERVOIR_OBJECT_VERTICAL_FRAC_WELL, ///< 垂直压裂井对象。 + NM_RESERVOIR_OBJECT_HORIZONTAL_FRAC_WELL,///< 水平压裂井对象。 + NM_RESERVOIR_OBJECT_REGION_MARK, ///< 区域标记对象。 + NM_RESERVOIR_OBJECT_FAULT, ///< 断层对象。 + NM_RESERVOIR_OBJECT_FRACTURE, ///< 裂缝对象。 + NM_RESERVOIR_OBJECT_REGION ///< 复合区对象。 +}; + +/** @brief 参数字段的编辑器类型。 */ +enum nmReservoirParameterEditorType +{ + NM_RESERVOIR_EDITOR_NUMBER = 0, ///< 浮点数输入框。 + NM_RESERVOIR_EDITOR_INTEGER, ///< 整数输入框。 + NM_RESERVOIR_EDITOR_ENUM ///< 稳定code枚举下拉框。 +}; + +/** @brief 枚举下拉框选项。 */ +struct NM_SUB_WXS_EXPORT nmReservoirEnumOption +{ + QString m_sCode; ///< 不随语言变化的业务代码。 + QString m_sText; ///< 当前语言下的显示文本。 +}; + +/** + * @brief 单个参数字段的界面描述。 + * @note 稳定参数ID用于会话读写,基础参数ID用于读取XML单位和范围。 + */ +struct NM_SUB_WXS_EXPORT nmReservoirParameterFieldInfo +{ + QString m_sParameterId; ///< 编辑会话中的稳定参数ID。 + QString m_sBaseParameterId; ///< 中英文参数XML中的基础参数ID。 + QString m_sLabel; ///< 枚举字段的显示名称;数值字段留空时读取XML别名。 + nmReservoirParameterEditorType m_eEditorType; ///< 字段编辑器类型。 + bool m_bUnitEnabled; ///< 是否为该字段创建单位下拉框。 + QList m_listOptions; ///< 枚举字段的稳定选项。 +}; + +/** @brief 参数分组的界面描述。 */ +struct NM_SUB_WXS_EXPORT nmReservoirParameterGroupInfo +{ + QString m_sTitle; ///< 分组标题。 + int m_nRow; ///< 分组在页面网格中的行。 + int m_nColumn; ///< 分组在页面网格中的列。 + int m_nRowSpan; ///< 分组纵向跨越的行数。 + int m_nColumnSpan; ///< 分组横跨的列数。 + bool m_bValueRightAligned; ///< 数值输入是否右对齐。 + QList m_listFields; ///< 分组内按显示顺序排列的字段。 +}; + +/** @brief 单个可编辑对象的完整界面描述。 */ +struct NM_SUB_WXS_EXPORT nmReservoirPropertyObjectInfo +{ + nmReservoirPropertiesCategory m_eCategory; ///< 对象所属页面分类。 + nmReservoirPropertiesObjectType m_eObjectType; ///< 对象具体类型。 + int m_nSourceIndex; ///< 对象在工作副本容器中的索引。 + QString m_sObjectCode; ///< 编辑会话内稳定的对象编码。 + QString m_sDisplayName; ///< 对象显示名称。 + QList m_listGroups; ///< 原型式分组和字段描述。 +}; + +/** + * @brief 储层参数规范目录。 + * @note 对象映射、稳定ID、页面分组和联动所需的基础ID全部在此集中维护。 + */ +class NM_SUB_WXS_EXPORT nmReservoirParameterCatalog +{ +public: + /** + * @brief 将工作副本中的属性注册到独立注册表。 + * @param pRegistry 编辑会话独占的属性注册表。 + * @param oSnapshot 可写工作副本。 + */ + static void registerSnapshot(nmAttrRegistry* pRegistry, + nmReservoirPropertiesSnapshot& oSnapshot); + + /** + * @brief 构建指定分类的对象和原型式分组描述。 + * @param eCategory 页面分类。 + * @param oSnapshot 当前工作副本。 + * @return 按界面显示顺序排列的对象描述。 + */ + static QList createObjectInfos( + nmReservoirPropertiesCategory eCategory, + nmReservoirPropertiesSnapshot& oSnapshot); + + /** + * @brief 将数据类中的存储文本转换为稳定枚举code。 + * @param sParameterId 枚举参数ID。 + * @param sStoredValue 数据类中的存储文本。 + * @return 稳定业务code。 + */ + static QString enumCodeFromStoredValue(const QString& sParameterId, + const QString& sStoredValue); + + /** + * @brief 将稳定枚举code转换为数据类的存储文本。 + * @param sParameterId 枚举参数ID。 + * @param sCode 稳定业务code。 + * @return 数据类使用的存储文本。 + */ + static QString storedValueFromEnumCode(const QString& sParameterId, + const QString& sCode); + + /** @brief 读取工作副本中的枚举code。 */ + static QString enumCode(const nmReservoirPropertiesSnapshot& oSnapshot, + const QString& sParameterId); + + /** @brief 修改工作副本中的枚举code。 */ + static bool setEnumCode(nmReservoirPropertiesSnapshot& oSnapshot, + const QString& sParameterId, + const QString& sCode); + +private: + nmReservoirParameterCatalog(); +}; diff --git a/Include/nmNum/nmSubWxs/nmReservoirParameterField.h b/Include/nmNum/nmSubWxs/nmReservoirParameterField.h new file mode 100644 index 0000000..8e7a3fe --- /dev/null +++ b/Include/nmNum/nmSubWxs/nmReservoirParameterField.h @@ -0,0 +1,155 @@ +#pragma once + +#include "nmSubWxs_global.h" +#include "nmReservoirParameterCatalog.h" + +#include +#include + +class iParameter; +class iUnitGroup; +class QComboBox; +class QGridLayout; +class QLabel; +class QLineEdit; + +/** + * @brief 储层参数字段所需的最小单位服务接口。 + * @note 主对话框负责适配iDlgBase,字段不直接依赖对话框基类或全局对象。 + */ +class NM_SUB_WXS_EXPORT nmIReservoirParameterUnitService +{ +public: + /** @brief 析构单位服务接口。 */ + virtual ~nmIReservoirParameterUnitService() {} + + /** @brief 按NM参数定义绑定一个数值编辑器和单位下拉框。 */ + virtual bool bindUnitField(QLineEdit* pLineEdit, + QComboBox* pUnitComboBox, + const QString& sBaseParameterId) = 0; + + /** @brief 将基准单位数值写入指定编辑器。 */ + virtual void setUnitBaseValue(QLineEdit* pLineEdit, + double dBaseValue) = 0; + + /** @brief 读取指定编辑器的基准单位数值。 */ + virtual double unitBaseValue(QLineEdit* pLineEdit) const = 0; + + /** @brief 校验指定单位编辑器。 */ + virtual bool isUnitInputValid(QLineEdit* pLineEdit) = 0; + + /** @brief 返回指定编辑器当前显示单位。 */ + virtual QString currentUnit(QLineEdit* pLineEdit) const = 0; + + /** @brief 返回指定编辑器的单位组,不转移所有权。 */ + virtual iUnitGroup* unitGroup(QLineEdit* pLineEdit) const = 0; +}; + +/** + * @brief 原型式参数行的轻量逻辑单元。 + * @note 本类不创建外框或子面板,只把标签、编辑器和单位控件直接加入分组网格。 + */ +class NM_SUB_WXS_EXPORT nmReservoirParameterField : public QObject +{ +public: + /** + * @brief 构造参数字段。 + * @param oFieldInfo 稳定字段描述。 + * @param pUnitService 主对话框注入的单位服务,不转移所有权。 + * @param pParent 字段生命周期父对象。 + */ + nmReservoirParameterField( + const nmReservoirParameterFieldInfo& oFieldInfo, + nmIReservoirParameterUnitService* pUnitService, + QObject* pParent = nullptr); + + /** @brief 析构字段,不单独删除由分组控件拥有的界面控件。 */ + virtual ~nmReservoirParameterField(); + + /** + * @brief 将字段的三个直接控件加入分组网格。 + * @param pLayout 所属分组的网格布局。 + * @param nRow 字段所在行。 + * @param sError 初始化失败原因。 + * @return 参数元数据和单位绑定均成功时返回true。 + */ + bool initialize(QGridLayout* pLayout, int nRow, QString& sError); + + /** @brief 返回编辑会话使用的稳定参数ID。 */ + QString parameterId() const; + + /** @brief 返回XML参数定义使用的基础参数ID。 */ + QString baseParameterId() const; + + /** @brief 返回字段是否为稳定code枚举。 */ + bool isEnum() const; + + /** @brief 设置数值输入文字是否右对齐。 */ + void setValueRightAligned(bool bRightAligned); + + /** @brief 返回数值编辑列的统一最小宽度。 */ + static int editorMinimumWidth(); + + /** @brief 返回单位列的统一最小宽度。 */ + static int unitMinimumWidth(); + + /** @brief 返回输入框和下拉框的统一紧凑高度。 */ + static int editorHeight(); + + /** @brief 设置基准单位下的数值并刷新显示。 */ + void setBaseValue(const QVariant& oValue); + + /** + * @brief 获取基准单位下的当前数值。 + * @param bValid 输出当前输入是否有效。 + * @return 有效时返回基准值,否则返回无效QVariant。 + */ + QVariant baseValue(bool& bValid); + + /** @brief 设置枚举稳定code;不会触发业务联动。 */ + void setEnumCode(const QString& sCode); + + /** @brief 返回当前枚举稳定code。 */ + QString enumCode() const; + + /** @brief 校验当前输入,并更新参数范围提示。 */ + bool validate(); + + /** @brief 同时显示或隐藏该参数行的三个直接控件。 */ + void setFieldVisible(bool bVisible); + + /** @brief 返回参数行当前是否参与编辑和校验。 */ + bool isFieldVisible() const; + + /** @brief 返回数值输入框,供页面集中连接变化信号。 */ + QLineEdit* valueEditor() const; + + /** @brief 返回枚举下拉框,供页面集中连接变化信号。 */ + QComboBox* enumEditor() const; + +private: + /** @brief 创建数值输入框及单位控件。 */ + bool createNumericEditor(QGridLayout* pLayout, + int nRow, + QString& sError); + + /** @brief 创建稳定code枚举下拉框。 */ + void createEnumEditor(QGridLayout* pLayout, int nRow); + + /** @brief 按XML精度格式化无单位或整数参数。 */ + QString formatBaseValue(double dValue) const; + + /** @brief 更新输入框的有效状态和帮助文字。 */ + void updateValidationAppearance(bool bValid); + + nmReservoirParameterFieldInfo m_oFieldInfo; ///< 稳定字段描述。 + nmIReservoirParameterUnitService* m_pUnitService; ///< 注入的单位服务,不拥有所有权。 + iParameter* m_pParameter; ///< 共享XML参数定义,不拥有所有权。 + QLabel* m_pLabel; ///< 参数名称标签。 + QLineEdit* m_pLineEdit; ///< 数值输入框。 + QComboBox* m_pValueComboBox; ///< 枚举值下拉框。 + QComboBox* m_pUnitComboBox; ///< 可换算单位下拉框。 + QLabel* m_pUnitLabel; ///< 无单位字段的空白对齐占位。 + bool m_bVisible; ///< 参数行是否参与编辑。 + bool m_bUpdating; ///< 程序写值时阻止业务信号。 +}; diff --git a/Include/nmNum/nmSubWxs/nmReservoirParameterPage.h b/Include/nmNum/nmSubWxs/nmReservoirParameterPage.h new file mode 100644 index 0000000..10b80f8 --- /dev/null +++ b/Include/nmNum/nmSubWxs/nmReservoirParameterPage.h @@ -0,0 +1,128 @@ +#pragma once + +#include "nmSubWxs_global.h" +#include "nmReservoirParameterCatalog.h" + +#include +#include +#include + +class nmIReservoirParameterUnitService; +class nmReservoirParameterField; +class nmReservoirPropertiesSession; +class QComboBox; +class QGridLayout; +class QLabel; +class QVBoxLayout; + +/** + * @brief 储层参数分类的原型式共享页面。 + * @note 页面是普通QWidget,只负责一层内容布局,不拥有单位系统或真实数据。 + */ +class NM_SUB_WXS_EXPORT nmReservoirParameterPage : public QWidget +{ + Q_OBJECT + +public: + /** + * @brief 构造共享参数页面。 + * @param eCategory 页面分类。 + * @param pSession 编辑会话,不转移所有权。 + * @param pUnitService 主对话框单位服务,不转移所有权。 + * @param pParent 父窗口。 + */ + nmReservoirParameterPage(nmReservoirPropertiesCategory eCategory, + nmReservoirPropertiesSession* pSession, + nmIReservoirParameterUnitService* pUnitService, + QWidget* pParent = nullptr); + + /** @brief 析构参数页面。 */ + virtual ~nmReservoirParameterPage(); + + /** + * @brief 重新读取当前分类对象并显示第一个对象。 + * @param sError 输出字段构建错误。 + * @return 页面构建成功返回true。 + */ + bool reloadObjects(QString& sError); + + /** + * @brief 校验并将当前可见数值写入会话工作副本。 + * @return 输入全部有效且写入成功时返回true。 + */ + bool commitPendingEdits(); + + /** @brief 返回当前页面的可见输入是否全部有效。 */ + bool isInputValid(); + + /** @brief 返回当前分类是否存在可编辑对象。 */ + bool hasEditableObjects() const; + + /** @brief 返回页面分类。 */ + nmReservoirPropertiesCategory category() const; + +signals: + /** @brief 当前页有效状态发生变化。 */ + void sigValidityChanged(bool bValid); + +private slots: + /** @brief 切换当前编辑对象。 */ + void slotObjectChanged(int nIndex); + + /** @brief 数值输入变化后刷新整体有效状态。 */ + void slotFieldValueEdited(); + + /** @brief 枚举code变化后保存并执行集中联动。 */ + void slotEnumIndexChanged(int nIndex); + +private: + /** @brief 创建页标题、对象选择器和单层分组区域。 */ + void createUi(); + + /** @brief 根据当前分类返回标题。 */ + QString categoryTitle() const; + + /** @brief 根据当前分类返回对象选择标签。 */ + QString objectSelectorLabel() const; + + /** @brief 构建指定对象的全部分组和字段。 */ + bool buildObject(int nObjectIndex, QString& sError); + + /** @brief 删除上一个对象的分组控件和字段对象。 */ + void clearObjectEditors(); + + /** @brief 创建一个原型式参数分组。 */ + bool buildGroup(const nmReservoirParameterGroupInfo& oGroupInfo, + QString& sError); + + /** @brief 从工作副本加载字段初始值。 */ + void loadFieldValue(nmReservoirParameterField* pField); + + /** @brief 根据当前稳定code统一刷新字段可见性。 */ + void applyVisibilityRules(); + + /** @brief 设置指定稳定参数ID的字段可见性。 */ + void setFieldVisible(const QString& sParameterId, bool bVisible); + + /** @brief 刷新有效状态并通知主对话框。 */ + void updateValidity(); + + nmReservoirPropertiesCategory m_eCategory; ///< 页面分类。 + nmReservoirPropertiesSession* m_pSession; ///< 编辑会话,不拥有所有权。 + nmIReservoirParameterUnitService* m_pUnitService; ///< 主对话框单位服务,不拥有所有权。 + QList m_listObjectInfos; ///< 当前分类对象描述。 + int m_nCurrentObjectIndex; ///< 当前对象索引。 + bool m_bUpdatingObject; ///< 阻止对象下拉框回滚重入。 + bool m_bBuildingFields; ///< 阻止加载数据时触发业务信号。 + + QLabel* m_pTitleLabel; ///< 页面标题。 + QLabel* m_pObjectLabel; ///< 对象选择标签。 + QComboBox* m_pObjectComboBox; ///< 多对象选择下拉框。 + QWidget* m_pGroupsWidget; ///< 无边框的分组布局载体。 + QGridLayout* m_pGroupsLayout; ///< 两列分组布局。 + QVBoxLayout* m_pMainLayout; ///< 页面主布局。 + QLabel* m_pEmptyLabel; ///< 空对象提示。 + QList m_listFields; ///< 当前对象全部字段。 + QMap m_mapFields; ///< 稳定ID到字段映射。 + QMap m_mapEditorFields; ///< 编辑器到字段映射。 +}; diff --git a/Include/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.h b/Include/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.h new file mode 100644 index 0000000..02df385 --- /dev/null +++ b/Include/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.h @@ -0,0 +1,92 @@ +#pragma once + +#include "nmSubWxs_global.h" + +#include "nmDataReservoir.h" +#include "nmDataVerticalWell.h" +#include "nmDataVerticalFracturedWell.h" +#include "nmDataHorizontalFracturedWell.h" +#include "nmDataRegionMark.h" +#include "nmDataFault.h" +#include "nmDataFracture.h" +#include "nmDataRegion.h" + +class nmDataAnalyzeManager; + +/** + * @brief 储层参数编辑快照。 + * @note 快照保存一次编辑会话所需的全部数据副本,不包含普通水平井。 + */ +struct NM_SUB_WXS_EXPORT nmReservoirPropertiesSnapshot +{ + /** @brief 构造空快照。 */ + nmReservoirPropertiesSnapshot(); + + nmDataReservoir m_oReservoir; ///< 储层参数副本。 + QVector m_vecVerticalWells; ///< 直井参数副本。 + QVector m_vecVerticalFracturedWells; ///< 垂直压裂井参数副本。 + QVector m_vecHorizontalFracturedWells; ///< 水平压裂井参数副本。 + QVector m_vecRegionMarks; ///< 区域标记参数副本。 + QVector m_vecFaults; ///< 断层参数副本。 + QVector m_vecFractures; ///< 裂缝参数副本,包含DFN以保持提交索引稳定。 + QVector m_vecRegions; ///< 复合区参数副本。 +}; + +/** + * @brief 储层参数数据源接口。 + * @note 对话框只依赖此接口,不直接访问全局数据管理器。 + */ +class NM_SUB_WXS_EXPORT nmIReservoirPropertiesDataSource +{ +public: + /** @brief 析构数据源接口。 */ + virtual ~nmIReservoirPropertiesDataSource(); + + /** + * @brief 读取当前分析窗口的数据快照。 + * @param oSnapshot 输出的工作快照。 + * @param sError 输出的错误信息。 + * @return 读取成功返回true。 + */ + virtual bool loadSnapshot(nmReservoirPropertiesSnapshot& oSnapshot, + QString& sError) const = 0; + + /** + * @brief 一次性提交编辑后的工作快照。 + * @param oSnapshot 待提交的工作快照。 + * @param bGeometryChanged 井坐标或几何参数是否发生变化。 + * @param sError 输出的错误信息。 + * @return 提交成功返回true。 + */ + virtual bool commitSnapshot(const nmReservoirPropertiesSnapshot& oSnapshot, + bool bGeometryChanged, + QString& sError) = 0; +}; + +/** + * @brief 基于nmDataAnalyzeManager的数据源适配器。 + */ +class NM_SUB_WXS_EXPORT nmAnalyzeManagerReservoirDataSource : + public nmIReservoirPropertiesDataSource +{ +public: + /** + * @brief 构造数据源适配器。 + * @param pDataManager 当前分析窗口的数据管理器,不转移所有权。 + */ + explicit nmAnalyzeManagerReservoirDataSource(nmDataAnalyzeManager* pDataManager); + + /** @brief 析构数据源适配器。 */ + virtual ~nmAnalyzeManagerReservoirDataSource(); + + virtual bool loadSnapshot(nmReservoirPropertiesSnapshot& oSnapshot, + QString& sError) const; + + virtual bool commitSnapshot(const nmReservoirPropertiesSnapshot& oSnapshot, + bool bGeometryChanged, + QString& sError); + +private: + nmDataAnalyzeManager* m_pDataManager; ///< 当前分析窗口的数据管理器,不拥有所有权。 +}; + diff --git a/Include/nmNum/nmSubWxs/nmReservoirPropertiesSession.h b/Include/nmNum/nmSubWxs/nmReservoirPropertiesSession.h new file mode 100644 index 0000000..fa93af9 --- /dev/null +++ b/Include/nmNum/nmSubWxs/nmReservoirPropertiesSession.h @@ -0,0 +1,98 @@ +#pragma once + +#include "nmSubWxs_global.h" +#include "nmReservoirPropertiesDataSource.h" +#include "nmReservoirParameterCatalog.h" + +#include +#include + +class nmAttrRegistry; + +/** + * @brief 储层参数编辑会话。 + * @note 会话持有独立工作副本和独立属性注册表;取消时直接销毁会话即可。 + */ +class NM_SUB_WXS_EXPORT nmReservoirPropertiesSession +{ +public: + /** + * @brief 构造编辑会话。 + * @param pDataSource 参数数据源,不转移所有权。 + */ + explicit nmReservoirPropertiesSession(nmIReservoirPropertiesDataSource* pDataSource); + + /** @brief 析构编辑会话及其独立注册表。 */ + ~nmReservoirPropertiesSession(); + + /** + * @brief 从数据源创建原始快照和工作副本。 + * @param sError 输出的错误信息。 + * @return 初始化成功返回true。 + */ + bool initialize(QString& sError); + + /** + * @brief 获取指定分类的对象描述。 + * @param eCategory 页面分类。 + * @return 对象描述列表。 + */ + QList objectInfos( + nmReservoirPropertiesCategory eCategory); + + /** + * @brief 获取工作副本中的参数值。 + * @param sParameterId 稳定参数ID。 + * @return 参数值;不存在时返回无效QVariant。 + */ + QVariant value(const QString& sParameterId) const; + + /** + * @brief 修改工作副本中的参数值。 + * @param sParameterId 稳定参数ID。 + * @param oValue 基准单位下的新值。 + * @return 参数存在并完成修改时返回true。 + */ + bool setValue(const QString& sParameterId, const QVariant& oValue); + + /** + * @brief 批量修改工作副本中的参数值。 + * @param mapValues 稳定参数ID到基准值的映射。 + */ + void setValues(const QMap& mapValues); + + /** + * @brief 获取枚举参数的稳定code。 + * @param sParameterId 稳定枚举参数ID。 + * @return 稳定业务code。 + */ + QString enumCode(const QString& sParameterId) const; + + /** + * @brief 修改枚举参数的稳定code。 + * @param sParameterId 稳定枚举参数ID。 + * @param sCode 稳定业务code。 + * @return 修改成功返回true。 + */ + bool setEnumCode(const QString& sParameterId, const QString& sCode); + + /** + * @brief 提交工作副本。 + * @param sError 输出的错误信息。 + * @return 提交成功返回true。 + */ + bool commit(QString& sError); + + /** @brief 获取只读工作副本,供后续导入预览或测试使用。 */ + const nmReservoirPropertiesSnapshot& workingSnapshot() const; + +private: + /** @brief 判断井坐标或几何参数是否发生变化。 */ + bool isGeometryChanged() const; + + nmIReservoirPropertiesDataSource* m_pDataSource; ///< 参数数据源,不拥有所有权。 + nmAttrRegistry* m_pAttrRegistry; ///< 编辑会话独占的属性注册表。 + nmReservoirPropertiesSnapshot m_oOriginalSnapshot; ///< 打开对话框时的原始快照。 + nmReservoirPropertiesSnapshot m_oWorkingSnapshot; ///< 所有界面编辑写入的工作副本。 + bool m_bInitialized; ///< 会话是否初始化成功。 +}; diff --git a/Include/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.h b/Include/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.h new file mode 100644 index 0000000..c76658d --- /dev/null +++ b/Include/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.h @@ -0,0 +1,148 @@ +#pragma once + +#include "iDlgBase.h" +#include "nmSubWxs_global.h" +#include "nmReservoirParameterCatalog.h" +#include "nmReservoirParameterField.h" + +class nmIReservoirPropertiesDataSource; +class nmReservoirPropertiesSession; +class nmReservoirParameterPage; +class QButtonGroup; +class QDialogButtonBox; +class QFrame; +class QHBoxLayout; +class QLabel; +class QStackedWidget; +class QToolButton; + +/** + * @brief 数值试井储层特性参数编辑器。 + * @note 对话框是唯一可见面板,负责原型式导航、单位服务、整体校验和统一提交。 + */ +class NM_SUB_WXS_EXPORT nmWxReservoirPropertiesEditor : + public iDlgBase, + public nmIReservoirParameterUnitService +{ + Q_OBJECT + +public: + /** + * @brief 构造储层特性参数编辑器。 + * @param pDataSource 参数数据源,不转移所有权。 + * @param pParent 父窗口。 + */ + nmWxReservoirPropertiesEditor( + nmIReservoirPropertiesDataSource* pDataSource, + QWidget* pParent = nullptr); + + /** @brief 析构编辑器。 */ + virtual ~nmWxReservoirPropertiesEditor(); + + /** + * @brief 初始化编辑会话和全部页面。 + * @param sError 输出初始化错误。 + * @return 初始化成功返回true。 + */ + bool initialize(QString& sError); + + /** @brief 通过iDlgBase按NM参数系列绑定单位控件。 */ + virtual bool bindUnitField(QLineEdit* pLineEdit, + QComboBox* pUnitComboBox, + const QString& sBaseParameterId); + + /** @brief 将基准单位数值写入字段。 */ + virtual void setUnitBaseValue(QLineEdit* pLineEdit, + double dBaseValue); + + /** @brief 读取字段的基准单位数值。 */ + virtual double unitBaseValue(QLineEdit* pLineEdit) const; + + /** @brief 校验单位字段输入。 */ + virtual bool isUnitInputValid(QLineEdit* pLineEdit); + + /** @brief 返回字段当前显示单位。 */ + virtual QString currentUnit(QLineEdit* pLineEdit) const; + + /** @brief 返回字段单位组,不转移所有权。 */ + virtual iUnitGroup* unitGroup(QLineEdit* pLineEdit) const; + +public slots: + /** @brief 校验并一次性提交工作副本。 */ + virtual void accept(); + + /** @brief 丢弃工作副本并关闭窗口。 */ + virtual void reject(); + +private slots: + /** @brief 切换顶部参数分类。 */ + void slotCategoryButtonClicked(int nCategory); + + /** @brief 根据各页面状态更新确定按钮。 */ + void slotPageValidityChanged(bool bValid); + + /** @brief 进入当前界面的上下文帮助模式。 */ + void slotHelp(); + +private: + /** @brief 创建编辑器的原型式固定布局。 */ + void createUi(); + + /** @brief 创建顶部分组导航。 */ + QWidget* createCategoryBar(); + + /** + * @brief 创建一个带底部分组标题的ribbon区域。 + * @param sCaption 分组标题。 + * @param pParent 父控件。 + * @param pCommandLayout 输出的命令按钮布局,不转移所有权。 + * @return 创建完成的分组控件。 + */ + QWidget* createRibbonGroup(const QString& sCaption, + QWidget* pParent, + QHBoxLayout*& pCommandLayout); + + /** + * @brief 创建框架风格的导航分组竖向分隔线。 + * @param pParent 分隔线所属的顶部导航面板。 + * @return 创建完成的Qt原生分隔线。 + */ + QFrame* createRibbonSeparator(QWidget* pParent); + + /** + * @brief 创建一个参数分类按钮。 + * @param eCategory 分类枚举。 + * @param sText 按钮文字。 + * @param sIconName 框架图标名称。 + * @param pParent 所属ribbon分组。 + * @return 创建完成的工具按钮。 + */ + QToolButton* createCategoryButton( + nmReservoirPropertiesCategory eCategory, + const QString& sText, + const QString& sIconName, + QWidget* pParent); + + /** @brief 创建帮助命令按钮。 */ + QToolButton* createHelpButton(QWidget* pParent); + + /** @brief 创建六个共享参数页面。 */ + void createPages(); + + /** @brief 根据各分类的实际对象数量更新顶部按钮启用状态。 */ + void updateCategoryButtonStates(); + + /** @brief 校验所有页面并更新确定按钮。 */ + bool validateAllPages(); + + nmIReservoirPropertiesDataSource* m_pDataSource; ///< 参数数据源,不拥有所有权。 + nmReservoirPropertiesSession* m_pSession; ///< 对话框独占编辑会话。 + QButtonGroup* m_pCategoryButtonGroup; ///< 顶部分类按钮及稳定页面ID映射。 + QStackedWidget* m_pStackedWidget; ///< 无边框分类页面堆栈。 + QDialogButtonBox* m_pButtonBox; ///< 确定和取消按钮区。 + QToolButton* m_pFooterHelpButton; ///< 底部帮助命令。 + QLabel* m_pStatusLabel; ///< 校验或提交错误提示。 + nmReservoirParameterPage* m_pPages[NM_RESERVOIR_PAGE_COUNT]; ///< 六个参数页。 + int m_nCurrentCategory; ///< 当前显示分类。 + bool m_bInitialized; ///< 编辑器是否初始化完成。 +}; diff --git a/Src/nmNum/nmData/nmDataAutomaticFitting.cpp b/Src/nmNum/nmData/nmDataAutomaticFitting.cpp index a4876ed..3af9c33 100644 --- a/Src/nmNum/nmData/nmDataAutomaticFitting.cpp +++ b/Src/nmNum/nmData/nmDataAutomaticFitting.cpp @@ -13,7 +13,7 @@ nmDataAutomaticFitting::nmDataAutomaticFitting() m_swiSelected = false; // 默认不选中 // 初始化参数最大值 - m_permeabilityMax = nmDataAttribute("Permeability Max", 10.0, "Darcy"); // 1000 mD + m_permeabilityMax = nmDataAttribute("Permeability Max", 10.0, "D"); m_skinMax = nmDataAttribute("Skin Max", 10.0, ""); // 100 m_wellboreStorageMax = nmDataAttribute("Wellbore Storage Max", 2.0, "m^3/MPa"); m_porosityMax = nmDataAttribute("Porosity Max", 0.5, ""); // 50% @@ -23,7 +23,7 @@ nmDataAutomaticFitting::nmDataAutomaticFitting() m_swiMax = nmDataAttribute("Swi Max", 1.0, ""); // 初始化参数最小值 - m_permeabilityMin = nmDataAttribute("Permeability Min", 0.001, "Darcy"); // 0.001 mD + m_permeabilityMin = nmDataAttribute("Permeability Min", 0.001, "D"); m_skinMin = nmDataAttribute("Skin Min", -10.0, ""); // 允许负表皮 m_wellboreStorageMin = nmDataAttribute("Wellbore Storage Min", 1e-4, "m^3/MPa"); m_porosityMin = nmDataAttribute("Porosity Min", 0.01, ""); // 1% @@ -164,6 +164,8 @@ void nmDataAutomaticFitting::FromJsonValue(const rapidjson::Value& jsonValue) // 反序列化参数最大值 if (jsonValue.HasMember("PermeabilityMax") && jsonValue["PermeabilityMax"].IsObject()) { m_permeabilityMax.FromJsonValue(jsonValue["PermeabilityMax"]); + // 自动拟合上下限与求解器使用同一基准单位,不按旧JSON单位文本换算。 + m_permeabilityMax.setUnit("D"); } if (jsonValue.HasMember("SkinMax") && jsonValue["SkinMax"].IsObject()) { m_skinMax.FromJsonValue(jsonValue["SkinMax"]); @@ -190,6 +192,7 @@ void nmDataAutomaticFitting::FromJsonValue(const rapidjson::Value& jsonValue) // 反序列化参数最小值 if (jsonValue.HasMember("PermeabilityMin") && jsonValue["PermeabilityMin"].IsObject()) { m_permeabilityMin.FromJsonValue(jsonValue["PermeabilityMin"]); + m_permeabilityMin.setUnit("D"); } if (jsonValue.HasMember("SkinMin") && jsonValue["SkinMin"].IsObject()) { m_skinMin.FromJsonValue(jsonValue["SkinMin"]); diff --git a/Src/nmNum/nmData/nmDataReservoir.cpp b/Src/nmNum/nmData/nmDataReservoir.cpp index e07e007..0122f55 100644 --- a/Src/nmNum/nmData/nmDataReservoir.cpp +++ b/Src/nmNum/nmData/nmDataReservoir.cpp @@ -1,17 +1,18 @@ -#include "nmDataReservoir.h" +#include "nmDataReservoir.h" #include "ZxSerializer.h" nmDataReservoir::nmDataReservoir() { // 基础属性 m_initialPressure = nmDataAttribute("Initial Pressure",40.0, "MPa", UNIT_TYPE_PRESSURE, QStringList(), QStringList() << "psia" << "Pa" << "kPa" << "atm" << "bara" << "kg/cm^2" << "m" << "psig" << "bar" << "MPa" << "kPag"); - m_permeability = nmDataAttribute("Permeability", 0.025, "Darcy", UNIT_TYPE_PERMEABILITY, QStringList(), QStringList() << "md" << "Darcy" << "m^2" << "cm^2" << "um^2"); + // 求解器直接读取该数值,内部基准单位固定为D;显示换算由框架单位绑定器负责。 + m_permeability = nmDataAttribute("Permeability", 0.025, "D"); m_thickness = nmDataAttribute("Thickness", 10.0, "m", UNIT_TYPE_LENGTH, QStringList(), QStringList() << "ft" << "m" << "cm" << "mm" << "in" << "0.1 in" << "mile" << "km"); m_porosity = nmDataAttribute("Porosity", 0.1, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList()); m_kxKy = nmDataAttribute("Kx/Ky", 1.0, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList()); // 油相PVT单值 m_Bo = nmDataAttribute("Bo", 1.2, ""); - m_Miuo = nmDataAttribute("Miuo", 0.5, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList()); + m_Miuo = nmDataAttribute("Miuo", 0.5, "mPa.s"); // 气相PVT单值 m_Bg = nmDataAttribute("Bg", 1.0, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList()); @@ -22,8 +23,8 @@ nmDataReservoir::nmDataReservoir() { m_Miuw = nmDataAttribute("Miuw", 1.0, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList()); // 压缩系数 - m_Ct = nmDataAttribute("Ct", 0.001, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList()); - m_Cf = nmDataAttribute("Cf", 0.0001, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList()); + m_Ct = nmDataAttribute("Ct", 0.001, "1/MPa"); + m_Cf = nmDataAttribute("Cf", 0.0001, "1/MPa"); // 储层类型与传导率 m_reservoirType = nmDataAttribute("Reservoir type", "Homogeneous", "", UNIT_TYPE_DIMENSIONLESS, QStringList() << "Homogeneous" << "Dual porosity pseudo steady state", QStringList()); @@ -147,6 +148,8 @@ void nmDataReservoir::FromJsonValue(const rapidjson::Value& jsonValue) } if (jsonValue.HasMember("Permeability") && jsonValue["Permeability"].IsObject()) { m_permeability.FromJsonValue(jsonValue["Permeability"]); + // JSON中的单位文本不参与兼容换算,读取后的内部单位始终按求解器标准固定为D。 + m_permeability.setUnit("D"); } if (jsonValue.HasMember("Thickness") && jsonValue["Thickness"].IsObject()) { m_thickness.FromJsonValue(jsonValue["Thickness"]); @@ -240,11 +243,11 @@ bool nmDataReservoir::_parseData(VecVariant vec, int& n) { m_initialPressure = nmDataAttribute("Initial Pressure", vec[n++].toString(), "MPa"); m_reservoirType = nmDataAttribute("Reservoir Type", vec[n++].toString(), ""); m_Bo = nmDataAttribute("Bo", vec[n++].toString(), ""); - m_Miuo = nmDataAttribute("Miuo", vec[n++].toString(), "mPa.s(cp)"); - m_permeability = nmDataAttribute("Permeability", vec[n++].toString(), "mD"); + m_Miuo = nmDataAttribute("Miuo", vec[n++].toString(), "mPa.s"); + m_permeability = nmDataAttribute("Permeability", vec[n++].toString(), "D"); m_thickness = nmDataAttribute("Thickness", vec[n++].toString(), "m"); m_porosity = nmDataAttribute("Porosity", vec[n++].toString(), ""); - m_Ct = nmDataAttribute("Ct", vec[n++].toString(), ""); + m_Ct = nmDataAttribute("Ct", vec[n++].toString(), "1/MPa"); m_kxKy = nmDataAttribute("Kx/Ky", vec[n++].toString(), ""); return true; } @@ -280,11 +283,12 @@ void nmDataReservoir::onDeserialize(ZxSerializer* ser) { ser->read("InitialPressure", tempValue); m_initialPressure = nmDataAttribute("Initial Pressure", tempValue, "MPa"); ser->read("ReservoirType", tempValue); m_reservoirType = nmDataAttribute("Reservoir Type", tempValue, ""); ser->read("Bo", tempValue); m_Bo = nmDataAttribute("Bo", tempValue, ""); - ser->read("Miuo", tempValue); m_Miuo = nmDataAttribute("Miuo", tempValue, "mPa.s(cp)"); - ser->read("Permeability", tempValue); m_permeability = nmDataAttribute("Permeability", tempValue, "mD"); + ser->read("Miuo", tempValue); m_Miuo = nmDataAttribute("Miuo", tempValue, "mPa.s"); + // 序列化格式只保存数值,读取时明确按求解器基准单位D解释。 + ser->read("Permeability", tempValue); m_permeability = nmDataAttribute("Permeability", tempValue, "D"); ser->read("Thickness", tempValue); m_thickness = nmDataAttribute("Thickness", tempValue, "m"); ser->read("Porosity", tempValue); m_porosity = nmDataAttribute("Porosity", tempValue, ""); - ser->read("NetToGross", tempValue); m_Ct = nmDataAttribute("Ct", tempValue, ""); + ser->read("Ct", tempValue); m_Ct = nmDataAttribute("Ct", tempValue, "1/MPa"); ser->read("KxKy", tempValue); m_kxKy = nmDataAttribute("Kx/Ky", tempValue, ""); } diff --git a/Src/nmNum/nmSubWnd/nmSubWndMain.cpp b/Src/nmNum/nmSubWnd/nmSubWndMain.cpp index 1f2b236..c955245 100644 --- a/Src/nmNum/nmSubWnd/nmSubWndMain.cpp +++ b/Src/nmNum/nmSubWnd/nmSubWndMain.cpp @@ -56,7 +56,8 @@ #include "nmWxRCDialog.h" #include "nmWxWellLayerDlg.h" #include "nmWxGeometryLayerDlg.h" -#include "nmWxReservoirPropertiesDlg.h" +#include "nmReservoirPropertiesDataSource.h" +#include "nmWxReservoirPropertiesEditor.h" #include "nmWxPropertyInterpolationDlg.h" #include "nmWxPostprocessingAnimationWidget.h" #include "nmWxGeoRefDlg.h" @@ -1961,10 +1962,29 @@ bool nmSubWndMain::onConfirmClosing() void nmSubWndMain::reservoirCharacteristics() { - nmWxReservoirPropertiesDlg dlg; - dlg.exec(); + // 第一步:取得当前分析窗口对应的数据管理器,避免新对话框访问全局单例。 + nmDataAnalyzeManager* pDataManager = nmDataAnalyzeManager::getCurrentInstance(); + if (pDataManager == nullptr) + { + QMessageBox::warning(this, tr("Reservoir properties"), + tr("The current numerical well-test data is unavailable.")); + return; + } + + // 第二步:在入口处组装数据源和编辑器,两个对象的生命周期覆盖整个模态会话。 + nmAnalyzeManagerReservoirDataSource oDataSource(pDataManager); + nmWxReservoirPropertiesEditor oEditor(&oDataSource, this); + + // 第三步:先建立工作副本;初始化失败时不打开不完整的参数界面。 + QString sError; + if (!oEditor.initialize(sError)) + { + QMessageBox::warning(this, tr("Reservoir properties"), sError); + return; + } - // TODO: 修改完参数应该刷新画布 + // 第四步:确定时由编辑会话一次性提交,取消时真实数据保持不变。 + oEditor.exec(); } void nmSubWndMain::geoLayering() diff --git a/Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp b/Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp new file mode 100644 index 0000000..4115645 --- /dev/null +++ b/Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp @@ -0,0 +1,852 @@ +#include "nmReservoirParameterCatalog.h" + +#include "nmReservoirPropertiesDataSource.h" +#include "nmAttrRegistry.h" +#include "nmDataAttribute.h" +#include "nmDataPerforation.h" + +#include + +namespace +{ + +/* + * Qt 4.8的lupdate无法跟踪editorText()的间接参数,以下标记只用于 + * 收集中英文资源;运行时仍由同一翻译上下文返回文字。 + */ +static const char* const s_pCatalogTranslationMarkers[] = +{ + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Reservoir type"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Homogeneous"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Dual porosity pseudo steady state"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Fault flow model"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Region flow model"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Leaky"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Composite limit"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Fracture flow model"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Finite conductivity"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Infinite conductivity"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Position and wellbore"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Storage and fracture"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Basic properties"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Fluid parameters"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Compression and saturation"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Reservoir parameters"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Vertical well"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Vertical fractured well"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Horizontal fractured well"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Dual-medium parameters"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Geometry"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Flow properties"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Conductivity properties"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Region properties") +}; + +/** @brief 返回当前语言下的界面文字。 */ +QString editorText(const char* pText) +{ + Q_UNUSED(s_pCatalogTranslationMarkers); + return QCoreApplication::translate("nmWxReservoirPropertiesEditor", pText); +} + +/** @brief 创建一个稳定枚举选项。 */ +nmReservoirEnumOption enumOption(const QString& sCode, const char* pText) +{ + nmReservoirEnumOption oOption; + oOption.m_sCode = sCode; + oOption.m_sText = editorText(pText); + return oOption; +} + +/** @brief 创建一个数值字段描述。 */ +nmReservoirParameterFieldInfo numericField( + const QString& sParameterId, + const QString& sBaseParameterId, + nmReservoirParameterEditorType eEditorType) +{ + nmReservoirParameterFieldInfo oField; + oField.m_sParameterId = sParameterId; + oField.m_sBaseParameterId = sBaseParameterId; + oField.m_eEditorType = eEditorType; + oField.m_bUnitEnabled = true; + return oField; +} + +/** @brief 创建一个浮点数字段描述。 */ +nmReservoirParameterFieldInfo numericField( + const QString& sParameterId, + const QString& sBaseParameterId) +{ + return numericField(sParameterId, sBaseParameterId, + NM_RESERVOIR_EDITOR_NUMBER); +} + +/** @brief 创建一个明确不显示单位的浮点数字段。 */ +nmReservoirParameterFieldInfo unitlessNumericField( + const QString& sParameterId, + const QString& sBaseParameterId) +{ + nmReservoirParameterFieldInfo oField = + numericField(sParameterId, sBaseParameterId); + oField.m_bUnitEnabled = false; + return oField; +} + +/** @brief 创建储层类型字段。 */ +nmReservoirParameterFieldInfo reservoirModelField( + const QString& sParameterId) +{ + nmReservoirParameterFieldInfo oField; + oField.m_sParameterId = sParameterId; + oField.m_sLabel = editorText("Reservoir type"); + oField.m_eEditorType = NM_RESERVOIR_EDITOR_ENUM; + oField.m_bUnitEnabled = false; + oField.m_listOptions.append(enumOption("homogeneous", "Homogeneous")); + oField.m_listOptions.append(enumOption( + "dual_porosity_pss", "Dual porosity pseudo steady state")); + return oField; +} + +/** @brief 创建断层或复合区流动模型字段。 */ +nmReservoirParameterFieldInfo leakageModelField( + const QString& sParameterId, + const char* pLabel) +{ + nmReservoirParameterFieldInfo oField; + oField.m_sParameterId = sParameterId; + oField.m_sLabel = editorText(pLabel); + oField.m_eEditorType = NM_RESERVOIR_EDITOR_ENUM; + oField.m_bUnitEnabled = false; + oField.m_listOptions.append(enumOption("leaky", "Leaky")); + oField.m_listOptions.append(enumOption( + "composite_limit", "Composite limit")); + return oField; +} + +/** @brief 创建裂缝导流模型字段。 */ +nmReservoirParameterFieldInfo fractureModelField( + const QString& sParameterId) +{ + nmReservoirParameterFieldInfo oField; + oField.m_sParameterId = sParameterId; + oField.m_sLabel = editorText("Fracture flow model"); + oField.m_eEditorType = NM_RESERVOIR_EDITOR_ENUM; + oField.m_bUnitEnabled = false; + oField.m_listOptions.append(enumOption( + "finite_conductivity", "Finite conductivity")); + oField.m_listOptions.append(enumOption( + "infinite_conductivity", "Infinite conductivity")); + return oField; +} + +/** @brief 创建页面上的一个参数分组。 */ +nmReservoirParameterGroupInfo parameterGroup( + const char* pTitle, + int nRow, + int nColumn, + int nColumnSpan) +{ + nmReservoirParameterGroupInfo oGroup; + oGroup.m_sTitle = editorText(pTitle); + oGroup.m_nRow = nRow; + oGroup.m_nColumn = nColumn; + oGroup.m_nRowSpan = 1; + oGroup.m_nColumnSpan = nColumnSpan; + oGroup.m_bValueRightAligned = false; + return oGroup; +} + +/** @brief 为参数ID添加对象编码前缀。 */ +QString prefixed(const QString& sObjectCode, const char* pParameterId) +{ + return sObjectCode + "_" + QString::fromLatin1(pParameterId); +} + +/** @brief 生成无井编码时的会话编码。 */ +QString wellCode(const nmDataWellBase& oWell, + const QString& sFallbackPrefix, + int nIndex) +{ + QString sCode = oWell.getWellCode(); + if (sCode.isEmpty()) + { + sCode = QString("%1%2").arg(sFallbackPrefix) + .arg(nIndex + 1, 4, 10, QChar('0')); + } + return sCode; +} + +/** @brief 创建井对象的分组描述。 */ +void createWellGroups(nmReservoirPropertyObjectInfo& oInfo, + NM_WELL_MODEL eWellType, + bool bHasPerforation) +{ + nmReservoirParameterGroupInfo oPosition = + parameterGroup("Position and wellbore", 0, 0, 1); + oPosition.m_listFields + << numericField(prefixed(oInfo.m_sObjectCode, "W_X"), "W_X") + << numericField(prefixed(oInfo.m_sObjectCode, "W_Y"), "W_Y") + << numericField(prefixed(oInfo.m_sObjectCode, "W_Rw"), "W_Rw"); + if (bHasPerforation) + { + oPosition.m_listFields.append(numericField( + prefixed(oInfo.m_sObjectCode, "W_Skin"), "W_Skin")); + } + + nmReservoirParameterGroupInfo oStorage = + parameterGroup("Storage and fracture", 0, 1, 1); + oStorage.m_listFields.append(numericField( + prefixed(oInfo.m_sObjectCode, "W_C"), "W_C")); + if (eWellType == Vertical_Fractured_Well) + { + oStorage.m_listFields + << numericField(prefixed(oInfo.m_sObjectCode, + "W_FractureHalfLength"), + "W_FractureHalfLength") + << numericField(prefixed(oInfo.m_sObjectCode, + "W_FractureAngle"), + "W_FractureAngle") + << numericField(prefixed(oInfo.m_sObjectCode, + "W_Dfc"), "W_Dfc"); + } + else if (eWellType == Horizontal_Fractured_Well) + { + oStorage.m_listFields + << numericField(prefixed(oInfo.m_sObjectCode, + "W_WellLength"), + "W_WellLength") + << numericField(prefixed(oInfo.m_sObjectCode, + "W_DrainAngle"), + "W_DrainAngle") + << numericField(prefixed(oInfo.m_sObjectCode, + "W_NumberOfFractures"), + "W_NumberOfFractures", + NM_RESERVOIR_EDITOR_INTEGER) + << numericField(prefixed(oInfo.m_sObjectCode, + "W_FractureHalfLength"), + "W_FractureHalfLength") + << numericField(prefixed(oInfo.m_sObjectCode, + "W_FractureAngle"), + "W_FractureAngle") + << numericField(prefixed(oInfo.m_sObjectCode, + "W_Dfc"), "W_Dfc"); + } + oInfo.m_listGroups << oPosition << oStorage; +} + +/** @brief 注册一口井的全部可编辑数值属性。 */ +void registerWell(nmAttrRegistry* pRegistry, + nmDataWellBase& oWell, + const QString& sCode) +{ + pRegistry->regAttr(prefixed(sCode, "W_X"), &oWell.getX()); + pRegistry->regAttr(prefixed(sCode, "W_Y"), &oWell.getY()); + pRegistry->regAttr(prefixed(sCode, "W_Rw"), &oWell.getRadius()); + pRegistry->regAttr(prefixed(sCode, "W_C"), &oWell.getWellboreStorage()); + if (oWell.getPerforationCount() > 0 && + oWell.getPerforation(0) != nullptr) + { + pRegistry->regAttr(prefixed(sCode, "W_Skin"), + &oWell.getPerforation(0)->getSkin()); + } +} + +/** @brief 判断对象描述中是否包含指定枚举字段。 */ +bool containsEnumField(const nmReservoirPropertyObjectInfo& oInfo, + const QString& sParameterId) +{ + for (int nGroupIndex = 0; + nGroupIndex < oInfo.m_listGroups.size(); + ++nGroupIndex) + { + const nmReservoirParameterGroupInfo& oGroup = + oInfo.m_listGroups[nGroupIndex]; + for (int nFieldIndex = 0; + nFieldIndex < oGroup.m_listFields.size(); + ++nFieldIndex) + { + const nmReservoirParameterFieldInfo& oField = + oGroup.m_listFields[nFieldIndex]; + if (oField.m_eEditorType == NM_RESERVOIR_EDITOR_ENUM && + oField.m_sParameterId == sParameterId) + { + return true; + } + } + } + return false; +} + +} + +void nmReservoirParameterCatalog::registerSnapshot( + nmAttrRegistry* pRegistry, + nmReservoirPropertiesSnapshot& oSnapshot) +{ + if (pRegistry == nullptr) + { + return; + } + + // 第一步:重新建立编辑会话独占的注册表,杜绝与实时数据交叉连接。 + pRegistry->clear(); + pRegistry->regAttr("h", &oSnapshot.m_oReservoir.getThickness()); + pRegistry->regAttr("Pi", &oSnapshot.m_oReservoir.getInitialPressure()); + pRegistry->regAttr("K", &oSnapshot.m_oReservoir.getPermeability()); + pRegistry->regAttr("phi", &oSnapshot.m_oReservoir.getPorosity()); + pRegistry->regAttr("Cti", &oSnapshot.m_oReservoir.getCt()); + pRegistry->regAttr("Cf", &oSnapshot.m_oReservoir.getCf()); + pRegistry->regAttr("Soi", &oSnapshot.m_oReservoir.getSoi()); + pRegistry->regAttr("Swi", &oSnapshot.m_oReservoir.getSwi()); + pRegistry->regAttr("Bo", &oSnapshot.m_oReservoir.getBo()); + pRegistry->regAttr("Miuo", &oSnapshot.m_oReservoir.getMiuo()); + pRegistry->regAttr("KxKy", &oSnapshot.m_oReservoir.getKxKy()); + + // 第二步:注册求解器支持的三类井及其压裂参数。 + for (int nIndex = 0; + nIndex < oSnapshot.m_vecVerticalWells.size(); + ++nIndex) + { + nmDataVerticalWell& oWell = oSnapshot.m_vecVerticalWells[nIndex]; + registerWell(pRegistry, oWell, wellCode(oWell, "VWELL", nIndex)); + } + for (int nIndex = 0; + nIndex < oSnapshot.m_vecVerticalFracturedWells.size(); + ++nIndex) + { + nmDataVerticalFracturedWell& oWell = + oSnapshot.m_vecVerticalFracturedWells[nIndex]; + QString sCode = wellCode(oWell, "VFWELL", nIndex); + registerWell(pRegistry, oWell, sCode); + pRegistry->regAttr(prefixed(sCode, "W_FractureHalfLength"), + &oWell.getFractureHalfLength()); + pRegistry->regAttr(prefixed(sCode, "W_FractureAngle"), + &oWell.getFractureAngle()); + pRegistry->regAttr(prefixed(sCode, "W_Dfc"), &oWell.getDfc()); + } + for (int nIndex = 0; + nIndex < oSnapshot.m_vecHorizontalFracturedWells.size(); + ++nIndex) + { + nmDataHorizontalFracturedWell& oWell = + oSnapshot.m_vecHorizontalFracturedWells[nIndex]; + QString sCode = wellCode(oWell, "HFWELL", nIndex); + registerWell(pRegistry, oWell, sCode); + pRegistry->regAttr(prefixed(sCode, "W_WellLength"), + &oWell.getWellLength()); + pRegistry->regAttr(prefixed(sCode, "W_DrainAngle"), + &oWell.getDrainAngle()); + pRegistry->regAttr(prefixed(sCode, "W_NumberOfFractures"), + &oWell.getNumberOfFractures()); + pRegistry->regAttr(prefixed(sCode, "W_FractureHalfLength"), + &oWell.getFractureHalfLength()); + pRegistry->regAttr(prefixed(sCode, "W_FractureAngle"), + &oWell.getFractureAngle()); + pRegistry->regAttr(prefixed(sCode, "W_Dfc"), &oWell.getDfc()); + } + + // 第三步:注册区域标记和复合区数值参数。 + for (int nIndex = 0; + nIndex < oSnapshot.m_vecRegionMarks.size(); + ++nIndex) + { + QString sCode = QString("RMARK%1") + .arg(nIndex + 1, 4, 10, QChar('0')); + nmDataRegionMark& oMark = oSnapshot.m_vecRegionMarks[nIndex]; + pRegistry->regAttr(prefixed(sCode, "RM_ComW"), &oMark.getComW()); + pRegistry->regAttr(prefixed(sCode, "RM_ComKr"), &oMark.getComKr()); + pRegistry->regAttr(prefixed(sCode, "RM_NetToGross"), + &oMark.getNetToGross()); + } + for (int nIndex = 0; + nIndex < oSnapshot.m_vecRegions.size(); + ++nIndex) + { + QString sCode = QString("REGION%1") + .arg(nIndex + 1, 4, 10, QChar('0')); + pRegistry->regAttr(prefixed(sCode, "R_Leakage"), + &oSnapshot.m_vecRegions[nIndex] + .getRegionLeakage()); + } + + // 第四步:注册断层和普通裂缝;DFN由专用功能维护。 + for (int nIndex = 0; + nIndex < oSnapshot.m_vecFaults.size(); + ++nIndex) + { + QString sCode = QString("FAULT%1") + .arg(nIndex + 1, 4, 10, QChar('0')); + nmDataFault& oFault = oSnapshot.m_vecFaults[nIndex]; + pRegistry->regAttr(prefixed(sCode, "FT_X0"), &oFault.getStartX()); + pRegistry->regAttr(prefixed(sCode, "FT_Y0"), &oFault.getStartY()); + pRegistry->regAttr(prefixed(sCode, "FT_X1"), &oFault.getEndX()); + pRegistry->regAttr(prefixed(sCode, "FT_Y1"), &oFault.getEndY()); + pRegistry->regAttr(prefixed(sCode, "FT_Leakage"), + &oFault.getFaultLeakage()); + } + + int nVisibleFracture = 0; + for (int nIndex = 0; + nIndex < oSnapshot.m_vecFractures.size(); + ++nIndex) + { + nmDataFracture& oFracture = oSnapshot.m_vecFractures[nIndex]; + if (oFracture.getFractureType().getValue().toString() == "DFN") + { + continue; + } + QString sCode = QString("FRAC%1") + .arg(++nVisibleFracture, 4, 10, QChar('0')); + pRegistry->regAttr(prefixed(sCode, "F_X0"), + &oFracture.getStartX()); + pRegistry->regAttr(prefixed(sCode, "F_Y0"), + &oFracture.getStartY()); + pRegistry->regAttr(prefixed(sCode, "F_X1"), + &oFracture.getEndX()); + pRegistry->regAttr(prefixed(sCode, "F_Y1"), + &oFracture.getEndY()); + pRegistry->regAttr(prefixed(sCode, "F_FC"), + &oFracture.getFractureDfc()); + pRegistry->regAttr(prefixed(sCode, "F_DW"), + &oFracture.getFractureDw()); + } +} + +QList +nmReservoirParameterCatalog::createObjectInfos( + nmReservoirPropertiesCategory eCategory, + nmReservoirPropertiesSnapshot& oSnapshot) +{ + QList listInfos; + + if (eCategory == NM_RESERVOIR_PAGE_RESERVOIR) + { + nmReservoirPropertyObjectInfo oInfo; + oInfo.m_eCategory = eCategory; + oInfo.m_eObjectType = NM_RESERVOIR_OBJECT_RESERVOIR; + oInfo.m_nSourceIndex = 0; + oInfo.m_sObjectCode = "RESERVOIR"; + oInfo.m_sDisplayName = editorText("Reservoir parameters"); + + nmReservoirParameterGroupInfo oBasic = + parameterGroup("Basic properties", 0, 0, 1); + oBasic.m_nRowSpan = 2; + oBasic.m_bValueRightAligned = true; + oBasic.m_listFields + << numericField("Pi", "Pi") + << numericField("K", "K") + << numericField("h", "h") + << numericField("phi", "phi"); + + nmReservoirParameterGroupInfo oFluid = + parameterGroup("Fluid parameters", 0, 1, 1); + oFluid.m_listFields + << reservoirModelField("ReservoirType") + << numericField("Miuo", "Miuo") + << unitlessNumericField("Bo", "Bo") + << numericField("KxKy", "KxKy"); + + nmReservoirParameterGroupInfo oCompression = + parameterGroup("Compression and saturation", 1, 1, 1); + oCompression.m_listFields + << numericField("Cti", "Cti") + << numericField("Cf", "Cf") + << numericField("Soi", "Soi") + << numericField("Swi", "Swi"); + oInfo.m_listGroups << oBasic << oFluid << oCompression; + listInfos.append(oInfo); + return listInfos; + } + + if (eCategory == NM_RESERVOIR_PAGE_WELL) + { + for (int nIndex = 0; + nIndex < oSnapshot.m_vecVerticalWells.size(); + ++nIndex) + { + nmDataVerticalWell& oWell = + oSnapshot.m_vecVerticalWells[nIndex]; + nmReservoirPropertyObjectInfo oInfo; + oInfo.m_eCategory = eCategory; + oInfo.m_eObjectType = NM_RESERVOIR_OBJECT_VERTICAL_WELL; + oInfo.m_nSourceIndex = nIndex; + oInfo.m_sObjectCode = wellCode(oWell, "VWELL", nIndex); + oInfo.m_sDisplayName = oWell.getWellName() + " - " + + editorText("Vertical well"); + createWellGroups(oInfo, Vertical_Well, + oWell.getPerforationCount() > 0); + listInfos.append(oInfo); + } + for (int nIndex = 0; + nIndex < oSnapshot.m_vecVerticalFracturedWells.size(); + ++nIndex) + { + nmDataVerticalFracturedWell& oWell = + oSnapshot.m_vecVerticalFracturedWells[nIndex]; + nmReservoirPropertyObjectInfo oInfo; + oInfo.m_eCategory = eCategory; + oInfo.m_eObjectType = + NM_RESERVOIR_OBJECT_VERTICAL_FRAC_WELL; + oInfo.m_nSourceIndex = nIndex; + oInfo.m_sObjectCode = wellCode(oWell, "VFWELL", nIndex); + oInfo.m_sDisplayName = oWell.getWellName() + " - " + + editorText("Vertical fractured well"); + createWellGroups(oInfo, Vertical_Fractured_Well, + oWell.getPerforationCount() > 0); + listInfos.append(oInfo); + } + for (int nIndex = 0; + nIndex < oSnapshot.m_vecHorizontalFracturedWells.size(); + ++nIndex) + { + nmDataHorizontalFracturedWell& oWell = + oSnapshot.m_vecHorizontalFracturedWells[nIndex]; + nmReservoirPropertyObjectInfo oInfo; + oInfo.m_eCategory = eCategory; + oInfo.m_eObjectType = + NM_RESERVOIR_OBJECT_HORIZONTAL_FRAC_WELL; + oInfo.m_nSourceIndex = nIndex; + oInfo.m_sObjectCode = wellCode(oWell, "HFWELL", nIndex); + oInfo.m_sDisplayName = oWell.getWellName() + " - " + + editorText("Horizontal fractured well"); + createWellGroups(oInfo, Horizontal_Fractured_Well, + oWell.getPerforationCount() > 0); + listInfos.append(oInfo); + } + return listInfos; + } + + if (eCategory == NM_RESERVOIR_PAGE_REGION_MARK) + { + for (int nIndex = 0; + nIndex < oSnapshot.m_vecRegionMarks.size(); + ++nIndex) + { + nmReservoirPropertyObjectInfo oInfo; + oInfo.m_eCategory = eCategory; + oInfo.m_eObjectType = NM_RESERVOIR_OBJECT_REGION_MARK; + oInfo.m_nSourceIndex = nIndex; + oInfo.m_sObjectCode = QString("RMARK%1") + .arg(nIndex + 1, 4, 10, QChar('0')); + oInfo.m_sDisplayName = + oSnapshot.m_vecRegionMarks[nIndex].getRegionMarkName(); + + nmReservoirParameterGroupInfo oDual = + parameterGroup("Dual-medium parameters", 0, 0, 2); + oDual.m_listFields + << reservoirModelField(prefixed( + oInfo.m_sObjectCode, "RM_ReservoirType")) + << numericField(prefixed( + oInfo.m_sObjectCode, "RM_ComW"), "RM_ComW") + << numericField(prefixed( + oInfo.m_sObjectCode, "RM_ComKr"), "RM_ComKr") + << numericField(prefixed( + oInfo.m_sObjectCode, "RM_NetToGross"), + "RM_NetToGross"); + oInfo.m_listGroups.append(oDual); + listInfos.append(oInfo); + } + return listInfos; + } + + if (eCategory == NM_RESERVOIR_PAGE_FAULT) + { + for (int nIndex = 0; + nIndex < oSnapshot.m_vecFaults.size(); + ++nIndex) + { + nmReservoirPropertyObjectInfo oInfo; + oInfo.m_eCategory = eCategory; + oInfo.m_eObjectType = NM_RESERVOIR_OBJECT_FAULT; + oInfo.m_nSourceIndex = nIndex; + oInfo.m_sObjectCode = QString("FAULT%1") + .arg(nIndex + 1, 4, 10, QChar('0')); + oInfo.m_sDisplayName = + oSnapshot.m_vecFaults[nIndex].getFaultName(); + + nmReservoirParameterGroupInfo oGeometry = + parameterGroup("Geometry", 0, 0, 1); + oGeometry.m_listFields + << numericField(prefixed( + oInfo.m_sObjectCode, "FT_X0"), "FT_X0") + << numericField(prefixed( + oInfo.m_sObjectCode, "FT_Y0"), "FT_Y0") + << numericField(prefixed( + oInfo.m_sObjectCode, "FT_X1"), "FT_X1") + << numericField(prefixed( + oInfo.m_sObjectCode, "FT_Y1"), "FT_Y1"); + + nmReservoirParameterGroupInfo oFlow = + parameterGroup("Flow properties", 0, 1, 1); + oFlow.m_listFields + << leakageModelField(prefixed( + oInfo.m_sObjectCode, "FT_FlowModel"), + "Fault flow model") + << numericField(prefixed( + oInfo.m_sObjectCode, "FT_Leakage"), + "FT_Leakage"); + oInfo.m_listGroups << oGeometry << oFlow; + listInfos.append(oInfo); + } + return listInfos; + } + + if (eCategory == NM_RESERVOIR_PAGE_FRACTURE) + { + int nVisibleFracture = 0; + for (int nIndex = 0; + nIndex < oSnapshot.m_vecFractures.size(); + ++nIndex) + { + nmDataFracture& oFracture = + oSnapshot.m_vecFractures[nIndex]; + if (oFracture.getFractureType().getValue().toString() == + "DFN") + { + continue; + } + nmReservoirPropertyObjectInfo oInfo; + oInfo.m_eCategory = eCategory; + oInfo.m_eObjectType = NM_RESERVOIR_OBJECT_FRACTURE; + oInfo.m_nSourceIndex = nIndex; + oInfo.m_sObjectCode = QString("FRAC%1") + .arg(++nVisibleFracture, 4, 10, QChar('0')); + oInfo.m_sDisplayName = oFracture.getFractureName(); + + nmReservoirParameterGroupInfo oGeometry = + parameterGroup("Geometry", 0, 0, 1); + oGeometry.m_listFields + << numericField(prefixed( + oInfo.m_sObjectCode, "F_X0"), "F_X0") + << numericField(prefixed( + oInfo.m_sObjectCode, "F_Y0"), "F_Y0") + << numericField(prefixed( + oInfo.m_sObjectCode, "F_X1"), "F_X1") + << numericField(prefixed( + oInfo.m_sObjectCode, "F_Y1"), "F_Y1"); + + nmReservoirParameterGroupInfo oFlow = + parameterGroup("Conductivity properties", 0, 1, 1); + oFlow.m_listFields + << fractureModelField(prefixed( + oInfo.m_sObjectCode, "F_FlowModel")) + << numericField(prefixed( + oInfo.m_sObjectCode, "F_FC"), "F_FC") + << numericField(prefixed( + oInfo.m_sObjectCode, "F_DW"), "F_DW"); + oInfo.m_listGroups << oGeometry << oFlow; + listInfos.append(oInfo); + } + return listInfos; + } + + if (eCategory == NM_RESERVOIR_PAGE_COMPOSITE_REGION) + { + for (int nIndex = 0; + nIndex < oSnapshot.m_vecRegions.size(); + ++nIndex) + { + nmReservoirPropertyObjectInfo oInfo; + oInfo.m_eCategory = eCategory; + oInfo.m_eObjectType = NM_RESERVOIR_OBJECT_REGION; + oInfo.m_nSourceIndex = nIndex; + oInfo.m_sObjectCode = QString("REGION%1") + .arg(nIndex + 1, 4, 10, QChar('0')); + oInfo.m_sDisplayName = + oSnapshot.m_vecRegions[nIndex].getRegoinName(); + + nmReservoirParameterGroupInfo oRegion = + parameterGroup("Region properties", 0, 0, 2); + oRegion.m_listFields + << leakageModelField(prefixed( + oInfo.m_sObjectCode, "R_FlowModel"), + "Region flow model") + << numericField(prefixed( + oInfo.m_sObjectCode, "R_Leakage"), + "R_Leakage"); + oInfo.m_listGroups.append(oRegion); + listInfos.append(oInfo); + } + } + return listInfos; +} + +QString nmReservoirParameterCatalog::enumCodeFromStoredValue( + const QString& sParameterId, + const QString& sStoredValue) +{ + QString sValue = sStoredValue.trimmed().toLower(); + if (sParameterId.endsWith("ReservoirType")) + { + return sValue.contains("dual") + ? "dual_porosity_pss" : "homogeneous"; + } + if (sParameterId.endsWith("F_FlowModel")) + { + return sValue.contains("infinite") + ? "infinite_conductivity" : "finite_conductivity"; + } + if (sParameterId.endsWith("FlowModel")) + { + return sValue.contains("leaky") ? "leaky" : "composite_limit"; + } + return QString(); +} + +QString nmReservoirParameterCatalog::storedValueFromEnumCode( + const QString& sParameterId, + const QString& sCode) +{ + if (sParameterId.endsWith("ReservoirType")) + { + return sCode == "dual_porosity_pss" + ? "Dual porosity pseudo steady state" : "Homogeneous"; + } + if (sParameterId.endsWith("F_FlowModel")) + { + return sCode == "infinite_conductivity" + ? "Infinite Conductivity" : "Finite Conductivity"; + } + if (sParameterId.endsWith("FlowModel")) + { + return sCode == "leaky" ? "Leaky" : "Composite limit"; + } + return QString(); +} + +QString nmReservoirParameterCatalog::enumCode( + const nmReservoirPropertiesSnapshot& oSnapshot, + const QString& sParameterId) +{ + if (sParameterId == "ReservoirType") + { + nmDataReservoir& oReservoir = + const_cast(oSnapshot.m_oReservoir); + return enumCodeFromStoredValue( + sParameterId, + oReservoir.getReservoirType().getValue().toString()); + } + + QList listAll; + nmReservoirPropertiesSnapshot& oWritable = + const_cast(oSnapshot); + listAll << createObjectInfos(NM_RESERVOIR_PAGE_FAULT, + oWritable) + << createObjectInfos(NM_RESERVOIR_PAGE_FRACTURE, + oWritable) + << createObjectInfos(NM_RESERVOIR_PAGE_COMPOSITE_REGION, + oWritable) + << createObjectInfos(NM_RESERVOIR_PAGE_REGION_MARK, + oWritable); + for (int nInfoIndex = 0; + nInfoIndex < listAll.size(); + ++nInfoIndex) + { + const nmReservoirPropertyObjectInfo& oInfo = + listAll[nInfoIndex]; + if (!containsEnumField(oInfo, sParameterId)) + { + continue; + } + if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_REGION_MARK) + { + nmDataRegionMark& oMark = + oWritable.m_vecRegionMarks[oInfo.m_nSourceIndex]; + return enumCodeFromStoredValue( + sParameterId, + oMark.getReservoirType().getValue().toString()); + } + if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_FAULT) + { + nmDataFault& oFault = + oWritable.m_vecFaults[oInfo.m_nSourceIndex]; + return enumCodeFromStoredValue( + sParameterId, + oFault.getFaultFlowModel().getValue().toString()); + } + if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_FRACTURE) + { + nmDataFracture& oFracture = + oWritable.m_vecFractures[oInfo.m_nSourceIndex]; + return enumCodeFromStoredValue( + sParameterId, + oFracture.getFractureFlowModel() + .getValue().toString()); + } + if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_REGION) + { + nmDataRegion& oRegion = + oWritable.m_vecRegions[oInfo.m_nSourceIndex]; + return enumCodeFromStoredValue( + sParameterId, + oRegion.getRegionFlowModel().getValue().toString()); + } + } + return QString(); +} + +bool nmReservoirParameterCatalog::setEnumCode( + nmReservoirPropertiesSnapshot& oSnapshot, + const QString& sParameterId, + const QString& sCode) +{ + QString sStoredValue = + storedValueFromEnumCode(sParameterId, sCode); + if (sStoredValue.isEmpty()) + { + return false; + } + + if (sParameterId == "ReservoirType") + { + oSnapshot.m_oReservoir.getReservoirType() + .setValue(sStoredValue); + return true; + } + + QList listAll; + listAll << createObjectInfos(NM_RESERVOIR_PAGE_FAULT, + oSnapshot) + << createObjectInfos(NM_RESERVOIR_PAGE_FRACTURE, + oSnapshot) + << createObjectInfos(NM_RESERVOIR_PAGE_COMPOSITE_REGION, + oSnapshot) + << createObjectInfos(NM_RESERVOIR_PAGE_REGION_MARK, + oSnapshot); + for (int nInfoIndex = 0; + nInfoIndex < listAll.size(); + ++nInfoIndex) + { + const nmReservoirPropertyObjectInfo& oInfo = + listAll[nInfoIndex]; + if (!containsEnumField(oInfo, sParameterId)) + { + continue; + } + if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_REGION_MARK) + { + oSnapshot.m_vecRegionMarks[oInfo.m_nSourceIndex] + .getReservoirType().setValue(sStoredValue); + return true; + } + if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_FAULT) + { + oSnapshot.m_vecFaults[oInfo.m_nSourceIndex] + .getFaultFlowModel().setValue(sStoredValue); + return true; + } + if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_FRACTURE) + { + oSnapshot.m_vecFractures[oInfo.m_nSourceIndex] + .getFractureFlowModel().setValue(sStoredValue); + return true; + } + if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_REGION) + { + oSnapshot.m_vecRegions[oInfo.m_nSourceIndex] + .getRegionFlowModel().setValue(sStoredValue); + return true; + } + } + return false; +} diff --git a/Src/nmNum/nmSubWxs/nmReservoirParameterField.cpp b/Src/nmNum/nmSubWxs/nmReservoirParameterField.cpp new file mode 100644 index 0000000..23a1755 --- /dev/null +++ b/Src/nmNum/nmSubWxs/nmReservoirParameterField.cpp @@ -0,0 +1,429 @@ +#include "nmReservoirParameterField.h" + +#include "iParaItemCtrl.h" +#include "iParameter.h" +#include "iSysParaHelper.h" +#include "mModuleDefines.h" + +#include +#include +#include +#include +#include +#include + +namespace +{ + +/* Qt 4.8的lupdate需要显式标记间接翻译字符串。 */ +static const char* const s_pFieldTranslationMarkers[] = +{ + QT_TRANSLATE_NOOP("nmReservoirParameterField", "The parameter layout is unavailable."), + QT_TRANSLATE_NOOP("nmReservoirParameterField", "Parameter definition not found: %1"), + QT_TRANSLATE_NOOP("nmReservoirParameterField", "Failed to bind the unit for parameter: %1") +}; + +/** @brief 返回轻量字段类使用的翻译文字。 */ +QString fieldText(const char* pText) +{ + Q_UNUSED(s_pFieldTranslationMarkers); + return QCoreApplication::translate( + "nmReservoirParameterField", pText); +} + +} + +nmReservoirParameterField::nmReservoirParameterField( + const nmReservoirParameterFieldInfo& oFieldInfo, + nmIReservoirParameterUnitService* pUnitService, + QObject* pParent) + : QObject(pParent), + m_oFieldInfo(oFieldInfo), + m_pUnitService(pUnitService), + m_pParameter(nullptr), + m_pLabel(nullptr), + m_pLineEdit(nullptr), + m_pValueComboBox(nullptr), + m_pUnitComboBox(nullptr), + m_pUnitLabel(nullptr), + m_bVisible(true), + m_bUpdating(false) +{ +} + +nmReservoirParameterField::~nmReservoirParameterField() +{ + m_pUnitService = nullptr; + m_pParameter = nullptr; + m_pLabel = nullptr; + m_pLineEdit = nullptr; + m_pValueComboBox = nullptr; + m_pUnitComboBox = nullptr; + m_pUnitLabel = nullptr; +} + +bool nmReservoirParameterField::initialize(QGridLayout* pLayout, + int nRow, + QString& sError) +{ + if (pLayout == nullptr) + { + sError = fieldText("The parameter layout is unavailable."); + return false; + } + + // 第一步:枚举字段不依赖XML数值定义,直接创建稳定code下拉框。 + if (isEnum()) + { + createEnumEditor(pLayout, nRow); + sError.clear(); + return true; + } + + // 第二步:数值字段必须取得NM系列的基础参数定义。 + m_pParameter = _paraHelper->getPara( + m_oFieldInfo.m_sBaseParameterId, s_Nm_Serie); + if (m_pParameter == nullptr) + { + sError = fieldText("Parameter definition not found: %1") + .arg(m_oFieldInfo.m_sBaseParameterId); + return false; + } + + // 第三步:创建原型中的标签、输入框和单位列,不增加字段外框。 + return createNumericEditor(pLayout, nRow, sError); +} + +QString nmReservoirParameterField::parameterId() const +{ + return m_oFieldInfo.m_sParameterId; +} + +QString nmReservoirParameterField::baseParameterId() const +{ + return m_oFieldInfo.m_sBaseParameterId; +} + +bool nmReservoirParameterField::isEnum() const +{ + return m_oFieldInfo.m_eEditorType == NM_RESERVOIR_EDITOR_ENUM; +} + +void nmReservoirParameterField::setValueRightAligned(bool bRightAligned) +{ + if (m_pLineEdit != nullptr) + { + m_pLineEdit->setAlignment( + (bRightAligned ? Qt::AlignRight : Qt::AlignLeft) | + Qt::AlignVCenter); + } +} + +int nmReservoirParameterField::editorMinimumWidth() +{ + return 140; +} + +int nmReservoirParameterField::unitMinimumWidth() +{ + return 86; +} + +int nmReservoirParameterField::editorHeight() +{ + return 25; +} + +bool nmReservoirParameterField::createNumericEditor( + QGridLayout* pLayout, + int nRow, + QString& sError) +{ + QWidget* pParentWidget = pLayout->parentWidget(); + m_pLabel = new QLabel(m_pParameter->m_sAlias, pParentWidget); + m_pLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter); + m_pLabel->setWordWrap(false); + m_pLabel->setSizePolicy(QSizePolicy::Preferred, + QSizePolicy::Fixed); + + m_pLineEdit = new QLineEdit(pParentWidget); + m_pLineEdit->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); + m_pLineEdit->setFixedHeight(editorHeight()); + m_pLineEdit->setMinimumWidth(editorMinimumWidth()); + m_pLineEdit->setSizePolicy(QSizePolicy::Expanding, + QSizePolicy::Fixed); + + pLayout->addWidget(m_pLabel, nRow, 0); + pLayout->addWidget(m_pLineEdit, nRow, 1); + + // 有单位参数直接注册到主对话框绑定器;字段只按控件指针读写, + // 因此多口井共用同一基础参数ID时也不会发生串值。 + if (m_oFieldInfo.m_bUnitEnabled && + !m_pParameter->m_sUnit.isEmpty()) + { + m_pUnitComboBox = new QComboBox(pParentWidget); + m_pUnitComboBox->setFixedHeight(editorHeight()); + m_pUnitComboBox->setMinimumWidth(unitMinimumWidth()); + m_pUnitComboBox->setSizePolicy(QSizePolicy::Expanding, + QSizePolicy::Fixed); + pLayout->addWidget(m_pUnitComboBox, nRow, 2); + if (m_pUnitService == nullptr || + !m_pUnitService->bindUnitField( + m_pLineEdit, + m_pUnitComboBox, + m_oFieldInfo.m_sBaseParameterId)) + { + sError = fieldText( + "Failed to bind the unit for parameter: %1") + .arg(m_oFieldInfo.m_sBaseParameterId); + return false; + } + } + else + { + // 无单位参数保留空列用于对齐,不显示额外的单位说明文字。 + m_pUnitLabel = new QLabel(pParentWidget); + m_pUnitLabel->setMinimumWidth(unitMinimumWidth()); + m_pUnitLabel->setSizePolicy(QSizePolicy::Expanding, + QSizePolicy::Fixed); + pLayout->addWidget(m_pUnitLabel, nRow, 2); + } + + updateValidationAppearance(true); + sError.clear(); + return true; +} + +void nmReservoirParameterField::createEnumEditor(QGridLayout* pLayout, + int nRow) +{ + QWidget* pParentWidget = pLayout->parentWidget(); + m_pLabel = new QLabel(m_oFieldInfo.m_sLabel, pParentWidget); + m_pLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter); + m_pLabel->setWordWrap(false); + m_pLabel->setSizePolicy(QSizePolicy::Preferred, + QSizePolicy::Fixed); + + m_pValueComboBox = new QComboBox(pParentWidget); + m_pValueComboBox->setFixedHeight(editorHeight()); + m_pValueComboBox->setMinimumWidth(editorMinimumWidth()); + m_pValueComboBox->setSizePolicy(QSizePolicy::Expanding, + QSizePolicy::Fixed); + for (int nIndex = 0; + nIndex < m_oFieldInfo.m_listOptions.size(); + ++nIndex) + { + const nmReservoirEnumOption& oOption = + m_oFieldInfo.m_listOptions[nIndex]; + m_pValueComboBox->addItem(oOption.m_sText, oOption.m_sCode); + } + + // 枚举参数没有单位,空白单位列仅用于保持各行编辑器对齐。 + m_pUnitLabel = new QLabel(pParentWidget); + m_pUnitLabel->setMinimumWidth(unitMinimumWidth()); + m_pUnitLabel->setSizePolicy(QSizePolicy::Expanding, + QSizePolicy::Fixed); + + pLayout->addWidget(m_pLabel, nRow, 0); + pLayout->addWidget(m_pValueComboBox, nRow, 1); + pLayout->addWidget(m_pUnitLabel, nRow, 2); +} + +void nmReservoirParameterField::setBaseValue(const QVariant& oValue) +{ + if (m_pLineEdit == nullptr || !oValue.isValid()) + { + return; + } + + m_bUpdating = true; + double dValue = oValue.toDouble(); + if (m_pUnitComboBox != nullptr && m_pUnitService != nullptr) + { + m_pUnitService->setUnitBaseValue(m_pLineEdit, dValue); + } + else + { + m_pLineEdit->setText(formatBaseValue(dValue)); + } + m_bUpdating = false; + validate(); +} + +QVariant nmReservoirParameterField::baseValue(bool& bValid) +{ + bValid = validate(); + if (!bValid || m_pLineEdit == nullptr) + { + return QVariant(); + } + + if (m_pUnitComboBox != nullptr && m_pUnitService != nullptr) + { + return QVariant(m_pUnitService->unitBaseValue(m_pLineEdit)); + } + + bool bNumberOk = false; + double dValue = m_pLineEdit->text().trimmed().toDouble(&bNumberOk); + return bNumberOk ? QVariant(dValue) : QVariant(); +} + +void nmReservoirParameterField::setEnumCode(const QString& sCode) +{ + if (m_pValueComboBox == nullptr) + { + return; + } + int nIndex = m_pValueComboBox->findData(sCode); + m_bUpdating = true; + m_pValueComboBox->setCurrentIndex(nIndex >= 0 ? nIndex : 0); + m_bUpdating = false; +} + +QString nmReservoirParameterField::enumCode() const +{ + if (m_pValueComboBox == nullptr || + m_pValueComboBox->currentIndex() < 0) + { + return QString(); + } + return m_pValueComboBox->itemData( + m_pValueComboBox->currentIndex()).toString(); +} + +bool nmReservoirParameterField::validate() +{ + if (!m_bVisible || isEnum()) + { + return true; + } + if (m_pLineEdit == nullptr || m_pParameter == nullptr) + { + return false; + } + + bool bValid = false; + if (m_pUnitComboBox != nullptr && m_pUnitService != nullptr) + { + bValid = m_pUnitService->isUnitInputValid(m_pLineEdit); + } + else + { + bool bNumberOk = false; + double dValue = m_pLineEdit->text().trimmed() + .toDouble(&bNumberOk); + bValid = bNumberOk && dValue == dValue && + dValue >= m_pParameter->m_dMin && + dValue <= m_pParameter->m_dMax; + if (bValid && + m_oFieldInfo.m_eEditorType == NM_RESERVOIR_EDITOR_INTEGER) + { + bValid = dValue == static_cast(dValue); + } + } + updateValidationAppearance(bValid); + return bValid; +} + +void nmReservoirParameterField::setFieldVisible(bool bVisible) +{ + m_bVisible = bVisible; + if (m_pLabel != nullptr) + { + m_pLabel->setVisible(bVisible); + } + if (m_pLineEdit != nullptr) + { + m_pLineEdit->setVisible(bVisible); + } + if (m_pValueComboBox != nullptr) + { + m_pValueComboBox->setVisible(bVisible); + } + if (m_pUnitComboBox != nullptr) + { + m_pUnitComboBox->setVisible(bVisible); + } + if (m_pUnitLabel != nullptr) + { + m_pUnitLabel->setVisible(bVisible); + } +} + +bool nmReservoirParameterField::isFieldVisible() const +{ + return m_bVisible; +} + +QLineEdit* nmReservoirParameterField::valueEditor() const +{ + return m_pLineEdit; +} + +QComboBox* nmReservoirParameterField::enumEditor() const +{ + return m_pValueComboBox; +} + +QString nmReservoirParameterField::formatBaseValue(double dValue) const +{ + if (m_pParameter == nullptr) + { + return QString::number(dValue, 'g', 15); + } + if (m_oFieldInfo.m_eEditorType == NM_RESERVOIR_EDITOR_INTEGER || + m_pParameter->m_nDigit == 0) + { + return QString::number(dValue, 'f', 0); + } + if (m_pParameter->m_bScientific) + { + return QString::number(dValue, 'e', m_pParameter->m_nDigit); + } + + QString sValue = QString::number( + dValue, 'f', m_pParameter->m_nDigit); + while (sValue.contains('.') && sValue.endsWith('0')) + { + sValue.chop(1); + } + if (sValue.endsWith('.')) + { + sValue.chop(1); + } + return sValue; +} + +void nmReservoirParameterField::updateValidationAppearance(bool bValid) +{ + Q_UNUSED(bValid); + if (m_pLineEdit == nullptr || m_pParameter == nullptr) + { + return; + } + + QString sCurrentUnit; + iUnitGroup* pUnitGroup = nullptr; + if (m_pUnitComboBox != nullptr && m_pUnitService != nullptr) + { + sCurrentUnit = m_pUnitService->currentUnit(m_pLineEdit); + pUnitGroup = m_pUnitService->unitGroup(m_pLineEdit); + } + QString sRange = iParaItemCtrl::getScaleStrOf( + m_pParameter, sCurrentUnit, pUnitGroup); + QString sHelp = m_pParameter->m_sDesc; + if (!sRange.isEmpty()) + { + if (!sHelp.isEmpty()) + { + sHelp += "\n"; + } + sHelp += sRange; + } + m_pLineEdit->setToolTip(sHelp); + m_pLineEdit->setWhatsThis(sHelp); + if (m_pLabel != nullptr) + { + m_pLabel->setWhatsThis(sHelp); + } +} diff --git a/Src/nmNum/nmSubWxs/nmReservoirParameterPage.cpp b/Src/nmNum/nmSubWxs/nmReservoirParameterPage.cpp new file mode 100644 index 0000000..51565fd --- /dev/null +++ b/Src/nmNum/nmSubWxs/nmReservoirParameterPage.cpp @@ -0,0 +1,539 @@ +#include "nmReservoirParameterPage.h" + +#include "nmReservoirParameterField.h" +#include "nmReservoirPropertiesSession.h" + +#include +#include +#include +#include +#include +#include +#include + +nmReservoirParameterPage::nmReservoirParameterPage( + nmReservoirPropertiesCategory eCategory, + nmReservoirPropertiesSession* pSession, + nmIReservoirParameterUnitService* pUnitService, + QWidget* pParent) + : QWidget(pParent), + m_eCategory(eCategory), + m_pSession(pSession), + m_pUnitService(pUnitService), + m_nCurrentObjectIndex(-1), + m_bUpdatingObject(false), + m_bBuildingFields(false), + m_pTitleLabel(nullptr), + m_pObjectLabel(nullptr), + m_pObjectComboBox(nullptr), + m_pGroupsWidget(nullptr), + m_pGroupsLayout(nullptr), + m_pMainLayout(nullptr), + m_pEmptyLabel(nullptr) +{ + createUi(); +} + +nmReservoirParameterPage::~nmReservoirParameterPage() +{ + m_listFields.clear(); + m_mapFields.clear(); + m_mapEditorFields.clear(); + m_pSession = nullptr; + m_pUnitService = nullptr; +} + +void nmReservoirParameterPage::createUi() +{ + // 第一步:创建原型中的单层内容头,储层页自动隐藏对象选择器。 + m_pMainLayout = new QVBoxLayout(this); + m_pMainLayout->setContentsMargins(8, 6, 8, 8); + m_pMainLayout->setSpacing(8); + + QWidget* pHeaderWidget = new QWidget(this); + QHBoxLayout* pHeaderLayout = new QHBoxLayout(pHeaderWidget); + pHeaderLayout->setContentsMargins(8, 4, 8, 4); + pHeaderLayout->setSpacing(9); + + m_pTitleLabel = new QLabel(categoryTitle(), pHeaderWidget); + pHeaderLayout->addWidget(m_pTitleLabel, 1); + + m_pObjectLabel = new QLabel(objectSelectorLabel(), pHeaderWidget); + m_pObjectComboBox = new QComboBox(pHeaderWidget); + m_pObjectComboBox->setMinimumWidth(260); + m_pObjectComboBox->setMinimumHeight(27); + pHeaderLayout->addWidget(m_pObjectLabel); + pHeaderLayout->addWidget(m_pObjectComboBox); + // 储层页只有一个固定对象,顶部分类按钮已经说明当前页面, + // 不再重复显示无操作价值的页标题;其他页面保留对象选择区。 + if (m_eCategory == NM_RESERVOIR_PAGE_RESERVOIR) + { + pHeaderWidget->hide(); + } + else + { + m_pMainLayout->addWidget(pHeaderWidget); + } + + // 第二步:分组载体没有边框,仅用于实现原型中的两列网格。 + m_pGroupsWidget = new QWidget(this); + m_pGroupsLayout = new QGridLayout(m_pGroupsWidget); + m_pGroupsLayout->setContentsMargins(0, 0, 0, 0); + m_pGroupsLayout->setHorizontalSpacing(14); + m_pGroupsLayout->setVerticalSpacing(14); + m_pGroupsLayout->setColumnStretch(0, 1); + m_pGroupsLayout->setColumnStretch(1, 1); + m_pMainLayout->addWidget(m_pGroupsWidget); + m_pMainLayout->addStretch(1); + + connect(m_pObjectComboBox, SIGNAL(currentIndexChanged(int)), + this, SLOT(slotObjectChanged(int))); +} + +QString nmReservoirParameterPage::categoryTitle() const +{ + switch (m_eCategory) + { + case NM_RESERVOIR_PAGE_RESERVOIR: + return tr("Reservoir parameters"); + case NM_RESERVOIR_PAGE_WELL: + return tr("Well parameters"); + case NM_RESERVOIR_PAGE_FAULT: + return tr("Fault parameters"); + case NM_RESERVOIR_PAGE_FRACTURE: + return tr("Fracture parameters"); + case NM_RESERVOIR_PAGE_COMPOSITE_REGION: + return tr("Composite region parameters"); + case NM_RESERVOIR_PAGE_REGION_MARK: + return tr("Region mark parameters"); + default: + return QString(); + } +} + +QString nmReservoirParameterPage::objectSelectorLabel() const +{ + switch (m_eCategory) + { + case NM_RESERVOIR_PAGE_WELL: + return tr("Select well:"); + case NM_RESERVOIR_PAGE_FAULT: + return tr("Select fault:"); + case NM_RESERVOIR_PAGE_FRACTURE: + return tr("Select fracture:"); + case NM_RESERVOIR_PAGE_COMPOSITE_REGION: + return tr("Select composite region:"); + case NM_RESERVOIR_PAGE_REGION_MARK: + return tr("Select region mark:"); + default: + return tr("Select object:"); + } +} + +bool nmReservoirParameterPage::reloadObjects(QString& sError) +{ + // 第一步:重新取得会话对象描述,并把稳定对象code放入UserRole。 + m_listObjectInfos = m_pSession != nullptr + ? m_pSession->objectInfos(m_eCategory) + : QList(); + m_bUpdatingObject = true; + m_pObjectComboBox->clear(); + for (int nIndex = 0; nIndex < m_listObjectInfos.size(); ++nIndex) + { + const nmReservoirPropertyObjectInfo& oInfo = + m_listObjectInfos[nIndex]; + m_pObjectComboBox->addItem(oInfo.m_sDisplayName, + oInfo.m_sObjectCode); + } + m_bUpdatingObject = false; + + bool bShowSelector = m_eCategory != NM_RESERVOIR_PAGE_RESERVOIR; + m_pObjectLabel->setVisible(bShowSelector); + m_pObjectComboBox->setVisible(bShowSelector); + + // 第二步:构建首个对象;空分类显示无额外面板的空状态。 + return buildObject(m_listObjectInfos.isEmpty() ? -1 : 0, sError); +} + +bool nmReservoirParameterPage::hasEditableObjects() const +{ + return !m_listObjectInfos.isEmpty(); +} + +void nmReservoirParameterPage::slotObjectChanged(int nIndex) +{ + if (m_bUpdatingObject || nIndex == m_nCurrentObjectIndex) + { + return; + } + + // 第一步:离开旧对象前校验并保存,非法输入时回退对象选择。 + int nPreviousIndex = m_nCurrentObjectIndex; + if (nPreviousIndex >= 0 && !commitPendingEdits()) + { + m_bUpdatingObject = true; + m_pObjectComboBox->setCurrentIndex(nPreviousIndex); + m_bUpdatingObject = false; + return; + } + + // 第二步:构建新对象;目录已在初始化阶段验证,正常切换不会失败。 + QString sError; + if (!buildObject(nIndex, sError)) + { + m_bUpdatingObject = true; + m_pObjectComboBox->setCurrentIndex(nPreviousIndex); + m_bUpdatingObject = false; + } +} + +bool nmReservoirParameterPage::buildObject(int nObjectIndex, + QString& sError) +{ + m_bBuildingFields = true; + clearObjectEditors(); + m_nCurrentObjectIndex = nObjectIndex; + + if (nObjectIndex < 0 || nObjectIndex >= m_listObjectInfos.size()) + { + m_pEmptyLabel = new QLabel( + tr("No editable objects in this category."), + m_pGroupsWidget); + m_pEmptyLabel->setAlignment(Qt::AlignCenter); + m_pEmptyLabel->setMinimumHeight(260); + m_pGroupsLayout->addWidget(m_pEmptyLabel, 0, 0, 1, 2); + m_bBuildingFields = false; + sError.clear(); + updateValidity(); + return true; + } + + // 第一步:按目录直接创建分组,页面不再包含对象类型专用布局代码。 + const nmReservoirPropertyObjectInfo& oObjectInfo = + m_listObjectInfos[nObjectIndex]; + for (int nGroupIndex = 0; + nGroupIndex < oObjectInfo.m_listGroups.size(); + ++nGroupIndex) + { + if (!buildGroup(oObjectInfo.m_listGroups[nGroupIndex], sError)) + { + m_bBuildingFields = false; + return false; + } + } + + // 第二步:加载工作副本,随后只调整行可见性,不重建页面。 + for (int nFieldIndex = 0; + nFieldIndex < m_listFields.size(); + ++nFieldIndex) + { + loadFieldValue(m_listFields[nFieldIndex]); + } + applyVisibilityRules(); + m_bBuildingFields = false; + sError.clear(); + updateValidity(); + return true; +} + +void nmReservoirParameterPage::clearObjectEditors() +{ + m_listFields.clear(); + m_mapFields.clear(); + m_mapEditorFields.clear(); + m_pEmptyLabel = nullptr; + + // 分组载体本身保留,只删除其直接子控件和布局项。 + while (m_pGroupsLayout->count() > 0) + { + QLayoutItem* pItem = m_pGroupsLayout->takeAt(0); + if (pItem->widget() != nullptr) + { + delete pItem->widget(); + } + delete pItem; + } +} + +bool nmReservoirParameterPage::buildGroup( + const nmReservoirParameterGroupInfo& oGroupInfo, + QString& sError) +{ + // 承载器始终横向铺满网格单元;只通过内部弹簧控制垂直位置, + // 避免直接设置对齐标志后分组框退回建议宽度。 + QWidget* pGroupContainer = new QWidget(m_pGroupsWidget); + pGroupContainer->setSizePolicy(QSizePolicy::Expanding, + QSizePolicy::Expanding); + QVBoxLayout* pGroupContainerLayout = + new QVBoxLayout(pGroupContainer); + pGroupContainerLayout->setContentsMargins(0, 0, 0, 0); + pGroupContainerLayout->setSpacing(0); + + QGroupBox* pGroupBox = new QGroupBox( + oGroupInfo.m_sTitle, pGroupContainer); + // 参数框只在水平方向随页面宽度调整,垂直方向始终采用内容建议高度, + // 避免跨行分组被网格拉伸成大面积空白框。 + pGroupBox->setSizePolicy(QSizePolicy::Expanding, + QSizePolicy::Fixed); + QGridLayout* pFieldLayout = new QGridLayout(pGroupBox); + pFieldLayout->setContentsMargins(8, 15, 8, 10); + pFieldLayout->setHorizontalSpacing(6); + pFieldLayout->setVerticalSpacing(6); + // 标签列由本组最长标签的自然宽度决定,数值列和单位列按比例使用剩余空间。 + pFieldLayout->setColumnStretch(0, 0); + pFieldLayout->setColumnStretch(1, 8); + pFieldLayout->setColumnStretch(2, 5); + pFieldLayout->setColumnMinimumWidth( + 1, nmReservoirParameterField::editorMinimumWidth()); + pFieldLayout->setColumnMinimumWidth( + 2, nmReservoirParameterField::unitMinimumWidth()); + + // 每个字段只把三个直接控件放入此网格,不产生字段外框或子面板。 + for (int nFieldIndex = 0; + nFieldIndex < oGroupInfo.m_listFields.size(); + ++nFieldIndex) + { + nmReservoirParameterField* pField = + new nmReservoirParameterField( + oGroupInfo.m_listFields[nFieldIndex], + m_pUnitService, + pGroupBox); + if (!pField->initialize(pFieldLayout, nFieldIndex, sError)) + { + delete pGroupContainer; + return false; + } + pField->setValueRightAligned( + oGroupInfo.m_bValueRightAligned); + if (pField->valueEditor() != nullptr) + { + connect(pField->valueEditor(), SIGNAL(textChanged(QString)), + this, SLOT(slotFieldValueEdited())); + m_mapEditorFields.insert(pField->valueEditor(), pField); + } + if (pField->enumEditor() != nullptr) + { + connect(pField->enumEditor(), SIGNAL(currentIndexChanged(int)), + this, SLOT(slotEnumIndexChanged(int))); + m_mapEditorFields.insert(pField->enumEditor(), pField); + } + m_listFields.append(pField); + m_mapFields.insert(pField->parameterId(), pField); + } + + // 跨越多行的分组在承载区域垂直居中,普通分组保持顶部排列。 + if (oGroupInfo.m_nRowSpan > 1) + { + pGroupContainerLayout->addStretch(1); + } + pGroupContainerLayout->addWidget(pGroupBox); + pGroupContainerLayout->addStretch(1); + + m_pGroupsLayout->addWidget( + pGroupContainer, + oGroupInfo.m_nRow, + oGroupInfo.m_nColumn, + oGroupInfo.m_nRowSpan, + oGroupInfo.m_nColumnSpan); + return true; +} + +void nmReservoirParameterPage::loadFieldValue( + nmReservoirParameterField* pField) +{ + if (pField == nullptr || m_pSession == nullptr) + { + return; + } + if (pField->isEnum()) + { + pField->setEnumCode(m_pSession->enumCode( + pField->parameterId())); + } + else + { + pField->setBaseValue(m_pSession->value( + pField->parameterId())); + } +} + +bool nmReservoirParameterPage::commitPendingEdits() +{ + if (m_pSession == nullptr) + { + return false; + } + + // 第一步:先完整校验,避免部分字段已写入而后续字段失败。 + if (!isInputValid()) + { + updateValidity(); + return false; + } + + // 第二步:逐行按编辑器指针获取基准值,再统一写入工作副本。 + QMap mapValues; + for (int nFieldIndex = 0; + nFieldIndex < m_listFields.size(); + ++nFieldIndex) + { + nmReservoirParameterField* pField = + m_listFields[nFieldIndex]; + if (pField == nullptr || pField->isEnum() || + !pField->isFieldVisible()) + { + continue; + } + bool bValid = false; + QVariant oValue = pField->baseValue(bValid); + if (!bValid || !oValue.isValid()) + { + updateValidity(); + return false; + } + mapValues.insert(pField->parameterId(), oValue); + } + m_pSession->setValues(mapValues); + updateValidity(); + return true; +} + +bool nmReservoirParameterPage::isInputValid() +{ + for (int nFieldIndex = 0; + nFieldIndex < m_listFields.size(); + ++nFieldIndex) + { + nmReservoirParameterField* pField = + m_listFields[nFieldIndex]; + if (pField != nullptr && pField->isFieldVisible() && + !pField->validate()) + { + return false; + } + } + return true; +} + +void nmReservoirParameterPage::slotFieldValueEdited() +{ + if (!m_bBuildingFields) + { + nmReservoirParameterField* pField = + m_mapEditorFields.value(sender(), nullptr); + if (pField != nullptr) + { + pField->validate(); + } + updateValidity(); + } +} + +void nmReservoirParameterPage::slotEnumIndexChanged(int nIndex) +{ + Q_UNUSED(nIndex); + if (m_bBuildingFields || m_pSession == nullptr) + { + return; + } + + nmReservoirParameterField* pField = + m_mapEditorFields.value(sender(), nullptr); + if (pField == nullptr) + { + return; + } + QString sParameterId = pField->parameterId(); + + // 第一步:联动前保存当前可见数值;非法时回滚枚举code。 + QString sPreviousCode = m_pSession->enumCode(sParameterId); + if (!commitPendingEdits()) + { + m_bBuildingFields = true; + pField->setEnumCode(sPreviousCode); + m_bBuildingFields = false; + return; + } + + // 第二步:只用稳定code更新工作副本,显示文字不参与业务判断。 + if (!m_pSession->setEnumCode(sParameterId, pField->enumCode())) + { + m_bBuildingFields = true; + pField->setEnumCode(sPreviousCode); + m_bBuildingFields = false; + return; + } + + // 第三步:仅显示或隐藏行,隐藏参数继续保留在工作副本中。 + applyVisibilityRules(); + updateValidity(); +} + +void nmReservoirParameterPage::applyVisibilityRules() +{ + if (m_pSession == nullptr || m_nCurrentObjectIndex < 0 || + m_nCurrentObjectIndex >= m_listObjectInfos.size()) + { + return; + } + + const nmReservoirPropertyObjectInfo& oInfo = + m_listObjectInfos[m_nCurrentObjectIndex]; + + // 区域标记为均质储层时隐藏双重介质参数。 + if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_REGION_MARK) + { + QString sModelId = oInfo.m_sObjectCode + + "_RM_ReservoirType"; + bool bDual = m_pSession->enumCode(sModelId) != "homogeneous"; + setFieldVisible(oInfo.m_sObjectCode + "_RM_ComW", bDual); + setFieldVisible(oInfo.m_sObjectCode + "_RM_ComKr", bDual); + setFieldVisible(oInfo.m_sObjectCode + "_RM_NetToGross", bDual); + } + + // 无限导流裂缝不显示有限导流能力和裂缝宽度参数。 + if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_FRACTURE) + { + QString sModelId = oInfo.m_sObjectCode + "_F_FlowModel"; + bool bFinite = m_pSession->enumCode(sModelId) != + "infinite_conductivity"; + setFieldVisible(oInfo.m_sObjectCode + "_F_FC", bFinite); + setFieldVisible(oInfo.m_sObjectCode + "_F_DW", bFinite); + } + + // 非泄漏断层或复合区不显示泄漏系数。 + if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_FAULT) + { + bool bLeaky = m_pSession->enumCode( + oInfo.m_sObjectCode + "_FT_FlowModel") == "leaky"; + setFieldVisible(oInfo.m_sObjectCode + "_FT_Leakage", bLeaky); + } + if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_REGION) + { + bool bLeaky = m_pSession->enumCode( + oInfo.m_sObjectCode + "_R_FlowModel") == "leaky"; + setFieldVisible(oInfo.m_sObjectCode + "_R_Leakage", bLeaky); + } +} + +void nmReservoirParameterPage::setFieldVisible( + const QString& sParameterId, + bool bVisible) +{ + nmReservoirParameterField* pField = + m_mapFields.value(sParameterId, nullptr); + if (pField != nullptr) + { + pField->setFieldVisible(bVisible); + } +} + +void nmReservoirParameterPage::updateValidity() +{ + emit sigValidityChanged(isInputValid()); +} + +nmReservoirPropertiesCategory nmReservoirParameterPage::category() const +{ + return m_eCategory; +} diff --git a/Src/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.cpp b/Src/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.cpp new file mode 100644 index 0000000..c10ada0 --- /dev/null +++ b/Src/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.cpp @@ -0,0 +1,119 @@ +#include "nmReservoirPropertiesDataSource.h" + +#include "nmDataAnalyzeManager.h" +#include "nmDataWellBase.h" +#include "nmWxParameterProperty.h" + +nmReservoirPropertiesSnapshot::nmReservoirPropertiesSnapshot() +{ +} + +nmIReservoirPropertiesDataSource::~nmIReservoirPropertiesDataSource() +{ +} + +nmAnalyzeManagerReservoirDataSource::nmAnalyzeManagerReservoirDataSource( + nmDataAnalyzeManager* pDataManager) + : m_pDataManager(pDataManager) +{ +} + +nmAnalyzeManagerReservoirDataSource::~nmAnalyzeManagerReservoirDataSource() +{ + m_pDataManager = nullptr; +} + +bool nmAnalyzeManagerReservoirDataSource::loadSnapshot( + nmReservoirPropertiesSnapshot& oSnapshot, + QString& sError) const +{ + // 第一步:确认入口已经注入有效的数据管理器。 + if (m_pDataManager == nullptr) + { + sError = QObject::tr("The current numerical well-test data is unavailable."); + return false; + } + + // 第二步:复制储层和几何对象,确保界面编辑不会触碰实时数据。 + oSnapshot.m_oReservoir = m_pDataManager->getReservoirDataCopy(); + oSnapshot.m_vecRegionMarks = m_pDataManager->getRegionMarkDataListCopy(); + oSnapshot.m_vecFaults = m_pDataManager->getFaultDataListCopy(); + oSnapshot.m_vecFractures = m_pDataManager->getFractureDataListCopy(); + oSnapshot.m_vecRegions = m_pDataManager->getRegionDataListCopy(); + + oSnapshot.m_vecVerticalWells.clear(); + oSnapshot.m_vecVerticalFracturedWells.clear(); + oSnapshot.m_vecHorizontalFracturedWells.clear(); + + // 第三步:按最具体的井型复制数据,显式排除不受求解器支持的普通水平井。 + QVector vecWells = m_pDataManager->getWellDataList(); + for (int nIndex = 0; nIndex < vecWells.size(); ++nIndex) + { + nmDataWellBase* pWell = vecWells[nIndex]; + if (pWell == nullptr) + { + continue; + } + + nmDataVerticalFracturedWell* pVerticalFractured = + dynamic_cast(pWell); + nmDataHorizontalFracturedWell* pHorizontalFractured = + dynamic_cast(pWell); + nmDataVerticalWell* pVertical = dynamic_cast(pWell); + + if (pVerticalFractured != nullptr) + { + oSnapshot.m_vecVerticalFracturedWells.append(*pVerticalFractured); + } + else if (pHorizontalFractured != nullptr) + { + oSnapshot.m_vecHorizontalFracturedWells.append(*pHorizontalFractured); + } + else if (pVertical != nullptr) + { + oSnapshot.m_vecVerticalWells.append(*pVertical); + } + } + + sError.clear(); + return true; +} + +bool nmAnalyzeManagerReservoirDataSource::commitSnapshot( + const nmReservoirPropertiesSnapshot& oSnapshot, + bool bGeometryChanged, + QString& sError) +{ + // 第一步:提交前再次校验数据管理器生命周期。 + if (m_pDataManager == nullptr) + { + sError = QObject::tr("The current numerical well-test data is unavailable."); + return false; + } + + // 第二步:按对象类型批量替换现有数据,不改变对象地址和列表结构。 + m_pDataManager->updateVerticalWells(oSnapshot.m_vecVerticalWells); + m_pDataManager->updateVerticalFracturedWells(oSnapshot.m_vecVerticalFracturedWells); + m_pDataManager->updateHorizontalFracturedWells(oSnapshot.m_vecHorizontalFracturedWells); + m_pDataManager->updateFaultData(oSnapshot.m_vecFaults); + m_pDataManager->updateFractureData(oSnapshot.m_vecFractures); + m_pDataManager->updateRegionData(oSnapshot.m_vecRegions); + m_pDataManager->updateRegionMarkData(oSnapshot.m_vecRegionMarks); + m_pDataManager->updateReservoirData(oSnapshot.m_oReservoir); + + // 第三步:重建实时注册表映射,并在几何变化时统一通知画布和网格。 + m_pDataManager->syncWellAttrs(); + m_pDataManager->syncGeometryAttrs(); + if (bGeometryChanged) + { + m_pDataManager->notifyDataChanged(); + m_pDataManager->updateWellPlotByDataManager(); + } + + // 第四步:兼容仍在使用旧参数树的窗口,提交完成后只刷新一次表格入口。 + nmWxParameterProperty::notifyUpdateTable(); + + sError.clear(); + return true; +} + diff --git a/Src/nmNum/nmSubWxs/nmReservoirPropertiesSession.cpp b/Src/nmNum/nmSubWxs/nmReservoirPropertiesSession.cpp new file mode 100644 index 0000000..293b74c --- /dev/null +++ b/Src/nmNum/nmSubWxs/nmReservoirPropertiesSession.cpp @@ -0,0 +1,242 @@ +#include "nmReservoirPropertiesSession.h" + +#include "nmAttrRegistry.h" +#include "nmDataAttribute.h" + +namespace +{ + +/** @brief 比较两个QVariant数值,保留字符串和整数的精确语义。 */ +bool sameValue(const QVariant& oLeft, const QVariant& oRight) +{ + return oLeft == oRight; +} + +/** @brief 比较两口井的网格相关参数。 */ +bool sameWellGeometry(nmDataWellBase& oLeft, nmDataWellBase& oRight) +{ + return sameValue(oLeft.getX().getValue(), oRight.getX().getValue()) && + sameValue(oLeft.getY().getValue(), oRight.getY().getValue()) && + sameValue(oLeft.getRadius().getValue(), oRight.getRadius().getValue()); +} + +} + +nmReservoirPropertiesSession::nmReservoirPropertiesSession( + nmIReservoirPropertiesDataSource* pDataSource) + : m_pDataSource(pDataSource), + m_pAttrRegistry(new nmAttrRegistry), + m_bInitialized(false) +{ +} + +nmReservoirPropertiesSession::~nmReservoirPropertiesSession() +{ + delete m_pAttrRegistry; + m_pAttrRegistry = nullptr; + m_pDataSource = nullptr; +} + +bool nmReservoirPropertiesSession::initialize(QString& sError) +{ + // 第一步:读取一次真实数据,作为取消和变更检测的基线。 + if (m_pDataSource == nullptr || + !m_pDataSource->loadSnapshot(m_oOriginalSnapshot, sError)) + { + m_bInitialized = false; + return false; + } + + // 第二步:复制出独立工作副本,后续界面修改只写入此对象。 + m_oWorkingSnapshot = m_oOriginalSnapshot; + nmReservoirParameterCatalog::registerSnapshot(m_pAttrRegistry, + m_oWorkingSnapshot); + m_bInitialized = true; + sError.clear(); + return true; +} + +QList nmReservoirPropertiesSession::objectInfos( + nmReservoirPropertiesCategory eCategory) +{ + if (!m_bInitialized) + { + return QList(); + } + return nmReservoirParameterCatalog::createObjectInfos(eCategory, + m_oWorkingSnapshot); +} + +QVariant nmReservoirPropertiesSession::value(const QString& sParameterId) const +{ + if (!m_bInitialized || m_pAttrRegistry == nullptr) + { + return QVariant(); + } + QStringList listIds; + listIds << sParameterId; + return m_pAttrRegistry->collect(listIds).value(sParameterId, QVariant()); +} + +bool nmReservoirPropertiesSession::setValue(const QString& sParameterId, + const QVariant& oValue) +{ + if (!m_bInitialized || m_pAttrRegistry == nullptr || + !m_pAttrRegistry->registeredNames().contains(sParameterId)) + { + return false; + } + m_pAttrRegistry->setValue(sParameterId, oValue); + return true; +} + +void nmReservoirPropertiesSession::setValues( + const QMap& mapValues) +{ + QMap::const_iterator oIterator = mapValues.constBegin(); + for (; oIterator != mapValues.constEnd(); ++oIterator) + { + setValue(oIterator.key(), oIterator.value()); + } +} + +QString nmReservoirPropertiesSession::enumCode(const QString& sParameterId) const +{ + if (!m_bInitialized) + { + return QString(); + } + return nmReservoirParameterCatalog::enumCode(m_oWorkingSnapshot, + sParameterId); +} + +bool nmReservoirPropertiesSession::setEnumCode(const QString& sParameterId, + const QString& sCode) +{ + if (!m_bInitialized) + { + return false; + } + return nmReservoirParameterCatalog::setEnumCode(m_oWorkingSnapshot, + sParameterId, + sCode); +} + +bool nmReservoirPropertiesSession::commit(QString& sError) +{ + if (!m_bInitialized || m_pDataSource == nullptr) + { + sError = QObject::tr("The reservoir properties editing session is unavailable."); + return false; + } + + // 第一步:在提交前计算几何变更,供数据源决定是否重建网格和刷新画布。 + bool bGeometryChanged = isGeometryChanged(); + + // 第二步:将完整工作副本一次性交给数据源;失败时继续保留当前编辑内容。 + if (!m_pDataSource->commitSnapshot(m_oWorkingSnapshot, + bGeometryChanged, + sError)) + { + return false; + } + + // 第三步:提交成功后更新基线,防止同一会话重复识别旧变更。 + m_oOriginalSnapshot = m_oWorkingSnapshot; + sError.clear(); + return true; +} + +const nmReservoirPropertiesSnapshot& +nmReservoirPropertiesSession::workingSnapshot() const +{ + return m_oWorkingSnapshot; +} + +bool nmReservoirPropertiesSession::isGeometryChanged() const +{ + // 第一步:对象数量变化视为几何变化,虽然当前对话框本身不提供增删操作。 + if (m_oOriginalSnapshot.m_vecVerticalWells.size() != + m_oWorkingSnapshot.m_vecVerticalWells.size() || + m_oOriginalSnapshot.m_vecVerticalFracturedWells.size() != + m_oWorkingSnapshot.m_vecVerticalFracturedWells.size() || + m_oOriginalSnapshot.m_vecHorizontalFracturedWells.size() != + m_oWorkingSnapshot.m_vecHorizontalFracturedWells.size()) + { + return true; + } + + // 第二步:比较三类井的位置和井径。 + for (int nIndex = 0; nIndex < m_oWorkingSnapshot.m_vecVerticalWells.size(); ++nIndex) + { + nmDataVerticalWell& oOriginal = + const_cast(m_oOriginalSnapshot.m_vecVerticalWells[nIndex]); + nmDataVerticalWell& oWorking = + const_cast(m_oWorkingSnapshot.m_vecVerticalWells[nIndex]); + if (!sameWellGeometry(oOriginal, oWorking)) + { + return true; + } + } + for (int nIndex = 0; nIndex < m_oWorkingSnapshot.m_vecVerticalFracturedWells.size(); ++nIndex) + { + nmDataVerticalFracturedWell& oOriginal = const_cast( + m_oOriginalSnapshot.m_vecVerticalFracturedWells[nIndex]); + nmDataVerticalFracturedWell& oWorking = const_cast( + m_oWorkingSnapshot.m_vecVerticalFracturedWells[nIndex]); + if (!sameWellGeometry(oOriginal, oWorking) || + !sameValue(oOriginal.getFractureHalfLength().getValue(), + oWorking.getFractureHalfLength().getValue()) || + !sameValue(oOriginal.getFractureAngle().getValue(), + oWorking.getFractureAngle().getValue())) + { + return true; + } + } + for (int nIndex = 0; nIndex < m_oWorkingSnapshot.m_vecHorizontalFracturedWells.size(); ++nIndex) + { + nmDataHorizontalFracturedWell& oOriginal = + const_cast( + m_oOriginalSnapshot.m_vecHorizontalFracturedWells[nIndex]); + nmDataHorizontalFracturedWell& oWorking = + const_cast( + m_oWorkingSnapshot.m_vecHorizontalFracturedWells[nIndex]); + if (!sameWellGeometry(oOriginal, oWorking) || + !sameValue(oOriginal.getWellLength().getValue(), oWorking.getWellLength().getValue()) || + !sameValue(oOriginal.getDrainAngle().getValue(), oWorking.getDrainAngle().getValue()) || + !sameValue(oOriginal.getNumberOfFractures().getValue(), + oWorking.getNumberOfFractures().getValue()) || + !sameValue(oOriginal.getFractureHalfLength().getValue(), + oWorking.getFractureHalfLength().getValue()) || + !sameValue(oOriginal.getFractureAngle().getValue(), + oWorking.getFractureAngle().getValue())) + { + return true; + } + } + + // 第三步:断层和裂缝端点也直接参与网格,因此比较完整点坐标。 + if (m_oOriginalSnapshot.m_vecFaults.size() != m_oWorkingSnapshot.m_vecFaults.size() || + m_oOriginalSnapshot.m_vecFractures.size() != m_oWorkingSnapshot.m_vecFractures.size()) + { + return true; + } + for (int nIndex = 0; nIndex < m_oWorkingSnapshot.m_vecFaults.size(); ++nIndex) + { + if (m_oOriginalSnapshot.m_vecFaults[nIndex].getFaultPoints() != + m_oWorkingSnapshot.m_vecFaults[nIndex].getFaultPoints()) + { + return true; + } + } + for (int nIndex = 0; nIndex < m_oWorkingSnapshot.m_vecFractures.size(); ++nIndex) + { + if (m_oOriginalSnapshot.m_vecFractures[nIndex].getFracturePoints() != + m_oWorkingSnapshot.m_vecFractures[nIndex].getFracturePoints()) + { + return true; + } + } + return false; +} + diff --git a/Src/nmNum/nmSubWxs/nmWxAutomaticFitting.cpp b/Src/nmNum/nmSubWxs/nmWxAutomaticFitting.cpp index 202d14c..3d31d8d 100644 --- a/Src/nmNum/nmSubWxs/nmWxAutomaticFitting.cpp +++ b/Src/nmNum/nmSubWxs/nmWxAutomaticFitting.cpp @@ -408,7 +408,7 @@ void nmWxAutomaticFitting::setupParameterTable() m_parameterTable->setItem(0, 2, new QTableWidgetItem(QString::number(automaticFittingData.getPermeabilityMin().getValue().toDouble()))); m_parameterTable->setItem(0, 3, new QTableWidgetItem(QString::number(reservoirData.getPermeability().getValue().toDouble()))); m_parameterTable->setItem(0, 4, new QTableWidgetItem(QString::number(automaticFittingData.getPermeabilityMax().getValue().toDouble()))); - m_parameterTable->setItem(0, 5, new QTableWidgetItem(tr("Darcy"))); + m_parameterTable->setItem(0, 5, new QTableWidgetItem(tr("D"))); // 表皮系数 (Skin) m_parameterTable->setItem(1, 0, new QTableWidgetItem("2")); diff --git a/Src/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.cpp b/Src/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.cpp new file mode 100644 index 0000000..d71d944 --- /dev/null +++ b/Src/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.cpp @@ -0,0 +1,544 @@ +#include "nmWxReservoirPropertiesEditor.h" + +#include "nmReservoirPropertiesDataSource.h" +#include "nmReservoirPropertiesSession.h" +#include "nmReservoirParameterPage.h" +#include "iUnitGroup.h" +#include "iUnitHelper.h" +#include "iUnitWxBinder.h" +#include "mModuleDefines.h" +#include "ZxBaseUtil.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +nmWxReservoirPropertiesEditor::nmWxReservoirPropertiesEditor( + nmIReservoirPropertiesDataSource* pDataSource, + QWidget* pParent) + : iDlgBase(pParent), + m_pDataSource(pDataSource), + m_pSession(new nmReservoirPropertiesSession(pDataSource)), + m_pCategoryButtonGroup(nullptr), + m_pStackedWidget(nullptr), + m_pButtonBox(nullptr), + m_pFooterHelpButton(nullptr), + m_pStatusLabel(nullptr), + m_nCurrentCategory(NM_RESERVOIR_PAGE_RESERVOIR), + m_bInitialized(false) +{ + for (int nIndex = 0; nIndex < NM_RESERVOIR_PAGE_COUNT; ++nIndex) + { + m_pPages[nIndex] = nullptr; + } + + // 单位绑定器必须先切换到数值试井参数系列,再创建任何参数字段。 + setParaSrcTag(s_Nm_Serie); + createUi(); + setWindowTitle(tr("Reservoir properties settings")); + setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); + // 首次打开使用建议尺寸,后续最小宽高均由页面内容和布局自动决定。 + resize(880, 520); +} + +nmWxReservoirPropertiesEditor::~nmWxReservoirPropertiesEditor() +{ + delete m_pSession; + m_pSession = nullptr; + m_pDataSource = nullptr; +} + +void nmWxReservoirPropertiesEditor::createUi() +{ + // 第一步:创建原型中的顶部ribbon和无边框页面堆栈。 + QVBoxLayout* pMainLayout = new QVBoxLayout(this); + pMainLayout->setContentsMargins(12, 10, 12, 0); + pMainLayout->setSpacing(0); + pMainLayout->addWidget(createCategoryBar()); + + m_pStackedWidget = new QStackedWidget(this); + pMainLayout->addWidget(m_pStackedWidget, 1); + + // 第二步:底部左侧放帮助与状态,右侧只放确定和取消。 + QWidget* pFooterWidget = new QWidget(this); + QHBoxLayout* pFooterLayout = new QHBoxLayout(pFooterWidget); + pFooterLayout->setContentsMargins(4, 5, 4, 5); + pFooterLayout->setSpacing(8); + + m_pFooterHelpButton = new QToolButton(pFooterWidget); + m_pFooterHelpButton->setText(tr("Help")); + m_pFooterHelpButton->setIcon(zxLoadIcon("Help")); + m_pFooterHelpButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + m_pFooterHelpButton->setAutoRaise(true); + pFooterLayout->addWidget(m_pFooterHelpButton); + + m_pStatusLabel = new QLabel(pFooterWidget); + m_pStatusLabel->setWordWrap(true); + pFooterLayout->addWidget(m_pStatusLabel, 1); + + m_pButtonBox = new QDialogButtonBox( + QDialogButtonBox::Ok | QDialogButtonBox::Cancel, + Qt::Horizontal, + pFooterWidget); + QPushButton* pOkButton = m_pButtonBox->button(QDialogButtonBox::Ok); + QPushButton* pCancelButton = + m_pButtonBox->button(QDialogButtonBox::Cancel); + if (pOkButton != nullptr) + { + pOkButton->setIcon(zxLoadIcon("OK")); + pOkButton->setText(tr("OK")); + } + if (pCancelButton != nullptr) + { + pCancelButton->setIcon(zxLoadIcon("Cancel")); + pCancelButton->setText(tr("Cancel")); + } + pFooterLayout->addWidget(m_pButtonBox); + pMainLayout->addWidget(pFooterWidget); + + connect(m_pButtonBox, SIGNAL(accepted()), this, SLOT(accept())); + connect(m_pButtonBox, SIGNAL(rejected()), this, SLOT(reject())); + connect(m_pFooterHelpButton, SIGNAL(clicked()), + this, SLOT(slotHelp())); +} + +QWidget* nmWxReservoirPropertiesEditor::createCategoryBar() +{ + // 使用无标题分组框承载顶部导航,获得与框架工具栏相近的浅色外边框。 + QGroupBox* pCategoryBar = new QGroupBox(this); + + // 为边框和内部命令区保留少量间距,窗口拉伸时右侧空白自然扩展。 + QHBoxLayout* pBarLayout = new QHBoxLayout(pCategoryBar); + pBarLayout->setContentsMargins(3, 3, 3, 3); + pBarLayout->setSpacing(0); + + m_pCategoryButtonGroup = new QButtonGroup(this); + + // 第一步:基础组只包含储层参数。 + QHBoxLayout* pBasicLayout = nullptr; + QWidget* pBasicGroup = createRibbonGroup( + tr("Basic"), pCategoryBar, pBasicLayout); + pBasicLayout->insertWidget(0, createCategoryButton( + NM_RESERVOIR_PAGE_RESERVOIR, + tr("Reservoir parameters"), + "ResData", + pBasicGroup)); + pBarLayout->addWidget(pBasicGroup); + pBarLayout->addWidget(createRibbonSeparator(pCategoryBar)); + + // 第二步:井筒参数独立成组,避免与储层内部区域对象混在一起。 + QHBoxLayout* pWellLayout = nullptr; + QWidget* pWellGroup = createRibbonGroup( + tr("Wells"), pCategoryBar, pWellLayout); + pWellLayout->insertWidget(0, createCategoryButton( + NM_RESERVOIR_PAGE_WELL, + tr("Well parameters"), + "NmWell", + pWellGroup)); + pBarLayout->addWidget(pWellGroup); + pBarLayout->addWidget(createRibbonSeparator(pCategoryBar)); + + // 第三步:四类储层平面对象按用户工作顺序放入同一个几何对象组。 + QHBoxLayout* pGeometryLayout = nullptr; + QWidget* pGeometryGroup = createRibbonGroup( + tr("Geometry objects"), + pCategoryBar, + pGeometryLayout); + pGeometryLayout->insertWidget(0, createCategoryButton( + NM_RESERVOIR_PAGE_FAULT, + tr("Faults"), + "NmFault", + pGeometryGroup)); + pGeometryLayout->insertWidget(1, createCategoryButton( + NM_RESERVOIR_PAGE_FRACTURE, + tr("Fractures"), + "NmFault", + pGeometryGroup)); + pGeometryLayout->insertWidget(2, createCategoryButton( + NM_RESERVOIR_PAGE_COMPOSITE_REGION, + tr("Composite regions"), + "NmRegion", + pGeometryGroup)); + pGeometryLayout->insertWidget(3, createCategoryButton( + NM_RESERVOIR_PAGE_REGION_MARK, + tr("Region marks"), + "RegionSelect", + pGeometryGroup)); + pBarLayout->addWidget(pGeometryGroup); + pBarLayout->addWidget(createRibbonSeparator(pCategoryBar)); + + // 第四步:帮助是即时命令,不加入互斥页面按钮组。 + QHBoxLayout* pHelpLayout = nullptr; + QWidget* pHelpGroup = createRibbonGroup( + tr("Help"), pCategoryBar, pHelpLayout); + pHelpLayout->insertWidget(0, createHelpButton(pHelpGroup)); + pBarLayout->addWidget(pHelpGroup); + pBarLayout->addStretch(1); + + connect(m_pCategoryButtonGroup, SIGNAL(buttonClicked(int)), + this, SLOT(slotCategoryButtonClicked(int))); + return pCategoryBar; +} + +QWidget* nmWxReservoirPropertiesEditor::createRibbonGroup( + const QString& sCaption, + QWidget* pParent, + QHBoxLayout*& pCommandLayout) +{ + QWidget* pGroupWidget = new QWidget(pParent); + + // 分组左右保留稳定留白,使按钮不会紧贴相邻分组的竖向分隔线。 + QVBoxLayout* pGroupLayout = new QVBoxLayout(pGroupWidget); + pGroupLayout->setContentsMargins(11, 2, 11, 1); + // 按钮区与下方分组标题之间留出间距,避免两行文字贴得过近。 + pGroupLayout->setSpacing(4); + QWidget* pCommandWidget = new QWidget(pGroupWidget); + pCommandLayout = new QHBoxLayout(pCommandWidget); + pCommandLayout->setContentsMargins(0, 0, 0, 0); + pCommandLayout->setSpacing(6); + pCommandLayout->addStretch(); + pGroupLayout->addWidget(pCommandWidget, 1); + + // 分组标题使用主题灰色和下划线,保持框架参考工具栏的层级表现。 + QLabel* pCaptionLabel = new QLabel(sCaption, pGroupWidget); + pCaptionLabel->setAlignment(Qt::AlignCenter); + pCaptionLabel->setFixedHeight(16); + QFont oCaptionFont = pCaptionLabel->font(); + oCaptionFont.setUnderline(true); + pCaptionLabel->setFont(oCaptionFont); + QPalette oCaptionPalette = pCaptionLabel->palette(); + oCaptionPalette.setColor( + QPalette::WindowText, + pGroupWidget->palette().color(QPalette::Mid)); + pCaptionLabel->setPalette(oCaptionPalette); + pGroupLayout->addWidget(pCaptionLabel); + return pGroupWidget; +} + +QFrame* nmWxReservoirPropertiesEditor::createRibbonSeparator( + QWidget* pParent) +{ + // 使用单像素平直竖线,避免Sunken双线在端点形成视觉折角。 + QFrame* pSeparator = new QFrame(pParent); + pSeparator->setFrameShape(QFrame::VLine); + pSeparator->setFrameShadow(QFrame::Plain); + pSeparator->setLineWidth(1); + QPalette oSeparatorPalette = pSeparator->palette(); + oSeparatorPalette.setColor( + QPalette::WindowText, + pParent->palette().color(QPalette::Mid)); + pSeparator->setPalette(oSeparatorPalette); + pSeparator->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); + return pSeparator; +} + +QToolButton* nmWxReservoirPropertiesEditor::createCategoryButton( + nmReservoirPropertiesCategory eCategory, + const QString& sText, + const QString& sIconName, + QWidget* pParent) +{ + QToolButton* pButton = new QToolButton(pParent); + pButton->setText(sText); + pButton->setIcon(zxLoadIcon(sIconName)); + pButton->setIconSize(QSize(25, 25)); + pButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); + // 分类按钮仅执行页面切换命令,不保留持续选中状态。 + pButton->setCheckable(false); + pButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); + m_pCategoryButtonGroup->addButton( + pButton, static_cast(eCategory)); + return pButton; +} + +QToolButton* nmWxReservoirPropertiesEditor::createHelpButton( + QWidget* pParent) +{ + QToolButton* pButton = new QToolButton(pParent); + pButton->setText(tr("Help")); + pButton->setIcon(zxLoadIcon("Help")); + pButton->setIconSize(QSize(25, 25)); + pButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); + pButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); + connect(pButton, SIGNAL(clicked()), this, SLOT(slotHelp())); + return pButton; +} + +bool nmWxReservoirPropertiesEditor::initialize(QString& sError) +{ + // 第一步:建立工作副本,失败时不创建不完整的字段控件。 + if (m_pSession == nullptr || !m_pSession->initialize(sError)) + { + m_bInitialized = false; + return false; + } + + // 第二步:创建页面并逐页验证XML参数定义和单位绑定。 + createPages(); + for (int nIndex = 0; nIndex < NM_RESERVOIR_PAGE_COUNT; ++nIndex) + { + if (!m_pPages[nIndex]->reloadObjects(sError)) + { + m_bInitialized = false; + return false; + } + } + + // 第三步:没有对应对象的分类直接禁用,避免用户进入无操作价值的空页面。 + updateCategoryButtonStates(); + m_pStackedWidget->setCurrentIndex(NM_RESERVOIR_PAGE_RESERVOIR); + m_bInitialized = true; + validateAllPages(); + sError.clear(); + return true; +} + +bool nmWxReservoirPropertiesEditor::bindUnitField( + QLineEdit* pLineEdit, + QComboBox* pUnitComboBox, + const QString& sBaseParameterId) +{ + // 第一步:仍由框架绑定器读取参数定义、范围和常规单位组。 + if (!bindUnitPairWxs(pLineEdit, pUnitComboBox, + sBaseParameterId, false)) + { + return false; + } + + // 第二步:单位帮助器对单位名执行了不区分大小写的匹配,D可能先命中 + // 时间组中的d(天)。渗透率以mD这个无歧义单位定位正确单位组, + // 但基准单位仍明确保持为求解器使用的D。 + if (sBaseParameterId == QString::fromLatin1("K")) + { + iUnitGroup* pPermeabilityGroup = + iUnitHelper::getUnitGroupByUnit( + QString::fromLatin1("mD")); + zxBindWxPair* pBindPair = m_pUnitBinder != nullptr + ? m_pUnitBinder->getWxPairOf(pLineEdit) : nullptr; + if (pPermeabilityGroup == nullptr || pBindPair == nullptr || + pPermeabilityGroup->m_sType.compare( + QString::fromLatin1("permeability"), + Qt::CaseInsensitive) != 0 || + pPermeabilityGroup->indexOf( + QString::fromLatin1("D")) < 0) + { + return false; + } + + // 第三步:替换错误单位组并重建单位选项。后续数值设置、切换、 + // 范围校验和基准值读取继续全部通过框架绑定器完成。 + pBindPair->isUpdating = true; + pBindPair->pUnitGroup = pPermeabilityGroup; + pBindPair->sBaseUnit = QString::fromLatin1("D"); + pUnitComboBox->clear(); + pUnitComboBox->addItems(pPermeabilityGroup->getAllUnitNames()); + int nBaseUnitIndex = pUnitComboBox->findText( + QString::fromLatin1("D"), + Qt::MatchExactly | Qt::MatchCaseSensitive); + pUnitComboBox->setCurrentIndex(nBaseUnitIndex); + pBindPair->isUpdating = false; + } + return true; +} + +void nmWxReservoirPropertiesEditor::setUnitBaseValue( + QLineEdit* pLineEdit, + double dBaseValue) +{ + if (m_pUnitBinder != nullptr) + { + m_pUnitBinder->setBaseValue(pLineEdit, dBaseValue); + } +} + +double nmWxReservoirPropertiesEditor::unitBaseValue( + QLineEdit* pLineEdit) const +{ + return m_pUnitBinder != nullptr + ? m_pUnitBinder->getBaseValue(pLineEdit) : 0.0; +} + +bool nmWxReservoirPropertiesEditor::isUnitInputValid( + QLineEdit* pLineEdit) +{ + return m_pUnitBinder != nullptr && + m_pUnitBinder->isInputOK(pLineEdit, true, nullptr); +} + +QString nmWxReservoirPropertiesEditor::currentUnit( + QLineEdit* pLineEdit) const +{ + return m_pUnitBinder != nullptr + ? m_pUnitBinder->getCurrentUnit(pLineEdit) : QString(); +} + +iUnitGroup* nmWxReservoirPropertiesEditor::unitGroup( + QLineEdit* pLineEdit) const +{ + return m_pUnitBinder != nullptr + ? m_pUnitBinder->getUnitGroup(pLineEdit) : nullptr; +} + +void nmWxReservoirPropertiesEditor::createPages() +{ + if (m_pStackedWidget->count() > 0) + { + return; + } + + for (int nIndex = 0; nIndex < NM_RESERVOIR_PAGE_COUNT; ++nIndex) + { + nmReservoirPropertiesCategory eCategory = + static_cast(nIndex); + m_pPages[nIndex] = new nmReservoirParameterPage( + eCategory, + m_pSession, + this, + m_pStackedWidget); + connect(m_pPages[nIndex], SIGNAL(sigValidityChanged(bool)), + this, SLOT(slotPageValidityChanged(bool))); + m_pStackedWidget->addWidget(m_pPages[nIndex]); + } +} + +void nmWxReservoirPropertiesEditor::slotCategoryButtonClicked( + int nCategory) +{ + if (!m_bInitialized || nCategory < 0 || + nCategory >= NM_RESERVOIR_PAGE_COUNT) + { + return; + } + + // 分类按钮状态由对象列表决定;此处再次防御程序主动触发的非法切换。 + QAbstractButton* pCategoryButton = m_pCategoryButtonGroup != nullptr + ? m_pCategoryButtonGroup->button(nCategory) : nullptr; + if (pCategoryButton == nullptr || !pCategoryButton->isEnabled()) + { + return; + } + + // 离开当前分类前先校验并保存,非法时保持当前页。 + if (m_pPages[m_nCurrentCategory] != nullptr && + !m_pPages[m_nCurrentCategory]->commitPendingEdits()) + { + m_pStatusLabel->setText( + tr("Please correct the invalid parameter values.")); + return; + } + + m_nCurrentCategory = nCategory; + m_pStackedWidget->setCurrentIndex(nCategory); + m_pStatusLabel->clear(); +} + +void nmWxReservoirPropertiesEditor::updateCategoryButtonStates() +{ + if (m_pCategoryButtonGroup == nullptr) + { + return; + } + + // 逐类读取页面已经加载的对象列表,页面不存在或对象为空时禁用命令。 + for (int nIndex = 0; nIndex < NM_RESERVOIR_PAGE_COUNT; ++nIndex) + { + QAbstractButton* pCategoryButton = + m_pCategoryButtonGroup->button(nIndex); + bool bEnabled = m_pPages[nIndex] != nullptr && + m_pPages[nIndex]->hasEditableObjects(); + if (pCategoryButton != nullptr) + { + pCategoryButton->setEnabled(bEnabled); + } + } +} + +void nmWxReservoirPropertiesEditor::slotPageValidityChanged(bool bValid) +{ + Q_UNUSED(bValid); + validateAllPages(); +} + +void nmWxReservoirPropertiesEditor::slotHelp() +{ + // 顶部和底部帮助命令共用Qt上下文帮助;字段说明和范围来自XML。 + QWhatsThis::enterWhatsThisMode(); +} + +bool nmWxReservoirPropertiesEditor::validateAllPages() +{ + bool bAllValid = m_bInitialized; + if (m_bInitialized) + { + for (int nIndex = 0; nIndex < NM_RESERVOIR_PAGE_COUNT; ++nIndex) + { + if (m_pPages[nIndex] != nullptr && + !m_pPages[nIndex]->isInputValid()) + { + bAllValid = false; + break; + } + } + } + + QPushButton* pOkButton = m_pButtonBox != nullptr + ? m_pButtonBox->button(QDialogButtonBox::Ok) : nullptr; + if (pOkButton != nullptr) + { + pOkButton->setEnabled(bAllValid); + } + return bAllValid; +} + +void nmWxReservoirPropertiesEditor::accept() +{ + if (!m_bInitialized) + { + return; + } + + // 第一步:依次提交各页面当前对象尚未离开焦点的输入。 + for (int nIndex = 0; nIndex < NM_RESERVOIR_PAGE_COUNT; ++nIndex) + { + if (m_pPages[nIndex] != nullptr && + !m_pPages[nIndex]->commitPendingEdits()) + { + m_nCurrentCategory = nIndex; + m_pStackedWidget->setCurrentIndex(nIndex); + m_pStatusLabel->setText( + tr("Please correct the invalid parameter values.")); + validateAllPages(); + return; + } + } + + // 第二步:把完整工作副本一次性交给数据源。 + QString sError; + if (!m_pSession->commit(sError)) + { + m_pStatusLabel->setText(sError); + QMessageBox::warning(this, tr("Reservoir properties"), sError); + return; + } + + // 第三步:仅在提交成功后关闭对话框。 + iDlgBase::accept(); +} + +void nmWxReservoirPropertiesEditor::reject() +{ + // 工作副本从未提前写入真实数据,取消时直接关闭即可。 + iDlgBase::reject(); +} diff --git a/Src4/nmNum/nmSubWxs/nmSubWxs.pro b/Src4/nmNum/nmSubWxs/nmSubWxs.pro index 370bf5b..74d2e04 100644 --- a/Src4/nmNum/nmSubWxs/nmSubWxs.pro +++ b/Src4/nmNum/nmSubWxs/nmSubWxs.pro @@ -1,4 +1,6 @@ -QT += core sql gui widgets +QT += core sql gui + +greaterThan(QT_MAJOR_VERSION, 4) : QT += widgets greaterThan(QT_MAJOR_VERSION, 4) : QT += printsupport #greaterThan(QT_MAJOR_VERSION, 4) : QT += axcontainer printsupport From 8eebf98ba2abfb344f578847a70d00bdd55f2d89 Mon Sep 17 00:00:00 2001 From: lh <2334563547@qq.com> Date: Fri, 14 Aug 2026 11:51:42 +0800 Subject: [PATCH 02/10] =?UTF-8?q?refactor(nmNum):=20=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E6=B8=97=E9=80=8F=E7=8E=87=E5=9F=BA=E5=87=86=E5=8D=95=E4=BD=8D?= =?UTF-8?q?=E4=B8=BA=20mD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 统一储层、诊断、自动拟合及属性插值的渗透率单位 - 调整渗透率默认值、拟合范围和参数配置 - 在 PEBI 求解器入口将 mD 转换为 D - 移除储层参数面板对 D/d 单位歧义的特殊处理 --- Bin/Config/Common/MenuDefines_Ribbon_cn.dat | 2 +- Bin/Config/Common/MenuDefines_Ribbon_en.dat | 2 +- Bin/Config/Common/ModelParaDefinesNM_cn.dat | 2 +- Bin/Config/Common/ModelParaDefinesNM_en.dat | 2 +- Bin/Config/Common/UnitDefault_cn.dat | 2 +- Bin/XmlFiles/ModelParaDefinesNM_cn.xml | 4 +- Bin/XmlFiles/ModelParaDefinesNM_en.xml | 4 +- .../nmNum/nmCalculation/nmCalculationUtils.h | 7 +++ Include/nmNum/nmData/nmDataAttribute.h | 4 +- Include/nmNum/nmData/nmDataBinaryTools.h | 4 +- .../nmCalculationDllPebiSolverTask.cpp | 15 +++++-- .../nmCalculation/nmCalculationPebiGrid.cpp | 6 ++- .../nmCalculation/nmCalculationUtils.cpp | 6 +++ Src/nmNum/nmData/nmDataAttribute.cpp | 15 ++++--- Src/nmNum/nmData/nmDataAutomaticFitting.cpp | 10 ++--- Src/nmNum/nmData/nmDataDiagnostic.cpp | 10 ++--- Src/nmNum/nmData/nmDataReservoir.cpp | 16 +++---- Src/nmNum/nmSubWxs/nmWxAutomaticFitting.cpp | 14 +++--- .../nmSubWxs/nmWxPropertyInterpolationDlg.cpp | 10 ++--- .../nmWxReservoirPropertiesEditor.cpp | 45 ++----------------- 20 files changed, 81 insertions(+), 99 deletions(-) diff --git a/Bin/Config/Common/MenuDefines_Ribbon_cn.dat b/Bin/Config/Common/MenuDefines_Ribbon_cn.dat index d99c42a..ba855b2 100644 --- a/Bin/Config/Common/MenuDefines_Ribbon_cn.dat +++ b/Bin/Config/Common/MenuDefines_Ribbon_cn.dat @@ -1 +1 @@ -77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSDnvJbovpHkvbwzy/nlKggWE1MU3B5IHYyMDA2IFUgKGh0dHA6Ly93d3cuYWx0b3ZhLmNvbSkg55SxIGFueSAoYW55KSAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tICAgIOacrOaWh+aho+eahOebrueahOaYr+W7uueri1dUQUnova/ku7bns7vnu5/nmoToj5zljZXlsYLmrKHlhbPns7so6ZKI5a+5UmliYm9u5qih5byPKSAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEF1dGhvcihzKTogd2FuZ3pnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI0MDcxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQoNCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tDQogICAgVGFiIOe6p+WIqw0KICAgICAgICBJRDogICAgICAgICAg5ZSv5LiA5qCH6K+GDQogICAgICAgIE5hbWXvvJogICAgICAg5ZCN56ew77yM6YCa5bi46Iux5paHDQogICAgICAgIEFsaWFz77yaICAgICAg5Yir5ZCN77yM6YCa5bi45Lit5paHDQogICAgICAgIEZpbGVNb2RlOiAgICDmmK/lkKbmlofku7ZNZW515qih5byP77yMMSBvciAwDQogICAgICAgIFZpc2libGXvvJogICAg5piv5ZCm5Y+v6KeB77yMMSBvciAwDQogICAgICAgIFRpcHPvvJogICAgICAg6L6F5Yqp6K+05piODQoNCiAgICAgICAgR3JvdXAg57qn5YirDQogICAgICAgICAgICBOYW1l77yaICAgICAgIOWQjeensO+8jOmAmuW4uOiLseaWhw0KICAgICAgICAgICAgQWxpYXPvvJogICAgICDliKvlkI3vvIzpgJrluLjkuK3mlocNCg0KICAgICAgICAgICAgQ21kIOe6p+WIqw0KICAgICAgICAgICAgICAgIElEOiAgICAgICAgICDllK/kuIDmoIfor4YNCiAgICAgICAgICAgICAgICBUeXBlOiAgICAgICAg5a+55bqU5o6n5Lu257G75Z6LOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw4oCU4oCU6buY6K6kQnV0dG9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDHigJTigJTluKbkuIvmi4noj5zljZVCdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMuKAlOKAlENvbWJvQm94DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDPigJTigJRDaGVja0JveA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA04oCU4oCUUmFkaW9CdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNeKAlOKAlFRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNuKAlOKAlExhYmVsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDfigJTigJRMaXN0V2lkZ2V0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDjigJTigJRMaW5lRWRpdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA54oCU4oCU5YqI5YiG5oyJ6ZKuDQogICAgICAgICAgICAgICAgTmFtZe+8miAgICAgICDlkI3np7DvvIzpgJrluLjoi7HmlocNCiAgICAgICAgICAgICAgICBBbGlhc++8miAgICAgIOWIq+WQje+8jOmAmuW4uOS4reaWhw0KICAgICAgICAgICAgICAgIEljb27vvJogICAgICAg5Zu+5qCHDQogICAgICAgICAgICAgICAgU2hvcnRLZXnvvJogICDlv6vmjbfplK4NCiAgICAgICAgICAgICAgICBCb3VuZHM6ICAgICAg5L2N572u5L+h5oGv77yM5YWo5piv5pW05pWw77yM5ZyoR3JpZExheW91dOS4rQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwwLDEsMikgKDAsMCkg5YiG5Yir5Li6eHl3aA0KICAgICAgICAgICAgICAgIEV4dEluZm86ICAgICDmianlsZXkv6Hmga/vvIzlpoLmk43kvZzlr7nosaHnmoTooajlkI0s5LiL5ouJ6YCJ6aG5562JDQogICAgICAgICAgICAgICAgRXh0TmFtZXM6ICAgIOaJqeWxleS/oeaBr+WvueW6lOeahE5hbWXvvIzlpoLkuIvmi4lidXR0b27lr7nlupTnmoROYW1lDQogICAgICAgICAgICAgICAgVGlwc++8miAgICAgICDovoXliqnor7TmmI4NCi0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPFJpYmJvbj4NCg0KICAgIDxUYWIgSUQ9IjEiIE5hbWU9IlByb2pNYW5hZ2VyIiBBbGlhcz0i6aG555uu566h55CGKFApIiBGaWxlTW9kZT0iMSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJQcm9qZWN0IiBBbGlhcz0i5paH5Lu2Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAiIE5hbWU9IkFwcEhvbWUiIEFsaWFzPSIiIEljb249IkFwcEhvbWUxMjgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0i5YiG6ZqU56ymIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAxIiBOYW1lPSJQcm9qTmV3IiBBbGlhcz0i5paw5bu66aG555uuIiBTaG9ydEtleT0iQ3RybCtOIiBJY29uPSJOZXdQcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMiIgTmFtZT0iUHJvak9wZW4iIEFsaWFzPSLmiZPlvIDpobnnm64iIFNob3J0S2V5PSJDdHJsK08iIEljb249Ik9wZW5Qcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMyIgTmFtZT0iUHJvakNsb3NlIiBBbGlhcz0i5YWz6Zet6aG555uuIiBJY29uPSJDbG9zZVByb2oiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0i5YiG6ZqU56ymIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA1IiBOYW1lPSJQcm9qU2F2ZSIgQWxpYXM9IuS/neWtmOmhueebriIgU2hvcnRLZXk9IkN0cmwrUyIgSWNvbj0iU2F2ZVByb2oiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA2IiBOYW1lPSJQcm9qU2F2ZUFzIiBBbGlhcz0i6aG555uu5Y+m5a2YIiBJY29uPSJTYXZlYXMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA3IiBOYW1lPSJQcm9qQ29uZmlnIiBBbGlhcz0i6aG555uu5L+h5oGvIiBJY29uPSJQcm9qSW5mbyIgLz4NCg0KICAgICAgICAgICAgPENtZCBJRD0iLTEiIE5hbWU9IlNlcGFyYXRvciIgQWxpYXM9IuWIhumalOespiIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDIiIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwMyIgTmFtZT0iQWJvdXQiIEFsaWFzPSLlhbPkuo4oQSkiIEljb249IldUQUlBYm91dCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDA4IiBOYW1lPSJVcGRhdGVMaXN0cyIgQWxpYXM9IuabtOaWsOWIl+ihqChJKSIgSWNvbj0iVXBkYXRlTGlzdHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0i5YiG6ZqU56ymIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDEwIiBOYW1lPSJBcHBRdWl0IiBBbGlhcz0i6YCA5Ye6KFgpIiBJY29uPSJDbG9zZSIgLz4NCiAgICAgICAgPC9Hcm91cD4NCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjAiIE5hbWU9IldlbENvbWUiIEFsaWFzPSLlvIDlp4soTykiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSLmlbDmja7lh4blpIciPg0KICAgICAgICAgICAgPENtZCBJRD0iMTA5OSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJXZWxsTmV3IiBBbGlhcz0i5paw5bu65LqVKFcpIiBJY29uPSJXZWxsTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhUmF0ZSIgQWxpYXM9Iua1gemHj+aVsOaNrihRKSIgRXh0SW5mbz0iUF9EQVRBX0dBVUdFX0YiIEljb249IlJhdGVEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNiIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJEYXRhUHJlIiBBbGlhcz0i5Y6L5Yqb5pWw5o2uKFApIiBFeHRJbmZvPSJQX0RBVEFfR0FVR0VfUCIgSWNvbj0iUHJlc3N1cmVEYXRhIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IuWIhuaekOeuoeeQhiI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA2IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxOZXciIEFsaWFzPSLmlrDlu7rliIbmnpAiIEljb249IkpvYk5ldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDciIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEVkaXQiIEFsaWFzPSLliIbmnpDnrqHnkIYiIEljb249IkpvYkVkaXQiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxCYXNpYyIgQWxpYXM9IuWfuuehgOS/oeaBryIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVOaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQW5hbHl0aWNhbCIgQWxpYXM9Iua1geWKqOauteWIhuaekCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDAzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxQRiIgQWxpYXM9Iua1geWKqOautemAieaLqSIgRXh0SW5mbz0iUEYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJBbmFsRmxvd1NlZyIgQWxpYXM9Iua1geWKqOauteWIhuaekCIgSWNvbj0iRmxvd1BlcmlvZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQW5hbHl0aWNhbCIgQWxpYXM9Iuino+mHiuaLn+WQiCI+DQoNCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDUiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRGVjb252b2x2IiBBbGlhcz0i5Y+N6KS256evIiBJY29uPSJEZWNvbnZvbHYiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkZpdE1vZGVsIiBBbGlhcz0i6Kej5p6Q6KejIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDQiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0ibm1GaXRNb2RlbCIgQWxpYXM9IuaVsOWAvOinoyIgSWNvbj0iRml0TW9kZWwiIC8+DQoNCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDIiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQXV0b0ZpdCIgQWxpYXM9IuiHquWKqOaLn+WQiCIgSWNvbj0iQXV0b0ZpdCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJOdW1lcmljYWwiIEFsaWFzPSLlnLDotKjlu7rmqKEoRGVidWcpIiBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUwMDIiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iUHJvcGVydHlMb2FkIiBBbGlhcz0i5bGe5oCn5a+85YWlIiBJY29uPSJQcmVwYXJlR3JpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iUnVuR3JpZCIgQWxpYXM9Iue9keagvOWIkuWIhiIgSWNvbj0iUGxhdGVGaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MjAxIiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IkFuYWxNYXAiIEFsaWFzPSLorqHnrpciIEljb249IlJ1bkV4IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTIwMiIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJBbmFsUEYiIEFsaWFzPSLovoXliqnmi5/lkIgiIEV4dEluZm89IlBGIiBJY29uPSJSdW5PdGhlciIgVmlzaWJsZT0iMCIvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldlbGxNYXAiIEFsaWFzPSLkupXkvY3lm74iPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwOCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsTWFwIiBBbGlhcz0i5LqV5L2N5Zu+IiBJY29uPSJNYXAyRCIgVmlzaWJsZT0iMSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMTgiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEludGVyZmVyZSIgQWxpYXM9IuW5suaJsOiuvuWumiIgSWNvbj0iTWFwMkQiIFZpc2libGU9IjAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9Iueql+WPo+aYvuekuihEZWJ1ZykiIFZpc2libGU9IjAiID4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwwIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0i5qih5Z6L56qX5Y+jIiBJY29uPSJWaXNpYmxlTW9kZWxzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDAiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0i5Y+C5pWw56qX5Y+jIiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0i5Z+656GA5L+h5oGvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZU5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMyIgQm91bmRzPSIwLDIiIE5hbWU9IlZpc2libGVBbmFsRGlmZiIgQWxpYXM9IkRJRkbmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTA0IiBCb3VuZHM9IjEsMiIgTmFtZT0iVmlzaWJsZUFuYWxQc2V1IiBBbGlhcz0i5ouf5Y6L5Yqb5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJIZWxwIiBBbGlhcz0i5biu5YqpIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICA8L1RhYj4NCg0KDQogICAgPFRhYiBJRD0iMiIgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSLmlbDmja7nrqHnkIYoRCkiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSLkupUiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTA5OSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJXZWxsTmV3IiBBbGlhcz0i5paw5bu65LqVKFcpIiBJY29uPSJXZWxsTmV3IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IuWfuuehgOaVsOaNriI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkRhdGFXZWxsQmFzaWMiIEFsaWFzPSLkupXln7rnoYDmlbDmja4oQikiIEV4dEluZm89IkJfV0VMTCIgSWNvbj0iQmFzaWNEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhTGF5ZXIiIEFsaWFzPSLlnLDotKjliIblsYLmlbDmja4oTCkiIEV4dEluZm89IkJfTEFZRVIiIEljb249IkxheWVyRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDMiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iRGF0YVJlcyIgQWxpYXM9IuWCqOWxguaVsOaNrihSKSIgRXh0SW5mbz0iUF9EQVRBX1JFUyIgSWNvbj0iUmVzRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDQiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iRGF0YUZsdSIgQWxpYXM9Iua1geS9k+aAp+i0qOaVsOaNrihGKSIgRXh0SW5mbz0iUF9EQVRBX0ZMVUlEIiBJY29uPSJGbHVpZFByb3BlcnR5IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IuWOi+WKm+a1gemHjyI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA1IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkRhdGFSYXRlIiBBbGlhcz0i5rWB6YeP5pWw5o2uKFEpIiBFeHRJbmZvPSJQX0RBVEFfR0FVR0VfRiIgSWNvbj0iUmF0ZURhdGEiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA2IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkRhdGFQcmUiIEFsaWFzPSLljovlipvmlbDmja4oUCkiIEV4dEluZm89IlBfREFUQV9HQVVHRV9QIiBJY29uPSJQcmVzc3VyZURhdGEiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkdYNiIgQWxpYXM9IuW5s+WPsOS6kumAmiI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA3IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ikd4NkNvbm5lY3RTZXJ2ZXIiIEFsaWFzPSJHWDbkupLpgJooQykiIEljb249Ikd4NkNvbm5lY3RTZXJ2ZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA4IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ikd4NkdldFRhc2tzIiBBbGlhcz0i6I635Y+W5Lu75YqhKEQpIiBJY29uPSJHeDZHZXRUYXNrcyIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDkiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iR3g2VXBkYXRlVGFza3MiIEFsaWFzPSLmm7TmlrDnirbmgIEoVSkiIEljb249Ikd4NlVwZGF0ZVRhc2tzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSIyMDEiIE5hbWU9IkRhdGFFZGl0IiBBbGlhcz0i5pWw5o2u57yW6L6RKEUpIiA+DQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhRWRpdCIgQWxpYXM9IuaVsOaNrue8lui+kSI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxGbHUiIEFsaWFzPSLmtYHph4/nvJbovpEiIEV4dEluZm89IkYiIE1kaVR5cGU9IkRhdGFFZGl0IiBJY29uPSJSYXRlRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbFByZXNzIiBBbGlhcz0i5Y6L5Yqb57yW6L6RIiBFeHRJbmZvPSJQIiBNZGlUeXBlPSJEYXRhRWRpdCIgSWNvbj0iUHJlc3N1cmVEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzMwMyIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJBbmFsUHJlQ29uIiBBbGlhcz0i5Y6L5Yqb5oqY566XIiBFeHRJbmZvPSJQIiBNZGlUeXBlPSJEYXRhRWRpdCIgSWNvbj0iQW5hbFByZUNvbiIgLz4NCiAgICAgICAgPC9Hcm91cD4NCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjMiIE5hbWU9IkFuYWx5dGljYWxUZXN0IiBBbGlhcz0i5aSE55CG6Kej6YeKKEEpIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0i5YiG5p6Q566h55CGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDYiIEJvdW5kcz0iMCwwIiBOYW1lPSJBbmFsTmV3IiBBbGlhcz0i5paw5bu65YiG5p6QIiBJY29uPSJKb2JOZXciIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA3IiBCb3VuZHM9IjEsMCIgTmFtZT0iQW5hbEVkaXQiIEFsaWFzPSLliIbmnpDnrqHnkIYiIEljb249IkpvYkVkaXQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlNlZ0FuYWwiIEFsaWFzPSLmtYHliqjmrrXliIbmnpAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsUEYiIEFsaWFzPSLmtYHliqjmrrXpgInmi6kiIEV4dEluZm89IlBGIiBJY29uPSJQRiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDQiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEZsb3dTZWciIEFsaWFzPSLmtYHliqjmrrXliIbmnpAiIEljb249IkZsb3dQZXJpb2QiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA1IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IkFuYWxPdGhlcnMiIEFsaWFzPSLnibnlvoHnur/liIbmnpAiIFR5cGU9IjEiICBWaXNpYmxlPSIwIiBFeHROYW1lcz0iQ2hhcnRUO0NoYXJ0U3FydFQ7Q2hhcnQyNVQ7Q2hhcnQ1VCIgRXh0SW5mbz0iQ2hhcnQgVDtDaGFydCBTcXJ0KFQpO0NoYXJ0IDAuMjVUO0NoYXJ0IC0wLjVUIiBJY29uPSJBc3Npc0FuYWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDEwIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkFuYWxXbmRNIiBBbGlhcz0i5rWB5Yqo5q6156qX5Y+jIiBUeXBlPSIxIiBJY29uPSJBbmFsV25kTSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDkiIEJvdW5kcz0iMCw0LDIsMSIgTmFtZT0iQW5hbERpc3RyaSIgQWxpYXM9IuWIhuW4g+WbviIgVHlwZT0iMSIgRXh0TmFtZXM9IkNoYXJ0RGVuO0NoYXJ0VmlzIiBFeHRJbmZvPSLmtZPluqbliIbluIPlm7476buP5bqm5YiG5biD5Zu+IiBJY29uPSJBbmFsRGlzdHJpIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhRml0IiBBbGlhcz0i6Kej6YeK5ouf5ZCIIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDUiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRGVjb252b2x2IiBBbGlhcz0i5Y+N6KS256evKERlYnVnKSIgSWNvbj0iRGVjb252b2x2IiAvPg0KDQogICAgICAgICAgICA8Q21kIElEPSIzMTAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkZpdE1vZGVsIiBBbGlhcz0i6Kej5p6Q6KejIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDQiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0ibm1GaXRNb2RlbCIgQWxpYXM9IuaVsOWAvOinoyIgSWNvbj0iRml0TW9kZWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAyIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkF1dG9GaXQiIEFsaWFzPSLoh6rliqjmi5/lkIgiIEljb249IkF1dG9GaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAzIiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9IlBsYXRlRml0IiBBbGlhcz0i5pWP5oSf5oCn5YiG5p6QIiBJY29uPSJQbGF0ZUZpdCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBSVRlc3QiIEFsaWFzPSLmmbrog73or5XkupUiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzkwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJNb2RlbENsYXNzaWZ5IiBBbGlhcz0i5qih5Z6L6K+G5YirIiBJY29uPSJNb2RlbENsYXNzaWZ5IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJSZWxhdGl2ZVRvb2wiIEFsaWFzPSLnm7jlhbPlt6XlhbciPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJUaW1lIiBBbGlhcz0i5pe26Ze0IiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwMiIgQm91bmRzPSIwLDEiIE5hbWU9IlNob3dNb2RlbENoYXJ0cyIgQWxpYXM9IuaooeWei+ekuuaEjyIgSWNvbj0iU2hvd01vZGVsQ2hhcnRzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwNCIgQm91bmRzPSIxLDEiIE5hbWU9IlNhdmVBc01vZGVsU2tldGNoIiBBbGlhcz0i5a2Y5Li656S65oSPIiBJY29uPSJTYXZlQXNNb2RlbFNrZXRjaCIgLz4NCg0KICAgICAgIDwvR3JvdXA+DQoNCjwhLS0gICAgICAgICAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDMiIEJvdW5kcz0iMCwxIiBOYW1lPSJTaG93TW9kZWxTa2V0Y2giIEFsaWFzPSLnkIborroiIEljb249IlNob3dNb2RlbFNrZXRjaCIgLz48R3JvdXAgTmFtZT0iVG9vbFMiIEFsaWFzPSLmianlsZXlip/og70iPg0KICAgICAgICAgICAgPENtZCBJRD0iOTgwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJGbG93VG9TIiBBbGlhcz0i5rWB6YeP5Y+Y6KGo55quIiBJY29uPSJGbG93VG9TIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTIwMSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJNaXhWaXNjb3NpdHkiIEFsaWFzPSLmt7flkIjpu4/luqYiIEljb249Ik1peFZpc2Nvc2l0eSIgVmlzaWJsZT0iMCIgLz4NCiAgICAgICA8L0dyb3VwPi0tPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJKb2JzIiBBbGlhcz0i5oiQ5p6c566h55CGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDgiIEJvdW5kcz0iMCwwIiBOYW1lPSJSc3RMb2FkIiBBbGlhcz0i5Yqg6L295oiQ5p6cIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDkiIEJvdW5kcz0iMSwwIiBOYW1lPSJSc3RTYXZlIiBUeXBlPSIxIiBFeHROYW1lcz0iUnN0U2F2ZUN1cjtSc3RTYXZlQWxsIiBFeHRJbmZvPSLkv53lrZjlvZPliY3miJDmnpw75L+d5a2Y5omA5pyJ5oiQ5p6cIiBBbGlhcz0i5L+d5a2Y5oiQ5p6cIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMTEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iVG9OdW1lcmljYWwiIEFsaWFzPSJUby3mlbDlgLwiIEljb249IkxvYWRKb2JzIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3ciIEFsaWFzPSLnqpflj6PmmL7npLoiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMiIgQm91bmRzPSIwLDAiIE5hbWU9IlZpc2libGVNb2RlbHMiIEFsaWFzPSLmqKHlnovnqpflj6MiIEljb249IlZpc2libGVNb2RlbHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAzIiBCb3VuZHM9IjEsMCIgTmFtZT0iVmlzaWJsZVBhcmFtZXRlcnMiIEFsaWFzPSLlj4LmlbDnqpflj6MiIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSLln7rnoYDkv6Hmga8iIEljb249IklucHV0QmFzaWMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAyIiBCb3VuZHM9IjEsMSIgTmFtZT0iVmlzaWJsZUFuYWxQVlQiIEFsaWFzPSJQVlTmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRuaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDQiIEJvdW5kcz0iMSwyIiBOYW1lPSJWaXNpYmxlQW5hbFBzZXUiIEFsaWFzPSLmi5/ljovlipvmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgIDwvR3JvdXA+DQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI1IiBOYW1lPSJOdW1lcmljYWxUZXN0IiBBbGlhcz0i5pWw5YC85bu65qihKE4pIiA+DQogICAgICAgIDxHcm91cCBOYW1lPSJObU1hbmFnZXIiIEFsaWFzPSLliIbmnpDnrqHnkIYiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTAwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsTmV3IiBBbGlhcz0i5Li05pe25rWL6K+VMSIgSWNvbj0iUHJlcGFyZUdyaWQiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MDAyIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IlByb3BlcnR5TG9hZCIgQWxpYXM9IuS4tOaXtua1i+ivlTIiIEljb249IlByZXBhcmVHcmlkIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJObUFuYWxDaGFuZ2UiIEFsaWFzPSLliIbmnpDliIfmjaIiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEzMCIgQm91bmRzPSIwLDAiIE5hbWU9Ik5tQW5hbENoYW5nZSIgQWxpYXM9IuWIhuaekOWIh+aNoiIgSWNvbj0iSm9iRWRpdCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJOdEluaXQiIEFsaWFzPSLmqKHlnovlh6DkvZXlr7nosaEiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTExOCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObU1hcCIgQWxpYXM9Ik1hcCIgSWNvbj0iTm1JbWFnZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTkiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1VbmxvY2tlZCIgQWxpYXM9IumUgeWumiIgSWNvbj0iTm1VbmxvY2tlZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDIiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1JbWFnZSIgQWxpYXM9IuayueiXj+WcsOWbviIgSWNvbj0iTm1JbWFnZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjAiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iTm1NZWFzdXJlIiBBbGlhcz0i5q+U5L6L5bC6IiBJY29uPSJObU1lYXN1cmUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTAzIiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9Ik5tUG9seWdvbiIgQWxpYXM9IuWkmui+ueW9oui+ueeVjCIgSWNvbj0iTm1Qb2x5Z29uIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNCIgQm91bmRzPSIwLDUiIE5hbWU9Ik5tUG9seWdvbiIgQWxpYXM9IuefqeW9oui+ueeVjCIgSWNvbj0iTm1SZWN0YW5nbGUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTA1IiBCb3VuZHM9IjEsNSIgTmFtZT0iTm1Qb2x5Z29uIiBBbGlhcz0i5ZyG5b2i6L6555WMIiBJY29uPSJObVJvdW5kIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNiIgQm91bmRzPSIwLDYsMiwxIiBOYW1lPSJObUZhdWx0IiBBbGlhcz0i5pat5bGCIiBJY29uPSJObUZhdWx0IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNyIgQm91bmRzPSIwLDciIE5hbWU9Ik5tV2VsbCIgQWxpYXM9IumAieaLqeS6lSIgSWNvbj0iTm1XZWxsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwOCIgQm91bmRzPSIxLDciIE5hbWU9Ik5tV2VsbCIgQWxpYXM9IuaWsOW7uuS6lSIgSWNvbj0iTm1XZWxsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwOSIgQm91bmRzPSIwLDgsMiwxIiBOYW1lPSJObUZhdWx0IiBBbGlhcz0i6KOC57ydIiBJY29uPSJObUZhdWx0IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTExMCIgQm91bmRzPSIwLDkiIE5hbWU9Ik5tTGltaXQiIEFsaWFzPSLljLrln58iIEljb249Ik5tTGltaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTExIiBCb3VuZHM9IjEsOSIgTmFtZT0iTm1SZWdpb24iIEFsaWFzPSLmoIforrDljLrln58iIEljb249Ik5tUmVnaW9uIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEyMSIgQm91bmRzPSIwLDEwLDIsMSIgTmFtZT0iTm1EZWxldGUiIEFsaWFzPSLliKDpmaQiIEljb249Ik5tRGVsZXRlIiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICA8R3JvdXAgTmFtZT0iTnRSZXNlcnZvaXIiIEFsaWFzPSLlgqjlsYLnibnlvoEiPgogICAgICAgICAgICA8Q21kIElEPSI1MTEyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik5tR2VvbWV0cnkiIEFsaWFzPSLliIblsYIiIEljb249Ik5tR2VvbWV0cnkiIC8+CiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTMiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1Qcm9wZXJ0aWVzIiBBbGlhcz0i5YKo5bGC54m55oCnIiBJY29uPSJObVByb3BlcnRpZXMiIC8+CiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjIiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1ERk4iIEFsaWFzPSJERk4iIEljb249Ik5tREZOIiAvPgogICAgICAgICAgICA8Q21kIElEPSI1MTI2IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9Ik5tSW50ZXJwb2xhdGlvbiIgQWxpYXM9IuWxnuaAp+aPkuWAvCIgSWNvbj0iTm1JbnRlcnBvbGF0aW9uIiAvPgogICAgICAgPC9Hcm91cD4KDQogICAgICAgPEdyb3VwIE5hbWU9Ik50TW9kZWwiIEFsaWFzPSLmqKHlnovnlJ/miJAiPg0KICAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTQiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTm1HcmlkIiBBbGlhcz0i572R5qC85YiS5YiGIiBJY29uPSJObUdyaWQiIC8+DQogICAgICAgICAgICAgPENtZCBJRD0iNTExNSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJObUNhY3VsYXRpb24iIEFsaWFzPSLorqHnrpfmsYLop6MiIEljb249IlRpbWUiIC8+DQogICAgICAgICAgICAgPCEtLQ0KICAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTYiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1CYWNrIiBBbGlhcz0i5ZCO5aSE55CGIiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTciIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iTm1SZXN1bHQiIEFsaWFzPSLnu5PmnpwiIEljb249IkZsb3dQZXJpb2QiIC8+DQogICAgICAgICAgICAgLS0+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnRUb29scyIgQWxpYXM9IuW3peWFtyI+DQogICAgICAgICAgICA8Q21kIElEPSI1MTI3IiBCb3VuZHM9IjAsMCIgTmFtZT0iTm1HZW9SZWZlcmVuY2UiIEFsaWFzPSLmqKHlnovlj4LogIPngrnorr7nva4iIEljb249Ik5tR2VvUmVmZXJlbmNlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEyOCIgQm91bmRzPSIxLDAiIE5hbWU9Ik5tUG9pbnRlclBvc2l0aW9uIiBBbGlhcz0i5qih5Z6L5L2N572u5pi+56S6IiBJY29uPSJObVBvaW50ZXJQb3NpdGlvbiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjkiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1NZWFzdXJlIiBBbGlhcz0i5qih5Z6L5bC65a+45rWL6YePIiBJY29uPSJObU1lYXN1cmUiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnREaXNwbGF5IiBBbGlhcz0i5pi+56S6Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjMiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTm1TaG93IiBBbGlhcz0i5pi+56S6IiBJY29uPSJObVNob3ciIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTI0IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik5tUHJpbnRQcmV2aWV3IiBBbGlhcz0i5omT5Y2w6aKE6KeIIiBJY29uPSJObVByaW50UHJldmlldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjUiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1QcmludCIgQWxpYXM9IuaJk+WNsCIgSWNvbj0iTm1QcmludCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3ciIEFsaWFzPSLnqpflj6PmmL7npLoiICBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwwIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0i5qih5Z6L56qX5Y+jIiBJY29uPSJWaXNpYmxlTW9kZWxzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDAiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0i5Y+C5pWw56qX5Y+jIiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0i5Z+656GA5L+h5oGvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZU5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMyIgQm91bmRzPSIwLDIiIE5hbWU9IlZpc2libGVBbmFsRGlmZiIgQWxpYXM9IkRJRkbmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTA0IiBCb3VuZHM9IjEsMiIgTmFtZT0iVmlzaWJsZUFuYWxQc2V1IiBBbGlhcz0i5ouf5Y6L5Yqb5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJObURlYnVnIiBBbGlhcz0i5qGG5p625rWL6K+VKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSI1OTk5IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik5tRGVidWciIEFsaWFzPSLmoYbmnrbku6PnoIHosIPor5UiIEljb249IlByZXBhcmVHcmlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjQiIE5hbWU9Ik1pbmlGcmFjIiBBbGlhcz0i5bCP5Z6L5Y6L6KOCKEYpKERlYnVnKSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IuWIhuaekOeuoeeQhiI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA2IiBCb3VuZHM9IjAsMCIgTmFtZT0iQW5hbE5ldyIgQWxpYXM9IuaWsOW7uuWIhuaekCIgSWNvbj0iSm9iTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNyIgQm91bmRzPSIxLDAiIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0i5YiG5p6Q566h55CGIiBJY29uPSJKb2JFZGl0IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJQQSIgQWxpYXM9IuWOi+mZjeWIhuaekCI+DQogICAgICAgICAgICA8Q21kIElEPSI0MDAyIiBCb3VuZHM9IjAsMCwzLDEiIE5hbWU9Ik1pbmlGckFuYWxQQSIgQWxpYXM9IuWOi+mZjeWHhuWkhyIgRXh0SW5mbz0iUEYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwMyIgQm91bmRzPSIwLDEsMywxIiBOYW1lPSJNaW5pRnJQQSIgQWxpYXM9IuWOi+mZjeWIhuaekCIgSWNvbj0iRmxvd1BlcmlvZCIgLz4NCg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwNCIgQm91bmRzPSIwLDIsMywxIiBOYW1lPSJDYWxTdWRkZW5TdG9wUCIgQWxpYXM9IueerOaXtuWBnOazteWOi+WKmyIgSWNvbj0iUnVuRXgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MDA1IiBCb3VuZHM9IjAsMyIgTmFtZT0iQ2FsR0Z1bmN0aW9uIiBBbGlhcz0iR+WHveaVsCIgSWNvbj0iUnVuT3RoZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MDA2IiBCb3VuZHM9IjEsMyIgTmFtZT0iQ2FsU3FydFQiIEFsaWFzPSLml7bpl7TlubPmlrnmoLkiIEljb249IlJ1bk90aGVyIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwNyIgQm91bmRzPSIyLDMiIE5hbWU9IkNhbExvZ0xvZyIgQWxpYXM9IuWPjOWvueaVsCIgSWNvbj0iUnVuT3RoZXIiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRkEiIEFsaWFzPSLmjpLph4/liIbmnpAiPg0KICAgICAgICAgICAgPENtZCBJRD0iNDEwMiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJNaW5pRnJBbmFsRkEiIEFsaWFzPSLmjpLph4/lh4blpIciIEV4dEluZm89IklQUiIgSWNvbj0iTWluaUZyQW5hbEZBIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDEwMyIgQm91bmRzPSIwLDEiIE5hbWU9Ik1pbmlGckZBVXAiIEFsaWFzPSLpmLbmoq/ljYciIEljb249IlN0ZXBVcCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjQxMDQiIEJvdW5kcz0iMSwxIiBOYW1lPSJNaW5pRnJGQURvd24iIEFsaWFzPSLpmLbmoq/pmY0iIEljb249IlN0ZXBEb3duIiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSLmiJDmnpznrqHnkIYiICBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDgiIEJvdW5kcz0iMCwwIiBOYW1lPSJSc3RMb2FkIiBBbGlhcz0i5Yqg6L295oiQ5p6cIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDkiIEJvdW5kcz0iMSwwIiBOYW1lPSJSc3RTYXZlIiBUeXBlPSIxIiBFeHROYW1lcz0iUnN0U2F2ZUN1cjtSc3RTYXZlQWxsIiBFeHRJbmZvPSLkv53lrZjlvZPliY3miJDmnpw75L+d5a2Y5omA5pyJ5oiQ5p6cIiBBbGlhcz0i5L+d5a2Y5oiQ5p6cIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0i56qX5Y+j5pi+56S6IiAgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9IuaooeWei+eql+WPoyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IuWPguaVsOeql+WPoyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxCYXNpYyIgQWxpYXM9IuWfuuehgOS/oeaBryIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVOaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDMiIEJvdW5kcz0iMCwyIiBOYW1lPSJWaXNpYmxlQW5hbERpZmYiIEFsaWFzPSJESUZG5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IuaLn+WOi+WKm+aVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNDAxIiBOYW1lPSJXRFQiIEFsaWFzPSLkuqfog73or5XkupUoUCkiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQW5hbEVkaXQiIEFsaWFzPSLliIbmnpDnrqHnkIYiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNiIgQm91bmRzPSIwLDAiIE5hbWU9IkFuYWxOZXciIEFsaWFzPSLmlrDlu7rliIbmnpAiIEljb249IkpvYk5ldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDciIEJvdW5kcz0iMSwwIiBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IuWIhuaekOeuoeeQhiIgSWNvbj0iSm9iRWRpdCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSVBSIiBBbGlhcz0iSVBS5YWI5YmN5Y+C6ICDKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSI2MDAyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IklQUkFuYWwiIEFsaWFzPSJJUFLlh4blpIciIEV4dEluZm89IklQUiIgSWNvbj0iSVBSQW5hbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYwMDMiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iSVBSQ2FsIiBBbGlhcz0iSVBS6K6h566XIiBJY29uPSJJUFJDYWwiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldkdERhdGFQcmVwcm9jZXNzIiBBbGlhcz0i5pWw5o2u6aKE5aSE55CGIiBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYxMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iV2R0RGF0YUFzc24iIEFsaWFzPSLmlbDmja7lvZLkuIDljJYiIEV4dEluZm89IldEVCIgSWNvbj0iSVBSQW5hbCIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYxMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iV2R0T3RoZXIiIEFsaWFzPSLlhbblroMiIEljb249IldkdE90aGVyIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjEwMyIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJXZHRXTUYiIEFsaWFzPSLkupXnrZLlpJrnm7jmtYEiIEljb249IldkdFdNRiIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYxMDQiIEJvdW5kcz0iMCw0LDIsMSIgTmFtZT0iV2R0Q2hva2UiIEFsaWFzPSLlmLTmtYEiIEljb249IldkdENob2tlIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJJUFIiIEFsaWFzPSLkuqfog73liIbmnpAiPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJXZHRJUFJDYWwiIEV4dEluZm89IldEVCIgQWxpYXM9IuWCqOWxguS6p+iDveiuoeeulyIgSWNvbj0iSVBSQ2FsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJXZWxsUGR0eSIgQWxpYXM9IuS4gOS9k+WMluS6p+iDvSIgSWNvbj0iV2VsbFBkdHkiICBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwMyIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJXZHRJUFJFeHQiIEFsaWFzPSLkuqfog73or5XkupVb5omp5bGVXSIgSWNvbj0iSVBSRXh0Ii8+DQogICAgICAgICAgICA8Q21kIElEPSI2MjA0IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IldkdElQUkFuYWwiIEFsaWFzPSLlgqjlsYLkuqfog73liIbmnpAiIEljb249IklQUkFuYWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI2MjA1IiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9IldlbGxJbnRlZ0FuYWwiIEFsaWFzPSLnu7zlkIjliIbmnpAiIEljb249IldlbGxJbnRlZ0FuYWwiIFZpc2libGU9IjAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IklQUiIgQWxpYXM9IuS6p+iDveiuoeeulyI+DQogICAgICAgICAgICA8Q21kIElEPSI2MzAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IldkdENhbCIgQWxpYXM9IuiuoeeulyIgRXh0SW5mbz0iV0RUIiBJY29uPSJSdW5FeCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJKb2JzIiBBbGlhcz0i5oiQ5p6c566h55CGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDgiIEJvdW5kcz0iMCwwIiBOYW1lPSJSc3RMb2FkIiBBbGlhcz0i5Yqg6L295oiQ5p6cIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDkiIEJvdW5kcz0iMSwwIiBOYW1lPSJSc3RTYXZlIiBUeXBlPSIxIiBFeHROYW1lcz0iUnN0U2F2ZUN1cjtSc3RTYXZlQWxsIiBFeHRJbmZvPSLkv53lrZjlvZPliY3miJDmnpw75L+d5a2Y5omA5pyJ5oiQ5p6cIiBBbGlhcz0i5L+d5a2Y5oiQ5p6cIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0i56qX5Y+j5pi+56S6Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwwIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0i5qih5Z6L56qX5Y+jIiBJY29uPSJWaXNpYmxlTW9kZWxzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDAiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0i5Y+C5pWw56qX5Y+jIiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0i5Z+656GA5L+h5oGvIiBJY29uPSJJbnB1dEJhc2ljIiAgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVOaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDMiIEJvdW5kcz0iMCwyIiBOYW1lPSJWaXNpYmxlQW5hbERpZmYiIEFsaWFzPSJESUZG5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDQiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBzZXUiIEFsaWFzPSLmi5/ljovlipvmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNiIgTmFtZT0iQWR2YW5jZWRGdW5jdGlvbiIgQWxpYXM9IuivleS6leiuvuiuoShYKSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEZXNpZ24iIEFsaWFzPSLor5XkupXorr7orqEiPg0KICAgICAgICAgICAgPENtZCBJRD0iNjAwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJUZXN0RGVzaWduIiBBbGlhcz0i6K+V5LqV6K6+6K6hIiBJY29uPSJUZXN0RGVzaWduIiBFeHRJbmZvPSJQRiIgIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA0IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkFuYWxGbG93U2VnIiBBbGlhcz0i5rWB5Yqo5q615YiG5p6QIiBJY29uPSJGbG93UGVyaW9kIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNSIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJBbmFsT3RoZXJzIiBBbGlhcz0i54m55b6B5q615YiG5p6QIiBUeXBlPSIxIiBFeHROYW1lcz0iQ2hhcnRUO0NoYXJ0U3FydFQ7Q2hhcnQyNVQ7Q2hhcnQ1VCIgRXh0SW5mbz0iQ2hhcnQgVDtDaGFydCBTcXJ0KFQpO0NoYXJ0IDAuMjVUO0NoYXJ0IC0wLjVUIiBJY29uPSJBc3Npc0FuYWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA5IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkFuYWxEaXN0cmkiIEFsaWFzPSLliIbluIPlm74iIFR5cGU9IjEiIEV4dE5hbWVzPSJDaGFydERlbjtDaGFydFZpcyIgRXh0SW5mbz0i5rWT5bqm5YiG5biD5Zu+O+m7j+W6puWIhuW4g+WbviIgSWNvbj0iQW5hbERpc3RyaSIgLz4NCg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhRml0IiBBbGlhcz0i6Kej6YeK5ouf5ZCIIj4NCg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwNSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJEZWNvbnZvbHYiIEFsaWFzPSLlj43opLbnp68iIEljb249IkRlY29udm9sdiIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwMSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJGaXRNb2RlbCIgQWxpYXM9Iuino+aekOinoyIgSWNvbj0iRml0TW9kZWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTA0IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9Im5tRml0TW9kZWwiIEFsaWFzPSLmlbDlgLzop6MiIEljb249IkZpdE1vZGVsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwMiIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJBdXRvRml0IiBBbGlhcz0i6Ieq5Yqo5ouf5ZCIIiBJY29uPSJBdXRvRml0IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwMyIgQm91bmRzPSIwLDQsMiwxIiBOYW1lPSJQbGF0ZUZpdCIgQWxpYXM9IuaVj+aEn+aAp+WIhuaekCIgSWNvbj0iUGxhdGVGaXQiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQUlUZXN0IiBBbGlhcz0i5pm66IO96K+V5LqVKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIzOTAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik1vZGVsQ2xhc3NpZnkiIEFsaWFzPSLmqKHlnovor4bliKsiIEljb249Ik1vZGVsQ2xhc3NpZnkiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlJlbGF0aXZlVG9vbCIgQWxpYXM9IuebuOWFs+W3peWFtyIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMjAxIiBCb3VuZHM9IjAsMCIgTmFtZT0iVGltZSIgQWxpYXM9IuaXtumXtCIgSWNvbj0iVGltZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDIiIEJvdW5kcz0iMSwwIiBOYW1lPSJTaG93TW9kZWxDaGFydHMiIEFsaWFzPSLmqKHlnosiIEljb249IlNob3dNb2RlbENoYXJ0cyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDMiIEJvdW5kcz0iMCwxIiBOYW1lPSJTaG93TW9kZWxTa2V0Y2giIEFsaWFzPSLnkIborroiIEljb249IlNob3dNb2RlbFNrZXRjaCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDQiIEJvdW5kcz0iMSwxIiBOYW1lPSJTYXZlQXNNb2RlbFNrZXRjaCIgQWxpYXM9IuWtmOS4uuekuuaEjyIgSWNvbj0iU2F2ZUFzTW9kZWxTa2V0Y2giIC8+ICAgICAgICAgICAgDQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iVG9vbFMiIEFsaWFzPSLmianlsZXlip/og70iICBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9Ijk4MDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRmxvd1RvUyIgQWxpYXM9Iua1gemHj+WPmOihqOeariIgSWNvbj0iRmxvd1RvUyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkyMDEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTWl4VmlzY29zaXR5IiBBbGlhcz0i5re35ZCI6buP5bqmIiBJY29uPSJNaXhWaXNjb3NpdHkiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSm9icyIgQWxpYXM9IuaIkOaenOeuoeeQhiIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IuWKoOi9veaIkOaenCIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0i5L+d5a2Y5b2T5YmN5oiQ5p6cO+S/neWtmOaJgOacieaIkOaenCIgQWxpYXM9IuS/neWtmOaIkOaenCIgSWNvbj0iU2F2ZUpvYnMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9Iueql+WPo+aYvuekuiIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9IuaooeWei+eql+WPoyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IuWPguaVsOeql+WPoyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxCYXNpYyIgQWxpYXM9IuWfuuehgOS/oeaBryIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVOaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDMiIEJvdW5kcz0iMCwyIiBOYW1lPSJWaXNpYmxlQW5hbERpZmYiIEFsaWFzPSJESUZG5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IuaLn+WOi+WKm+aVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNyIgTmFtZT0iQWlUZXN0IiBBbGlhcz0i5pm66IO96K+V5LqVKEkpIj4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGVtbzEiIEFsaWFzPSLmoLfkvovoj5zljZUxIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTEiIEFsaWFzPSLkuLTml7bmtYvor5UxIiBJY29uPSJUT0RPMSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcwMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTIiIEFsaWFzPSLkuLTml7bmtYvor5UyIiBJY29uPSJUT0RPMiIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGVtbzIiIEFsaWFzPSLmoLfkvovoj5zljZUyIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcxMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTMiIEFsaWFzPSLkuLTml7bmtYvor5UzIiBJY29uPSJUT0RPMyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcxMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTQiIEFsaWFzPSLkuLTml7bmtYvor5U0IiBJY29uPSJUT0RPNCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGVtbzMiIEFsaWFzPSLmoLfkvovoj5zljZUzIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcyMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTQiIEFsaWFzPSLkuLTml7bmtYvor5U1IiBJY29uPSJUT0RPNSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcyMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTUiIEFsaWFzPSLkuLTml7bmtYvor5U2IiBJY29uPSJUT0RPNiIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTm1EZWJ1ZyIgQWxpYXM9Iuahhuaetua1i+ivlShEZWJ1ZykiPg0KICAgICAgICAgICAgPENtZCBJRD0iNzk5OSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObURlYnVnIiBBbGlhcz0i5qGG5p625Luj56CB6LCD6K+VIiBJY29uPSJQcmVwYXJlR3JpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KDQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjgiIE5hbWU9IlJlc3VsdCIgQWxpYXM9IuaIkOaenOeuoeeQhihSKSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJKb2JzIiBBbGlhcz0i5oiQ5p6c566h55CGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDgiIEJvdW5kcz0iMCwwIiBOYW1lPSJSc3RMb2FkIiBBbGlhcz0i5Yqg6L295oiQ5p6cIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDkiIEJvdW5kcz0iMSwwIiBOYW1lPSJSc3RTYXZlIiBUeXBlPSIxIiBFeHROYW1lcz0iUnN0U2F2ZUN1cjtSc3RTYXZlQWxsIiBFeHRJbmZvPSLkv53lrZjlvZPliY3miJDmnpw75L+d5a2Y5omA5pyJ5oiQ5p6cIiBBbGlhcz0i5L+d5a2Y5oiQ5p6cIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iUmVzQ29tcGFyZSIgQWxpYXM9IuaIkOaenOWvueavlCI+DQogICAgICAgICAgICA8Q21kIElEPSI4MDAzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IlJlc0NvbXBhcmUiIEFsaWFzPSLmiJDmnpzlr7nmr5QiIEljb249IlJlc0NvbXBhcmUiICAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJQcmludCIgQWxpYXM9IuaKpeWRiuaJk+WNsCI+DQogICAgICAgICAgICA8Q21kIElEPSI4MDAxIiBCb3VuZHM9IjAsMCIgTmFtZT0iUmVwb3J0Q29uZmlnIiBBbGlhcz0i5oql5ZGK6K6+572uIiBJY29uPSJyZXBvcnRDb25maWciICAvPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwNCIgQm91bmRzPSIxLDAiIE5hbWU9IlByaW50UHJldmlldyIgQWxpYXM9IuaKpeWRiumihOiniCIgSWNvbj0iUHJlUHJpbnQiICAvPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwMiIgQm91bmRzPSIwLDEiIE5hbWU9IlByaW50IiBBbGlhcz0i5omT5Y2wKOWQq1BERikiIEljb249IlByaW50IiAgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjgwMDUiIEJvdW5kcz0iMSwxIiBOYW1lPSJFeHBvcnRXb3JkIiBBbGlhcz0i5a+85Ye6KFdvcmQpIiBJY29uPSJXb3JkMTYiICAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3ciIEFsaWFzPSLnqpflj6PmmL7npLoiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IuWPguaVsOeql+WPoyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA0IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IlZpc2libGVQdHlzIiBBbGlhcz0i5bGe5oCn56qX5Y+jIiBJY29uPSJQcm9wZXJ0eVdpbmRvdyIgLz4NCg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI5IiBOYW1lPSJXaW5kb3ciIEFsaWFzPSLnqpflj6MoVykiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0i5Z+65pysIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iVmlzaWJsZVByb2pUcmVlRGEiIEFsaWFzPSLpobnnm67moJEiIEljb249IlByb2pUcmVlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwOCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJWaXNpYmxlUHJvalRyZWVKYiIgQWxpYXM9IuWIhuaekOagkSIgSWNvbj0iUHJvalRyZWUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA5IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IlZpc2libGVQcm9qVHJlZVJzIiBBbGlhcz0i5oiQ5p6c5qCRIiBJY29uPSJQcm9qVHJlZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwzIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0i5qih5Z6L56qX5Y+jIiBJY29uPSJWaXNpYmxlTW9kZWxzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDMiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0i5Y+C5pWw56qX5Y+jIiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDQiIEJvdW5kcz0iMCw0IiBOYW1lPSJWaXNpYmxlUHR5cyIgQWxpYXM9IuWxnuaAp+eql+WPoyIgSWNvbj0iUHJvcGVydHlXaW5kb3ciIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA1IiBCb3VuZHM9IjEsNCIgTmFtZT0iVmlzaWJsZUxvZ3MiIEFsaWFzPSLml6Xlv5fnqpflj6MiIEljb249IlZpc2libGVMb2dzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwNiIgQm91bmRzPSIwLDUiIE5hbWU9IlN0YWNrZWRQcm9qZWN0IiBBbGlhcz0i6aG555uu56qX5L2TIiBJY29uPSJTdGFja2VkUHJvamVjdCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDciIEJvdW5kcz0iMSw1IiBOYW1lPSJTdGFja2VkTWRpIiBBbGlhcz0i5YiG5p6Q56qX5L2TIiBJY29uPSJTdGFja2VkTWRpIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3dMYXlvdXQiIEFsaWFzPSLnqpflj6PluIPlsYAiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxMSIgQm91bmRzPSIwLDAiIE5hbWU9IldpbmRvd0xheW91dEgiIEljb25Pbmx5PSIxIiBUaXBzPSLmsLTlubPluIPlsYAiIEljb249IldpbmRvd0xheW91dEgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDEyIiBCb3VuZHM9IjEsMCIgTmFtZT0iV2luZG93TGF5b3V0ViIgSWNvbk9ubHk9IjEiIFRpcHM9IuerluebtOW4g+WxgCIgSWNvbj0iV2luZG93TGF5b3V0ViIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMTMiIEJvdW5kcz0iMCwxIiBOYW1lPSJXaW5kb3dMYXlvdXRUIiBJY29uT25seT0iMSIgVGlwcz0i5bmz6ZO65biD5bGAIiBJY29uPSJXaW5kb3dMYXlvdXRUIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxNCIgQm91bmRzPSIxLDEiIE5hbWU9IldpbmRvd0xheW91dEMiIEljb25Pbmx5PSIxIiBUaXBzPSLmipjlj6DluIPlsYAiIEljb249IldpbmRvd0xheW91dEMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkNsb3NlIiBBbGlhcz0i5YWz6ZetIj4gICAgICAgIA0KICAgICAgICAgICAgPENtZCBJRD0iOTAyMSIgQm91bmRzPSIwLDAiIE5hbWU9IkNsb3NlQ3VyV25kIiBBbGlhcz0i5YWz6Zet5b2T5YmNIiBJY29uPSJDbG9zZUFsbFdpbmRvdyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMjIiIEJvdW5kcz0iMSwwIiBOYW1lPSJDbG9zZUFsbFduZHMiIEFsaWFzPSLlhbPpl63miYDmnIkiIEljb249IkNsb3NlQWxsV2luZG93IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyMyIgQm91bmRzPSIwLDEiIE5hbWU9IlByZXZXbmQiIEFsaWFzPSLkuIrkuIDkuKoiIEljb25Pbmx5PSIxIiBJY29uPSJVcCIgVGlwcz0i5LiK5LiA5Liq56qX5L2TIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyNCIgQm91bmRzPSIxLDEiIE5hbWU9Ik5leHRXbmQiIEFsaWFzPSLkuIvkuIDkuKoiIEljb25Pbmx5PSIxIiBJY29uPSJEb3duIiBUaXBzPSLkuIvkuIDkuKrnqpfkvZMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDI1IiBCb3VuZHM9IjAsMiwyLDEiIFR5cGU9IjciIE5hbWU9Ikxpc3RXeFduZHMiIEFsaWFzPSLnqpfkvZMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjEwIiBOYW1lPSJIZWxwIiBBbGlhcz0i5biu5YqpKEgpIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTG9nVmlldyIgQWxpYXM9IuaXpeW/l+afpeeciyhMKSIgSWNvbj0iTG9nVmlldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAyIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwOCIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJVcGRhdGVMaXN0cyIgQWxpYXM9IuabtOaWsOWIl+ihqChJKSIgSWNvbj0iVXBkYXRlTGlzdHMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkxhbmciIEFsaWFzPSLor63oqIAiPg0KICAgICAgICAgICA8Q21kIElEPSIxMDAwOSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJMYW5nU3dhcCIgQWxpYXM9IuWIh+aNouivreiogCIgSWNvbj0iTGFuZ1N3YXAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFib3V0IiBBbGlhcz0i5YWz5LqOIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFib3V0IiBBbGlhcz0i5YWz5LqOKEEpIiBJY29uPSJXVEFJQWJvdXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNCIgQm91bmRzPSIxLDAiIE5hbWU9IkFib3V0UXQiIEFsaWFzPSLlhbPkuo5RdChRKSIgSWNvbj0iUXQiIFZpc2libGU9IjAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkxvZ2luIiBBbGlhcz0i55m75b2VKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNyIgQm91bmRzPSIwLDAiIE5hbWU9IlJlZ2lzdGVyIiBBbGlhcz0iKERlYnVnKei9r+S7tuazqOWGjChSKSIgSWNvbj0iUmVnaXN0ZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNSIgQm91bmRzPSIxLDAiIE5hbWU9IkxvZ2luIiBBbGlhcz0iKERlYnVnKeeUqOaIt+eZu+W9lShVKSIgSWNvbj0iTG9naW4iIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRlYnVnIiBBbGlhcz0i6LCD6K+VKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSIoRGVidWcpIFN1bSBQYXJhbWV0ZXJzIiBBbGlhcz0iKERlYnVnKeaxh+aAu+aooeWei+WPguaVsCIgSWNvbj0iU3VtUGFyYSIgLz4NCiAgICAgICA8L0dyb3VwPg0KICAgIDwvVGFiPg0KDQo8L1JpYmJvbj4NCg== \ No newline at end of file +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSDnvJbovpHkvbwzy/nlKggWE1MU3B5IHYyMDA2IFUgKGh0dHA6Ly93d3cuYWx0b3ZhLmNvbSkg55SxIGFueSAoYW55KSAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tICAgIOacrOaWh+aho+eahOebrueahOaYr+W7uueri1dUQUnova/ku7bns7vnu5/nmoToj5zljZXlsYLmrKHlhbPns7so6ZKI5a+5UmliYm9u5qih5byPKSAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEF1dGhvcihzKTogd2FuZ3pnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI0MDcxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQoNCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tDQogICAgVGFiIOe6p+WIqw0KICAgICAgICBJRDogICAgICAgICAg5ZSv5LiA5qCH6K+GDQogICAgICAgIE5hbWXvvJogICAgICAg5ZCN56ew77yM6YCa5bi46Iux5paHDQogICAgICAgIEFsaWFz77yaICAgICAg5Yir5ZCN77yM6YCa5bi45Lit5paHDQogICAgICAgIEZpbGVNb2RlOiAgICDmmK/lkKbmlofku7ZNZW515qih5byP77yMMSBvciAwDQogICAgICAgIFZpc2libGXvvJogICAg5piv5ZCm5Y+v6KeB77yMMSBvciAwDQogICAgICAgIFRpcHPvvJogICAgICAg6L6F5Yqp6K+05piODQoNCiAgICAgICAgR3JvdXAg57qn5YirDQogICAgICAgICAgICBOYW1l77yaICAgICAgIOWQjeensO+8jOmAmuW4uOiLseaWhw0KICAgICAgICAgICAgQWxpYXPvvJogICAgICDliKvlkI3vvIzpgJrluLjkuK3mlocNCg0KICAgICAgICAgICAgQ21kIOe6p+WIqw0KICAgICAgICAgICAgICAgIElEOiAgICAgICAgICDllK/kuIDmoIfor4YNCiAgICAgICAgICAgICAgICBUeXBlOiAgICAgICAg5a+55bqU5o6n5Lu257G75Z6LOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw4oCU4oCU6buY6K6kQnV0dG9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDHigJTigJTluKbkuIvmi4noj5zljZVCdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMuKAlOKAlENvbWJvQm94DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDPigJTigJRDaGVja0JveA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA04oCU4oCUUmFkaW9CdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNeKAlOKAlFRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNuKAlOKAlExhYmVsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDfigJTigJRMaXN0V2lkZ2V0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDjigJTigJRMaW5lRWRpdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA54oCU4oCU5YqI5YiG5oyJ6ZKuDQogICAgICAgICAgICAgICAgTmFtZe+8miAgICAgICDlkI3np7DvvIzpgJrluLjoi7HmlocNCiAgICAgICAgICAgICAgICBBbGlhc++8miAgICAgIOWIq+WQje+8jOmAmuW4uOS4reaWhw0KICAgICAgICAgICAgICAgIEljb27vvJogICAgICAg5Zu+5qCHDQogICAgICAgICAgICAgICAgU2hvcnRLZXnvvJogICDlv6vmjbfplK4NCiAgICAgICAgICAgICAgICBCb3VuZHM6ICAgICAg5L2N572u5L+h5oGv77yM5YWo5piv5pW05pWw77yM5ZyoR3JpZExheW91dOS4rQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwwLDEsMikgKDAsMCkg5YiG5Yir5Li6eHl3aA0KICAgICAgICAgICAgICAgIEV4dEluZm86ICAgICDmianlsZXkv6Hmga/vvIzlpoLmk43kvZzlr7nosaHnmoTooajlkI0s5LiL5ouJ6YCJ6aG5562JDQogICAgICAgICAgICAgICAgRXh0TmFtZXM6ICAgIOaJqeWxleS/oeaBr+WvueW6lOeahE5hbWXvvIzlpoLkuIvmi4lidXR0b27lr7nlupTnmoROYW1lDQogICAgICAgICAgICAgICAgVGlwc++8miAgICAgICDovoXliqnor7TmmI4NCi0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPFJpYmJvbj4NCg0KICAgIDxUYWIgSUQ9IjEiIE5hbWU9IlByb2pNYW5hZ2VyIiBBbGlhcz0i6aG555uu566h55CGKFApIiBGaWxlTW9kZT0iMSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJQcm9qZWN0IiBBbGlhcz0i5paH5Lu2Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAiIE5hbWU9IkFwcEhvbWUiIEFsaWFzPSIiIEljb249IkFwcEhvbWUxMjgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0i5YiG6ZqU56ymIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAxIiBOYW1lPSJQcm9qTmV3IiBBbGlhcz0i5paw5bu66aG555uuIiBTaG9ydEtleT0iQ3RybCtOIiBJY29uPSJOZXdQcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMiIgTmFtZT0iUHJvak9wZW4iIEFsaWFzPSLmiZPlvIDpobnnm64iIFNob3J0S2V5PSJDdHJsK08iIEljb249Ik9wZW5Qcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMyIgTmFtZT0iUHJvakNsb3NlIiBBbGlhcz0i5YWz6Zet6aG555uuIiBJY29uPSJDbG9zZVByb2oiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0i5YiG6ZqU56ymIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA1IiBOYW1lPSJQcm9qU2F2ZSIgQWxpYXM9IuS/neWtmOmhueebriIgU2hvcnRLZXk9IkN0cmwrUyIgSWNvbj0iU2F2ZVByb2oiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA2IiBOYW1lPSJQcm9qU2F2ZUFzIiBBbGlhcz0i6aG555uu5Y+m5a2YIiBJY29uPSJTYXZlYXMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA3IiBOYW1lPSJQcm9qQ29uZmlnIiBBbGlhcz0i6aG555uu5L+h5oGvIiBJY29uPSJQcm9qSW5mbyIgLz4NCg0KICAgICAgICAgICAgPENtZCBJRD0iLTEiIE5hbWU9IlNlcGFyYXRvciIgQWxpYXM9IuWIhumalOespiIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDIiIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwMyIgTmFtZT0iQWJvdXQiIEFsaWFzPSLlhbPkuo4oQSkiIEljb249IldUQUlBYm91dCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDA4IiBOYW1lPSJVcGRhdGVMaXN0cyIgQWxpYXM9IuabtOaWsOWIl+ihqChJKSIgSWNvbj0iVXBkYXRlTGlzdHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0i5YiG6ZqU56ymIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDEwIiBOYW1lPSJBcHBRdWl0IiBBbGlhcz0i6YCA5Ye6KFgpIiBJY29uPSJDbG9zZSIgLz4NCiAgICAgICAgPC9Hcm91cD4NCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjAiIE5hbWU9IldlbENvbWUiIEFsaWFzPSLlvIDlp4soTykiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSLmlbDmja7lh4blpIciPg0KICAgICAgICAgICAgPENtZCBJRD0iMTA5OSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJXZWxsTmV3IiBBbGlhcz0i5paw5bu65LqVKFcpIiBJY29uPSJXZWxsTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhUmF0ZSIgQWxpYXM9Iua1gemHj+aVsOaNrihRKSIgRXh0SW5mbz0iUF9EQVRBX0dBVUdFX0YiIEljb249IlJhdGVEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNiIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJEYXRhUHJlIiBBbGlhcz0i5Y6L5Yqb5pWw5o2uKFApIiBFeHRJbmZvPSJQX0RBVEFfR0FVR0VfUCIgSWNvbj0iUHJlc3N1cmVEYXRhIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IuWIhuaekOeuoeeQhiI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA2IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxOZXciIEFsaWFzPSLmlrDlu7rliIbmnpAiIEljb249IkpvYk5ldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDciIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEVkaXQiIEFsaWFzPSLliIbmnpDnrqHnkIYiIEljb249IkpvYkVkaXQiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxCYXNpYyIgQWxpYXM9IuWfuuehgOS/oeaBryIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVOaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQW5hbHl0aWNhbCIgQWxpYXM9Iua1geWKqOauteWIhuaekCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDAzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxQRiIgQWxpYXM9Iua1geWKqOautemAieaLqSIgRXh0SW5mbz0iUEYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJBbmFsRmxvd1NlZyIgQWxpYXM9Iua1geWKqOauteWIhuaekCIgSWNvbj0iRmxvd1BlcmlvZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQW5hbHl0aWNhbCIgQWxpYXM9Iuino+mHiuaLn+WQiCI+DQoNCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDUiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRGVjb252b2x2IiBBbGlhcz0i5Y+N6KS256evIiBJY29uPSJEZWNvbnZvbHYiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkZpdE1vZGVsIiBBbGlhcz0i6Kej5p6Q6KejIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDQiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0ibm1GaXRNb2RlbCIgQWxpYXM9IuaVsOWAvOinoyIgSWNvbj0iRml0TW9kZWwiIC8+DQoNCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDIiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQXV0b0ZpdCIgQWxpYXM9IuiHquWKqOaLn+WQiCIgSWNvbj0iQXV0b0ZpdCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJOdW1lcmljYWwiIEFsaWFzPSLlnLDotKjlu7rmqKEoRGVidWcpIiBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUwMDIiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iUHJvcGVydHlMb2FkIiBBbGlhcz0i5bGe5oCn5a+85YWlIiBJY29uPSJQcmVwYXJlR3JpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iUnVuR3JpZCIgQWxpYXM9Iue9keagvOWIkuWIhiIgSWNvbj0iUGxhdGVGaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MjAxIiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IkFuYWxNYXAiIEFsaWFzPSLorqHnrpciIEljb249IlJ1bkV4IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTIwMiIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJBbmFsUEYiIEFsaWFzPSLovoXliqnmi5/lkIgiIEV4dEluZm89IlBGIiBJY29uPSJSdW5PdGhlciIgVmlzaWJsZT0iMCIvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldlbGxNYXAiIEFsaWFzPSLkupXkvY3lm74iPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwOCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsTWFwIiBBbGlhcz0i5LqV5L2N5Zu+IiBJY29uPSJNYXAyRCIgVmlzaWJsZT0iMSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMTgiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEludGVyZmVyZSIgQWxpYXM9IuW5suaJsOiuvuWumiIgSWNvbj0iTWFwMkQiIFZpc2libGU9IjAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9Iueql+WPo+aYvuekuihEZWJ1ZykiIFZpc2libGU9IjAiID4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwwIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0i5qih5Z6L56qX5Y+jIiBJY29uPSJWaXNpYmxlTW9kZWxzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDAiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0i5Y+C5pWw56qX5Y+jIiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0i5Z+656GA5L+h5oGvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZU5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMyIgQm91bmRzPSIwLDIiIE5hbWU9IlZpc2libGVBbmFsRGlmZiIgQWxpYXM9IkRJRkbmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTA0IiBCb3VuZHM9IjEsMiIgTmFtZT0iVmlzaWJsZUFuYWxQc2V1IiBBbGlhcz0i5ouf5Y6L5Yqb5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJIZWxwIiBBbGlhcz0i5biu5YqpIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICA8L1RhYj4NCg0KDQogICAgPFRhYiBJRD0iMiIgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSLmlbDmja7nrqHnkIYoRCkiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSLkupUiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTA5OSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJXZWxsTmV3IiBBbGlhcz0i5paw5bu65LqVKFcpIiBJY29uPSJXZWxsTmV3IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IuWfuuehgOaVsOaNriI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkRhdGFXZWxsQmFzaWMiIEFsaWFzPSLkupXln7rnoYDmlbDmja4oQikiIEV4dEluZm89IkJfV0VMTCIgSWNvbj0iQmFzaWNEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhTGF5ZXIiIEFsaWFzPSLlnLDotKjliIblsYLmlbDmja4oTCkiIEV4dEluZm89IkJfTEFZRVIiIEljb249IkxheWVyRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDMiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iRGF0YVJlcyIgQWxpYXM9IuWCqOWxguaVsOaNrihSKSIgRXh0SW5mbz0iUF9EQVRBX1JFUyIgSWNvbj0iUmVzRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDQiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iRGF0YUZsdSIgQWxpYXM9Iua1geS9k+aAp+i0qOaVsOaNrihGKSIgRXh0SW5mbz0iUF9EQVRBX0ZMVUlEIiBJY29uPSJGbHVpZFByb3BlcnR5IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IuWOi+WKm+a1gemHjyI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA1IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkRhdGFSYXRlIiBBbGlhcz0i5rWB6YeP5pWw5o2uKFEpIiBFeHRJbmZvPSJQX0RBVEFfR0FVR0VfRiIgSWNvbj0iUmF0ZURhdGEiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA2IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkRhdGFQcmUiIEFsaWFzPSLljovlipvmlbDmja4oUCkiIEV4dEluZm89IlBfREFUQV9HQVVHRV9QIiBJY29uPSJQcmVzc3VyZURhdGEiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkdYNiIgQWxpYXM9IuW5s+WPsOS6kumAmiI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA3IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ikd4NkNvbm5lY3RTZXJ2ZXIiIEFsaWFzPSJHWDbkupLpgJooQykiIEljb249Ikd4NkNvbm5lY3RTZXJ2ZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA4IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ikd4NkdldFRhc2tzIiBBbGlhcz0i6I635Y+W5Lu75YqhKEQpIiBJY29uPSJHeDZHZXRUYXNrcyIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDkiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iR3g2VXBkYXRlVGFza3MiIEFsaWFzPSLmm7TmlrDnirbmgIEoVSkiIEljb249Ikd4NlVwZGF0ZVRhc2tzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSIyMDEiIE5hbWU9IkRhdGFFZGl0IiBBbGlhcz0i5pWw5o2u57yW6L6RKEUpIiA+DQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhRWRpdCIgQWxpYXM9IuaVsOaNrue8lui+kSI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxGbHUiIEFsaWFzPSLmtYHph4/nvJbovpEiIEV4dEluZm89IkYiIE1kaVR5cGU9IkRhdGFFZGl0IiBJY29uPSJSYXRlRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbFByZXNzIiBBbGlhcz0i5Y6L5Yqb57yW6L6RIiBFeHRJbmZvPSJQIiBNZGlUeXBlPSJEYXRhRWRpdCIgSWNvbj0iUHJlc3N1cmVEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzMwMyIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJBbmFsUHJlQ29uIiBBbGlhcz0i5Y6L5Yqb5oqY566XIiBFeHRJbmZvPSJQIiBNZGlUeXBlPSJEYXRhRWRpdCIgSWNvbj0iQW5hbFByZUNvbiIgLz4NCiAgICAgICAgPC9Hcm91cD4NCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjMiIE5hbWU9IkFuYWx5dGljYWxUZXN0IiBBbGlhcz0i5aSE55CG6Kej6YeKKEEpIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0i5YiG5p6Q566h55CGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDYiIEJvdW5kcz0iMCwwIiBOYW1lPSJBbmFsTmV3IiBBbGlhcz0i5paw5bu65YiG5p6QIiBJY29uPSJKb2JOZXciIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA3IiBCb3VuZHM9IjEsMCIgTmFtZT0iQW5hbEVkaXQiIEFsaWFzPSLliIbmnpDnrqHnkIYiIEljb249IkpvYkVkaXQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlNlZ0FuYWwiIEFsaWFzPSLmtYHliqjmrrXliIbmnpAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsUEYiIEFsaWFzPSLmtYHliqjmrrXpgInmi6kiIEV4dEluZm89IlBGIiBJY29uPSJQRiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDQiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEZsb3dTZWciIEFsaWFzPSLmtYHliqjmrrXliIbmnpAiIEljb249IkZsb3dQZXJpb2QiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA1IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IkFuYWxPdGhlcnMiIEFsaWFzPSLnibnlvoHnur/liIbmnpAiIFR5cGU9IjEiICBWaXNpYmxlPSIwIiBFeHROYW1lcz0iQ2hhcnRUO0NoYXJ0U3FydFQ7Q2hhcnQyNVQ7Q2hhcnQ1VCIgRXh0SW5mbz0iQ2hhcnQgVDtDaGFydCBTcXJ0KFQpO0NoYXJ0IDAuMjVUO0NoYXJ0IC0wLjVUIiBJY29uPSJBc3Npc0FuYWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDEwIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkFuYWxXbmRNIiBBbGlhcz0i5rWB5Yqo5q6156qX5Y+jIiBUeXBlPSIxIiBJY29uPSJBbmFsV25kTSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDkiIEJvdW5kcz0iMCw0LDIsMSIgTmFtZT0iQW5hbERpc3RyaSIgQWxpYXM9IuWIhuW4g+WbviIgVHlwZT0iMSIgRXh0TmFtZXM9IkNoYXJ0RGVuO0NoYXJ0VmlzIiBFeHRJbmZvPSLmtZPluqbliIbluIPlm7476buP5bqm5YiG5biD5Zu+IiBJY29uPSJBbmFsRGlzdHJpIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhRml0IiBBbGlhcz0i6Kej6YeK5ouf5ZCIIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDUiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRGVjb252b2x2IiBBbGlhcz0i5Y+N6KS256evKERlYnVnKSIgSWNvbj0iRGVjb252b2x2IiAvPg0KDQogICAgICAgICAgICA8Q21kIElEPSIzMTAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkZpdE1vZGVsIiBBbGlhcz0i6Kej5p6Q6KejIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDQiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0ibm1GaXRNb2RlbCIgQWxpYXM9IuaVsOWAvOinoyIgSWNvbj0iRml0TW9kZWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAyIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkF1dG9GaXQiIEFsaWFzPSLoh6rliqjmi5/lkIgiIEljb249IkF1dG9GaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAzIiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9IlBsYXRlRml0IiBBbGlhcz0i5pWP5oSf5oCn5YiG5p6QIiBJY29uPSJQbGF0ZUZpdCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBSVRlc3QiIEFsaWFzPSLmmbrog73or5XkupUiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzkwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJNb2RlbENsYXNzaWZ5IiBBbGlhcz0i5qih5Z6L6K+G5YirIiBJY29uPSJNb2RlbENsYXNzaWZ5IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJSZWxhdGl2ZVRvb2wiIEFsaWFzPSLnm7jlhbPlt6XlhbciPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJUaW1lIiBBbGlhcz0i5pe26Ze0IiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwMiIgQm91bmRzPSIwLDEiIE5hbWU9IlNob3dNb2RlbENoYXJ0cyIgQWxpYXM9IuaooeWei+ekuuaEjyIgSWNvbj0iU2hvd01vZGVsQ2hhcnRzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwNCIgQm91bmRzPSIxLDEiIE5hbWU9IlNhdmVBc01vZGVsU2tldGNoIiBBbGlhcz0i5a2Y5Li656S65oSPIiBJY29uPSJTYXZlQXNNb2RlbFNrZXRjaCIgLz4NCg0KICAgICAgIDwvR3JvdXA+DQoNCjwhLS0gICAgICAgICAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDMiIEJvdW5kcz0iMCwxIiBOYW1lPSJTaG93TW9kZWxTa2V0Y2giIEFsaWFzPSLnkIborroiIEljb249IlNob3dNb2RlbFNrZXRjaCIgLz48R3JvdXAgTmFtZT0iVG9vbFMiIEFsaWFzPSLmianlsZXlip/og70iPg0KICAgICAgICAgICAgPENtZCBJRD0iOTgwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJGbG93VG9TIiBBbGlhcz0i5rWB6YeP5Y+Y6KGo55quIiBJY29uPSJGbG93VG9TIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTIwMSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJNaXhWaXNjb3NpdHkiIEFsaWFzPSLmt7flkIjpu4/luqYiIEljb249Ik1peFZpc2Nvc2l0eSIgVmlzaWJsZT0iMCIgLz4NCiAgICAgICA8L0dyb3VwPi0tPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJKb2JzIiBBbGlhcz0i5oiQ5p6c566h55CGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDgiIEJvdW5kcz0iMCwwIiBOYW1lPSJSc3RMb2FkIiBBbGlhcz0i5Yqg6L295oiQ5p6cIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDkiIEJvdW5kcz0iMSwwIiBOYW1lPSJSc3RTYXZlIiBUeXBlPSIxIiBFeHROYW1lcz0iUnN0U2F2ZUN1cjtSc3RTYXZlQWxsIiBFeHRJbmZvPSLkv53lrZjlvZPliY3miJDmnpw75L+d5a2Y5omA5pyJ5oiQ5p6cIiBBbGlhcz0i5L+d5a2Y5oiQ5p6cIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMTEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iVG9OdW1lcmljYWwiIEFsaWFzPSJUby3mlbDlgLwiIEljb249IkxvYWRKb2JzIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3ciIEFsaWFzPSLnqpflj6PmmL7npLoiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMiIgQm91bmRzPSIwLDAiIE5hbWU9IlZpc2libGVNb2RlbHMiIEFsaWFzPSLmqKHlnovnqpflj6MiIEljb249IlZpc2libGVNb2RlbHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAzIiBCb3VuZHM9IjEsMCIgTmFtZT0iVmlzaWJsZVBhcmFtZXRlcnMiIEFsaWFzPSLlj4LmlbDnqpflj6MiIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSLln7rnoYDkv6Hmga8iIEljb249IklucHV0QmFzaWMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAyIiBCb3VuZHM9IjEsMSIgTmFtZT0iVmlzaWJsZUFuYWxQVlQiIEFsaWFzPSJQVlTmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRuaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDQiIEJvdW5kcz0iMSwyIiBOYW1lPSJWaXNpYmxlQW5hbFBzZXUiIEFsaWFzPSLmi5/ljovlipvmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgIDwvR3JvdXA+DQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI1IiBOYW1lPSJOdW1lcmljYWxUZXN0IiBBbGlhcz0i5pWw5YC85bu65qihKE4pIiA+DQogICAgICAgIDxHcm91cCBOYW1lPSJObU1hbmFnZXIiIEFsaWFzPSLliIbmnpDnrqHnkIYiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTAwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsTmV3IiBBbGlhcz0i5Li05pe25rWL6K+VMSIgSWNvbj0iUHJlcGFyZUdyaWQiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MDAyIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IlByb3BlcnR5TG9hZCIgQWxpYXM9IuS4tOaXtua1i+ivlTIiIEljb249IlByZXBhcmVHcmlkIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJObUFuYWxDaGFuZ2UiIEFsaWFzPSLliIbmnpDliIfmjaIiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEzMCIgQm91bmRzPSIwLDAiIE5hbWU9Ik5tQW5hbENoYW5nZSIgQWxpYXM9IuWIhuaekOWIh+aNoiIgSWNvbj0iSm9iRWRpdCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJOdEluaXQiIEFsaWFzPSLmqKHlnovlh6DkvZXlr7nosaEiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTExOCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObU1hcCIgQWxpYXM9Ik1hcCIgSWNvbj0iTm1JbWFnZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTkiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1VbmxvY2tlZCIgQWxpYXM9IumUgeWumiIgSWNvbj0iTm1VbmxvY2tlZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDIiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1JbWFnZSIgQWxpYXM9IuayueiXj+WcsOWbviIgSWNvbj0iTm1JbWFnZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjAiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iTm1NZWFzdXJlIiBBbGlhcz0i5q+U5L6L5bC6IiBJY29uPSJObU1lYXN1cmUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTAzIiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9Ik5tUG9seWdvbiIgQWxpYXM9IuWkmui+ueW9oui+ueeVjCIgSWNvbj0iTm1Qb2x5Z29uIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNCIgQm91bmRzPSIwLDUiIE5hbWU9Ik5tUG9seWdvbiIgQWxpYXM9IuefqeW9oui+ueeVjCIgSWNvbj0iTm1SZWN0YW5nbGUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTA1IiBCb3VuZHM9IjEsNSIgTmFtZT0iTm1Qb2x5Z29uIiBBbGlhcz0i5ZyG5b2i6L6555WMIiBJY29uPSJObVJvdW5kIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNiIgQm91bmRzPSIwLDYsMiwxIiBOYW1lPSJObUZhdWx0IiBBbGlhcz0i5pat5bGCIiBJY29uPSJObUZhdWx0IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNyIgQm91bmRzPSIwLDciIE5hbWU9Ik5tV2VsbCIgQWxpYXM9IumAieaLqeS6lSIgSWNvbj0iTm1XZWxsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwOCIgQm91bmRzPSIxLDciIE5hbWU9Ik5tV2VsbCIgQWxpYXM9IuaWsOW7uuS6lSIgSWNvbj0iTm1XZWxsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwOSIgQm91bmRzPSIwLDgsMiwxIiBOYW1lPSJObUZhdWx0IiBBbGlhcz0i6KOC57ydIiBJY29uPSJObUZhdWx0IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTExMCIgQm91bmRzPSIwLDkiIE5hbWU9Ik5tTGltaXQiIEFsaWFzPSLljLrln58iIEljb249Ik5tTGltaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTExIiBCb3VuZHM9IjEsOSIgTmFtZT0iTm1SZWdpb24iIEFsaWFzPSLmoIforrDljLrln58iIEljb249Ik5tUmVnaW9uIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEyMSIgQm91bmRzPSIwLDEwLDIsMSIgTmFtZT0iTm1EZWxldGUiIEFsaWFzPSLliKDpmaQiIEljb249Ik5tRGVsZXRlIiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICA8R3JvdXAgTmFtZT0iTnRSZXNlcnZvaXIiIEFsaWFzPSLlgqjlsYLnibnlvoEiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTExMiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObUdlb21ldHJ5IiBBbGlhcz0i5YiG5bGCIiBJY29uPSJObUdlb21ldHJ5IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTExMyIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJObVByb3BlcnRpZXMiIEFsaWFzPSLlgqjlsYLnibnmgKciIEljb249Ik5tUHJvcGVydGllcyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjIiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1ERk4iIEFsaWFzPSJERk4iIEljb249Ik5tREZOIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEyNiIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJObUludGVycG9sYXRpb24iIEFsaWFzPSLlsZ7mgKfmj5LlgLwiIEljb249Ik5tSW50ZXJwb2xhdGlvbiIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgPEdyb3VwIE5hbWU9Ik50TW9kZWwiIEFsaWFzPSLmqKHlnovnlJ/miJAiPg0KICAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTQiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTm1HcmlkIiBBbGlhcz0i572R5qC85YiS5YiGIiBJY29uPSJObUdyaWQiIC8+DQogICAgICAgICAgICAgPENtZCBJRD0iNTExNSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJObUNhY3VsYXRpb24iIEFsaWFzPSLorqHnrpfmsYLop6MiIEljb249IlRpbWUiIC8+DQogICAgICAgICAgICAgPCEtLQ0KICAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTYiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1CYWNrIiBBbGlhcz0i5ZCO5aSE55CGIiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTciIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iTm1SZXN1bHQiIEFsaWFzPSLnu5PmnpwiIEljb249IkZsb3dQZXJpb2QiIC8+DQogICAgICAgICAgICAgLS0+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnRUb29scyIgQWxpYXM9IuW3peWFtyI+DQogICAgICAgICAgICA8Q21kIElEPSI1MTI3IiBCb3VuZHM9IjAsMCIgTmFtZT0iTm1HZW9SZWZlcmVuY2UiIEFsaWFzPSLmqKHlnovlj4LogIPngrnorr7nva4iIEljb249Ik5tR2VvUmVmZXJlbmNlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEyOCIgQm91bmRzPSIxLDAiIE5hbWU9Ik5tUG9pbnRlclBvc2l0aW9uIiBBbGlhcz0i5qih5Z6L5L2N572u5pi+56S6IiBJY29uPSJObVBvaW50ZXJQb3NpdGlvbiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjkiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1NZWFzdXJlIiBBbGlhcz0i5qih5Z6L5bC65a+45rWL6YePIiBJY29uPSJObU1lYXN1cmUiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnREaXNwbGF5IiBBbGlhcz0i5pi+56S6Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjMiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTm1TaG93IiBBbGlhcz0i5pi+56S6IiBJY29uPSJObVNob3ciIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTI0IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik5tUHJpbnRQcmV2aWV3IiBBbGlhcz0i5omT5Y2w6aKE6KeIIiBJY29uPSJObVByaW50UHJldmlldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjUiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1QcmludCIgQWxpYXM9IuaJk+WNsCIgSWNvbj0iTm1QcmludCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3ciIEFsaWFzPSLnqpflj6PmmL7npLoiICBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwwIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0i5qih5Z6L56qX5Y+jIiBJY29uPSJWaXNpYmxlTW9kZWxzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDAiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0i5Y+C5pWw56qX5Y+jIiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0i5Z+656GA5L+h5oGvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZU5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMyIgQm91bmRzPSIwLDIiIE5hbWU9IlZpc2libGVBbmFsRGlmZiIgQWxpYXM9IkRJRkbmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTA0IiBCb3VuZHM9IjEsMiIgTmFtZT0iVmlzaWJsZUFuYWxQc2V1IiBBbGlhcz0i5ouf5Y6L5Yqb5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJObURlYnVnIiBBbGlhcz0i5qGG5p625rWL6K+VKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSI1OTk5IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik5tRGVidWciIEFsaWFzPSLmoYbmnrbku6PnoIHosIPor5UiIEljb249IlByZXBhcmVHcmlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjQiIE5hbWU9Ik1pbmlGcmFjIiBBbGlhcz0i5bCP5Z6L5Y6L6KOCKEYpKERlYnVnKSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IuWIhuaekOeuoeeQhiI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA2IiBCb3VuZHM9IjAsMCIgTmFtZT0iQW5hbE5ldyIgQWxpYXM9IuaWsOW7uuWIhuaekCIgSWNvbj0iSm9iTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNyIgQm91bmRzPSIxLDAiIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0i5YiG5p6Q566h55CGIiBJY29uPSJKb2JFZGl0IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJQQSIgQWxpYXM9IuWOi+mZjeWIhuaekCI+DQogICAgICAgICAgICA8Q21kIElEPSI0MDAyIiBCb3VuZHM9IjAsMCwzLDEiIE5hbWU9Ik1pbmlGckFuYWxQQSIgQWxpYXM9IuWOi+mZjeWHhuWkhyIgRXh0SW5mbz0iUEYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwMyIgQm91bmRzPSIwLDEsMywxIiBOYW1lPSJNaW5pRnJQQSIgQWxpYXM9IuWOi+mZjeWIhuaekCIgSWNvbj0iRmxvd1BlcmlvZCIgLz4NCg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwNCIgQm91bmRzPSIwLDIsMywxIiBOYW1lPSJDYWxTdWRkZW5TdG9wUCIgQWxpYXM9IueerOaXtuWBnOazteWOi+WKmyIgSWNvbj0iUnVuRXgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MDA1IiBCb3VuZHM9IjAsMyIgTmFtZT0iQ2FsR0Z1bmN0aW9uIiBBbGlhcz0iR+WHveaVsCIgSWNvbj0iUnVuT3RoZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MDA2IiBCb3VuZHM9IjEsMyIgTmFtZT0iQ2FsU3FydFQiIEFsaWFzPSLml7bpl7TlubPmlrnmoLkiIEljb249IlJ1bk90aGVyIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwNyIgQm91bmRzPSIyLDMiIE5hbWU9IkNhbExvZ0xvZyIgQWxpYXM9IuWPjOWvueaVsCIgSWNvbj0iUnVuT3RoZXIiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRkEiIEFsaWFzPSLmjpLph4/liIbmnpAiPg0KICAgICAgICAgICAgPENtZCBJRD0iNDEwMiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJNaW5pRnJBbmFsRkEiIEFsaWFzPSLmjpLph4/lh4blpIciIEV4dEluZm89IklQUiIgSWNvbj0iTWluaUZyQW5hbEZBIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDEwMyIgQm91bmRzPSIwLDEiIE5hbWU9Ik1pbmlGckZBVXAiIEFsaWFzPSLpmLbmoq/ljYciIEljb249IlN0ZXBVcCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjQxMDQiIEJvdW5kcz0iMSwxIiBOYW1lPSJNaW5pRnJGQURvd24iIEFsaWFzPSLpmLbmoq/pmY0iIEljb249IlN0ZXBEb3duIiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSLmiJDmnpznrqHnkIYiICBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDgiIEJvdW5kcz0iMCwwIiBOYW1lPSJSc3RMb2FkIiBBbGlhcz0i5Yqg6L295oiQ5p6cIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDkiIEJvdW5kcz0iMSwwIiBOYW1lPSJSc3RTYXZlIiBUeXBlPSIxIiBFeHROYW1lcz0iUnN0U2F2ZUN1cjtSc3RTYXZlQWxsIiBFeHRJbmZvPSLkv53lrZjlvZPliY3miJDmnpw75L+d5a2Y5omA5pyJ5oiQ5p6cIiBBbGlhcz0i5L+d5a2Y5oiQ5p6cIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0i56qX5Y+j5pi+56S6IiAgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9IuaooeWei+eql+WPoyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IuWPguaVsOeql+WPoyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxCYXNpYyIgQWxpYXM9IuWfuuehgOS/oeaBryIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVOaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDMiIEJvdW5kcz0iMCwyIiBOYW1lPSJWaXNpYmxlQW5hbERpZmYiIEFsaWFzPSJESUZG5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IuaLn+WOi+WKm+aVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNDAxIiBOYW1lPSJXRFQiIEFsaWFzPSLkuqfog73or5XkupUoUCkiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQW5hbEVkaXQiIEFsaWFzPSLliIbmnpDnrqHnkIYiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNiIgQm91bmRzPSIwLDAiIE5hbWU9IkFuYWxOZXciIEFsaWFzPSLmlrDlu7rliIbmnpAiIEljb249IkpvYk5ldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDciIEJvdW5kcz0iMSwwIiBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IuWIhuaekOeuoeeQhiIgSWNvbj0iSm9iRWRpdCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSVBSIiBBbGlhcz0iSVBS5YWI5YmN5Y+C6ICDKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSI2MDAyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IklQUkFuYWwiIEFsaWFzPSJJUFLlh4blpIciIEV4dEluZm89IklQUiIgSWNvbj0iSVBSQW5hbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYwMDMiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iSVBSQ2FsIiBBbGlhcz0iSVBS6K6h566XIiBJY29uPSJJUFJDYWwiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldkdERhdGFQcmVwcm9jZXNzIiBBbGlhcz0i5pWw5o2u6aKE5aSE55CGIiBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYxMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iV2R0RGF0YUFzc24iIEFsaWFzPSLmlbDmja7lvZLkuIDljJYiIEV4dEluZm89IldEVCIgSWNvbj0iSVBSQW5hbCIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYxMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iV2R0T3RoZXIiIEFsaWFzPSLlhbblroMiIEljb249IldkdE90aGVyIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjEwMyIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJXZHRXTUYiIEFsaWFzPSLkupXnrZLlpJrnm7jmtYEiIEljb249IldkdFdNRiIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYxMDQiIEJvdW5kcz0iMCw0LDIsMSIgTmFtZT0iV2R0Q2hva2UiIEFsaWFzPSLlmLTmtYEiIEljb249IldkdENob2tlIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJJUFIiIEFsaWFzPSLkuqfog73liIbmnpAiPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJXZHRJUFJDYWwiIEV4dEluZm89IldEVCIgQWxpYXM9IuWCqOWxguS6p+iDveiuoeeulyIgSWNvbj0iSVBSQ2FsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJXZWxsUGR0eSIgQWxpYXM9IuS4gOS9k+WMluS6p+iDvSIgSWNvbj0iV2VsbFBkdHkiICBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwMyIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJXZHRJUFJFeHQiIEFsaWFzPSLkuqfog73or5XkupVb5omp5bGVXSIgSWNvbj0iSVBSRXh0Ii8+DQogICAgICAgICAgICA8Q21kIElEPSI2MjA0IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IldkdElQUkFuYWwiIEFsaWFzPSLlgqjlsYLkuqfog73liIbmnpAiIEljb249IklQUkFuYWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI2MjA1IiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9IldlbGxJbnRlZ0FuYWwiIEFsaWFzPSLnu7zlkIjliIbmnpAiIEljb249IldlbGxJbnRlZ0FuYWwiIFZpc2libGU9IjAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IklQUiIgQWxpYXM9IuS6p+iDveiuoeeulyI+DQogICAgICAgICAgICA8Q21kIElEPSI2MzAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IldkdENhbCIgQWxpYXM9IuiuoeeulyIgRXh0SW5mbz0iV0RUIiBJY29uPSJSdW5FeCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJKb2JzIiBBbGlhcz0i5oiQ5p6c566h55CGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDgiIEJvdW5kcz0iMCwwIiBOYW1lPSJSc3RMb2FkIiBBbGlhcz0i5Yqg6L295oiQ5p6cIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDkiIEJvdW5kcz0iMSwwIiBOYW1lPSJSc3RTYXZlIiBUeXBlPSIxIiBFeHROYW1lcz0iUnN0U2F2ZUN1cjtSc3RTYXZlQWxsIiBFeHRJbmZvPSLkv53lrZjlvZPliY3miJDmnpw75L+d5a2Y5omA5pyJ5oiQ5p6cIiBBbGlhcz0i5L+d5a2Y5oiQ5p6cIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0i56qX5Y+j5pi+56S6Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwwIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0i5qih5Z6L56qX5Y+jIiBJY29uPSJWaXNpYmxlTW9kZWxzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDAiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0i5Y+C5pWw56qX5Y+jIiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0i5Z+656GA5L+h5oGvIiBJY29uPSJJbnB1dEJhc2ljIiAgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVOaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDMiIEJvdW5kcz0iMCwyIiBOYW1lPSJWaXNpYmxlQW5hbERpZmYiIEFsaWFzPSJESUZG5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDQiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBzZXUiIEFsaWFzPSLmi5/ljovlipvmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNiIgTmFtZT0iQWR2YW5jZWRGdW5jdGlvbiIgQWxpYXM9IuivleS6leiuvuiuoShYKSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEZXNpZ24iIEFsaWFzPSLor5XkupXorr7orqEiPg0KICAgICAgICAgICAgPENtZCBJRD0iNjAwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJUZXN0RGVzaWduIiBBbGlhcz0i6K+V5LqV6K6+6K6hIiBJY29uPSJUZXN0RGVzaWduIiBFeHRJbmZvPSJQRiIgIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA0IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkFuYWxGbG93U2VnIiBBbGlhcz0i5rWB5Yqo5q615YiG5p6QIiBJY29uPSJGbG93UGVyaW9kIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNSIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJBbmFsT3RoZXJzIiBBbGlhcz0i54m55b6B5q615YiG5p6QIiBUeXBlPSIxIiBFeHROYW1lcz0iQ2hhcnRUO0NoYXJ0U3FydFQ7Q2hhcnQyNVQ7Q2hhcnQ1VCIgRXh0SW5mbz0iQ2hhcnQgVDtDaGFydCBTcXJ0KFQpO0NoYXJ0IDAuMjVUO0NoYXJ0IC0wLjVUIiBJY29uPSJBc3Npc0FuYWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA5IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkFuYWxEaXN0cmkiIEFsaWFzPSLliIbluIPlm74iIFR5cGU9IjEiIEV4dE5hbWVzPSJDaGFydERlbjtDaGFydFZpcyIgRXh0SW5mbz0i5rWT5bqm5YiG5biD5Zu+O+m7j+W6puWIhuW4g+WbviIgSWNvbj0iQW5hbERpc3RyaSIgLz4NCg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhRml0IiBBbGlhcz0i6Kej6YeK5ouf5ZCIIj4NCg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwNSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJEZWNvbnZvbHYiIEFsaWFzPSLlj43opLbnp68iIEljb249IkRlY29udm9sdiIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwMSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJGaXRNb2RlbCIgQWxpYXM9Iuino+aekOinoyIgSWNvbj0iRml0TW9kZWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTA0IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9Im5tRml0TW9kZWwiIEFsaWFzPSLmlbDlgLzop6MiIEljb249IkZpdE1vZGVsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwMiIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJBdXRvRml0IiBBbGlhcz0i6Ieq5Yqo5ouf5ZCIIiBJY29uPSJBdXRvRml0IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwMyIgQm91bmRzPSIwLDQsMiwxIiBOYW1lPSJQbGF0ZUZpdCIgQWxpYXM9IuaVj+aEn+aAp+WIhuaekCIgSWNvbj0iUGxhdGVGaXQiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQUlUZXN0IiBBbGlhcz0i5pm66IO96K+V5LqVKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIzOTAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik1vZGVsQ2xhc3NpZnkiIEFsaWFzPSLmqKHlnovor4bliKsiIEljb249Ik1vZGVsQ2xhc3NpZnkiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlJlbGF0aXZlVG9vbCIgQWxpYXM9IuebuOWFs+W3peWFtyIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMjAxIiBCb3VuZHM9IjAsMCIgTmFtZT0iVGltZSIgQWxpYXM9IuaXtumXtCIgSWNvbj0iVGltZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDIiIEJvdW5kcz0iMSwwIiBOYW1lPSJTaG93TW9kZWxDaGFydHMiIEFsaWFzPSLmqKHlnosiIEljb249IlNob3dNb2RlbENoYXJ0cyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDMiIEJvdW5kcz0iMCwxIiBOYW1lPSJTaG93TW9kZWxTa2V0Y2giIEFsaWFzPSLnkIborroiIEljb249IlNob3dNb2RlbFNrZXRjaCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDQiIEJvdW5kcz0iMSwxIiBOYW1lPSJTYXZlQXNNb2RlbFNrZXRjaCIgQWxpYXM9IuWtmOS4uuekuuaEjyIgSWNvbj0iU2F2ZUFzTW9kZWxTa2V0Y2giIC8+ICAgICAgICAgICAgDQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iVG9vbFMiIEFsaWFzPSLmianlsZXlip/og70iICBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9Ijk4MDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRmxvd1RvUyIgQWxpYXM9Iua1gemHj+WPmOihqOeariIgSWNvbj0iRmxvd1RvUyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkyMDEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTWl4VmlzY29zaXR5IiBBbGlhcz0i5re35ZCI6buP5bqmIiBJY29uPSJNaXhWaXNjb3NpdHkiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSm9icyIgQWxpYXM9IuaIkOaenOeuoeeQhiIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IuWKoOi9veaIkOaenCIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0i5L+d5a2Y5b2T5YmN5oiQ5p6cO+S/neWtmOaJgOacieaIkOaenCIgQWxpYXM9IuS/neWtmOaIkOaenCIgSWNvbj0iU2F2ZUpvYnMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9Iueql+WPo+aYvuekuiIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9IuaooeWei+eql+WPoyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IuWPguaVsOeql+WPoyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxCYXNpYyIgQWxpYXM9IuWfuuehgOS/oeaBryIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVOaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDMiIEJvdW5kcz0iMCwyIiBOYW1lPSJWaXNpYmxlQW5hbERpZmYiIEFsaWFzPSJESUZG5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IuaLn+WOi+WKm+aVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNyIgTmFtZT0iQWlUZXN0IiBBbGlhcz0i5pm66IO96K+V5LqVKEkpIj4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGVtbzEiIEFsaWFzPSLmoLfkvovoj5zljZUxIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTEiIEFsaWFzPSLkuLTml7bmtYvor5UxIiBJY29uPSJUT0RPMSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcwMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTIiIEFsaWFzPSLkuLTml7bmtYvor5UyIiBJY29uPSJUT0RPMiIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGVtbzIiIEFsaWFzPSLmoLfkvovoj5zljZUyIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcxMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTMiIEFsaWFzPSLkuLTml7bmtYvor5UzIiBJY29uPSJUT0RPMyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcxMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTQiIEFsaWFzPSLkuLTml7bmtYvor5U0IiBJY29uPSJUT0RPNCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGVtbzMiIEFsaWFzPSLmoLfkvovoj5zljZUzIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcyMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTQiIEFsaWFzPSLkuLTml7bmtYvor5U1IiBJY29uPSJUT0RPNSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcyMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTUiIEFsaWFzPSLkuLTml7bmtYvor5U2IiBJY29uPSJUT0RPNiIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTm1EZWJ1ZyIgQWxpYXM9Iuahhuaetua1i+ivlShEZWJ1ZykiPg0KICAgICAgICAgICAgPENtZCBJRD0iNzk5OSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObURlYnVnIiBBbGlhcz0i5qGG5p625Luj56CB6LCD6K+VIiBJY29uPSJQcmVwYXJlR3JpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KDQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjgiIE5hbWU9IlJlc3VsdCIgQWxpYXM9IuaIkOaenOeuoeeQhihSKSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJKb2JzIiBBbGlhcz0i5oiQ5p6c566h55CGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDgiIEJvdW5kcz0iMCwwIiBOYW1lPSJSc3RMb2FkIiBBbGlhcz0i5Yqg6L295oiQ5p6cIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDkiIEJvdW5kcz0iMSwwIiBOYW1lPSJSc3RTYXZlIiBUeXBlPSIxIiBFeHROYW1lcz0iUnN0U2F2ZUN1cjtSc3RTYXZlQWxsIiBFeHRJbmZvPSLkv53lrZjlvZPliY3miJDmnpw75L+d5a2Y5omA5pyJ5oiQ5p6cIiBBbGlhcz0i5L+d5a2Y5oiQ5p6cIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iUmVzQ29tcGFyZSIgQWxpYXM9IuaIkOaenOWvueavlCI+DQogICAgICAgICAgICA8Q21kIElEPSI4MDAzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IlJlc0NvbXBhcmUiIEFsaWFzPSLmiJDmnpzlr7nmr5QiIEljb249IlJlc0NvbXBhcmUiICAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJQcmludCIgQWxpYXM9IuaKpeWRiuaJk+WNsCI+DQogICAgICAgICAgICA8Q21kIElEPSI4MDAxIiBCb3VuZHM9IjAsMCIgTmFtZT0iUmVwb3J0Q29uZmlnIiBBbGlhcz0i5oql5ZGK6K6+572uIiBJY29uPSJyZXBvcnRDb25maWciICAvPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwNCIgQm91bmRzPSIxLDAiIE5hbWU9IlByaW50UHJldmlldyIgQWxpYXM9IuaKpeWRiumihOiniCIgSWNvbj0iUHJlUHJpbnQiICAvPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwMiIgQm91bmRzPSIwLDEiIE5hbWU9IlByaW50IiBBbGlhcz0i5omT5Y2wKOWQq1BERikiIEljb249IlByaW50IiAgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjgwMDUiIEJvdW5kcz0iMSwxIiBOYW1lPSJFeHBvcnRXb3JkIiBBbGlhcz0i5a+85Ye6KFdvcmQpIiBJY29uPSJXb3JkMTYiICAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3ciIEFsaWFzPSLnqpflj6PmmL7npLoiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IuWPguaVsOeql+WPoyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA0IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IlZpc2libGVQdHlzIiBBbGlhcz0i5bGe5oCn56qX5Y+jIiBJY29uPSJQcm9wZXJ0eVdpbmRvdyIgLz4NCg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI5IiBOYW1lPSJXaW5kb3ciIEFsaWFzPSLnqpflj6MoVykiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0i5Z+65pysIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iVmlzaWJsZVByb2pUcmVlRGEiIEFsaWFzPSLpobnnm67moJEiIEljb249IlByb2pUcmVlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwOCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJWaXNpYmxlUHJvalRyZWVKYiIgQWxpYXM9IuWIhuaekOagkSIgSWNvbj0iUHJvalRyZWUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA5IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IlZpc2libGVQcm9qVHJlZVJzIiBBbGlhcz0i5oiQ5p6c5qCRIiBJY29uPSJQcm9qVHJlZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwzIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0i5qih5Z6L56qX5Y+jIiBJY29uPSJWaXNpYmxlTW9kZWxzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDMiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0i5Y+C5pWw56qX5Y+jIiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDQiIEJvdW5kcz0iMCw0IiBOYW1lPSJWaXNpYmxlUHR5cyIgQWxpYXM9IuWxnuaAp+eql+WPoyIgSWNvbj0iUHJvcGVydHlXaW5kb3ciIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA1IiBCb3VuZHM9IjEsNCIgTmFtZT0iVmlzaWJsZUxvZ3MiIEFsaWFzPSLml6Xlv5fnqpflj6MiIEljb249IlZpc2libGVMb2dzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwNiIgQm91bmRzPSIwLDUiIE5hbWU9IlN0YWNrZWRQcm9qZWN0IiBBbGlhcz0i6aG555uu56qX5L2TIiBJY29uPSJTdGFja2VkUHJvamVjdCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDciIEJvdW5kcz0iMSw1IiBOYW1lPSJTdGFja2VkTWRpIiBBbGlhcz0i5YiG5p6Q56qX5L2TIiBJY29uPSJTdGFja2VkTWRpIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3dMYXlvdXQiIEFsaWFzPSLnqpflj6PluIPlsYAiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxMSIgQm91bmRzPSIwLDAiIE5hbWU9IldpbmRvd0xheW91dEgiIEljb25Pbmx5PSIxIiBUaXBzPSLmsLTlubPluIPlsYAiIEljb249IldpbmRvd0xheW91dEgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDEyIiBCb3VuZHM9IjEsMCIgTmFtZT0iV2luZG93TGF5b3V0ViIgSWNvbk9ubHk9IjEiIFRpcHM9IuerluebtOW4g+WxgCIgSWNvbj0iV2luZG93TGF5b3V0ViIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMTMiIEJvdW5kcz0iMCwxIiBOYW1lPSJXaW5kb3dMYXlvdXRUIiBJY29uT25seT0iMSIgVGlwcz0i5bmz6ZO65biD5bGAIiBJY29uPSJXaW5kb3dMYXlvdXRUIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxNCIgQm91bmRzPSIxLDEiIE5hbWU9IldpbmRvd0xheW91dEMiIEljb25Pbmx5PSIxIiBUaXBzPSLmipjlj6DluIPlsYAiIEljb249IldpbmRvd0xheW91dEMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkNsb3NlIiBBbGlhcz0i5YWz6ZetIj4gICAgICAgIA0KICAgICAgICAgICAgPENtZCBJRD0iOTAyMSIgQm91bmRzPSIwLDAiIE5hbWU9IkNsb3NlQ3VyV25kIiBBbGlhcz0i5YWz6Zet5b2T5YmNIiBJY29uPSJDbG9zZUFsbFdpbmRvdyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMjIiIEJvdW5kcz0iMSwwIiBOYW1lPSJDbG9zZUFsbFduZHMiIEFsaWFzPSLlhbPpl63miYDmnIkiIEljb249IkNsb3NlQWxsV2luZG93IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyMyIgQm91bmRzPSIwLDEiIE5hbWU9IlByZXZXbmQiIEFsaWFzPSLkuIrkuIDkuKoiIEljb25Pbmx5PSIxIiBJY29uPSJVcCIgVGlwcz0i5LiK5LiA5Liq56qX5L2TIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyNCIgQm91bmRzPSIxLDEiIE5hbWU9Ik5leHRXbmQiIEFsaWFzPSLkuIvkuIDkuKoiIEljb25Pbmx5PSIxIiBJY29uPSJEb3duIiBUaXBzPSLkuIvkuIDkuKrnqpfkvZMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDI1IiBCb3VuZHM9IjAsMiwyLDEiIFR5cGU9IjciIE5hbWU9Ikxpc3RXeFduZHMiIEFsaWFzPSLnqpfkvZMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjEwIiBOYW1lPSJIZWxwIiBBbGlhcz0i5biu5YqpKEgpIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTG9nVmlldyIgQWxpYXM9IuaXpeW/l+afpeeciyhMKSIgSWNvbj0iTG9nVmlldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAyIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwOCIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJVcGRhdGVMaXN0cyIgQWxpYXM9IuabtOaWsOWIl+ihqChJKSIgSWNvbj0iVXBkYXRlTGlzdHMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkxhbmciIEFsaWFzPSLor63oqIAiPg0KICAgICAgICAgICA8Q21kIElEPSIxMDAwOSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJMYW5nU3dhcCIgQWxpYXM9IuWIh+aNouivreiogCIgSWNvbj0iTGFuZ1N3YXAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFib3V0IiBBbGlhcz0i5YWz5LqOIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFib3V0IiBBbGlhcz0i5YWz5LqOKEEpIiBJY29uPSJXVEFJQWJvdXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNCIgQm91bmRzPSIxLDAiIE5hbWU9IkFib3V0UXQiIEFsaWFzPSLlhbPkuo5RdChRKSIgSWNvbj0iUXQiIFZpc2libGU9IjAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkxvZ2luIiBBbGlhcz0i55m75b2VKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNyIgQm91bmRzPSIwLDAiIE5hbWU9IlJlZ2lzdGVyIiBBbGlhcz0iKERlYnVnKei9r+S7tuazqOWGjChSKSIgSWNvbj0iUmVnaXN0ZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNSIgQm91bmRzPSIxLDAiIE5hbWU9IkxvZ2luIiBBbGlhcz0iKERlYnVnKeeUqOaIt+eZu+W9lShVKSIgSWNvbj0iTG9naW4iIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRlYnVnIiBBbGlhcz0i6LCD6K+VKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSIoRGVidWcpIFN1bSBQYXJhbWV0ZXJzIiBBbGlhcz0iKERlYnVnKeaxh+aAu+aooeWei+WPguaVsCIgSWNvbj0iU3VtUGFyYSIgLz4NCiAgICAgICA8L0dyb3VwPg0KICAgIDwvVGFiPg0KDQo8L1JpYmJvbj4NCg== \ No newline at end of file diff --git a/Bin/Config/Common/MenuDefines_Ribbon_en.dat b/Bin/Config/Common/MenuDefines_Ribbon_en.dat index 154151c..d5725ff 100644 --- a/Bin/Config/Common/MenuDefines_Ribbon_en.dat +++ b/Bin/Config/Common/MenuDefines_Ribbon_en.dat @@ -1 +1 @@ -77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSDnvJbovpHkvbwzy/nlKggWE1MU3B5IHYyMDA2IFUgKGh0dHA6Ly93d3cuYWx0b3ZhLmNvbSkg55SxIGFueSAoYW55KSAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tICAgIOacrOaWh+aho+eahOebrueahOaYr+W7uueri1dUQUnova/ku7bns7vnu5/nmoToj5zljZXlsYLmrKHlhbPns7so6ZKI5a+5UmliYm9u5qih5byPKSAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEF1dGhvcihzKTogd2FuZ3pnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI0MDcxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQoNCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tDQogICAgVGFiIOe6p+WIqw0KICAgICAgICBJRDogICAgICAgICAg5ZSv5LiA5qCH6K+GDQogICAgICAgIE5hbWXvvJogICAgICAg5ZCN56ew77yM6YCa5bi46Iux5paHDQogICAgICAgIEFsaWFz77yaICAgICAg5Yir5ZCN77yM6YCa5bi45Lit5paHDQogICAgICAgIEZpbGVNb2RlOiAgICDmmK/lkKbmlofku7ZNZW515qih5byP77yMMSBvciAwDQogICAgICAgIFZpc2libGXvvJogICAg5piv5ZCm5Y+v6KeB77yMMSBvciAwDQogICAgICAgIFRpcHPvvJogICAgICAg6L6F5Yqp6K+05piODQoNCiAgICAgICAgR3JvdXAg57qn5YirDQogICAgICAgICAgICBOYW1l77yaICAgICAgIOWQjeensO+8jOmAmuW4uOiLseaWhw0KICAgICAgICAgICAgQWxpYXPvvJogICAgICDliKvlkI3vvIzpgJrluLjkuK3mlocNCg0KICAgICAgICAgICAgQ21kIOe6p+WIqw0KICAgICAgICAgICAgICAgIElEOiAgICAgICAgICDllK/kuIDmoIfor4YNCiAgICAgICAgICAgICAgICBUeXBlOiAgICAgICAg5a+55bqU5o6n5Lu257G75Z6LOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw4oCU4oCU6buY6K6kQnV0dG9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDHigJTigJTluKbkuIvmi4noj5zljZVCdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMuKAlOKAlENvbWJvQm94DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDPigJTigJRDaGVja0JveA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA04oCU4oCUUmFkaW9CdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNeKAlOKAlFRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNuKAlOKAlExhYmVsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDfigJTigJRMaXN0V2lkZ2V0DQogICAgICAgICAgICAgICAgTmFtZe+8miAgICAgICDlkI3np7DvvIzpgJrluLjoi7HmlocNCiAgICAgICAgICAgICAgICBBbGlhc++8miAgICAgIOWIq+WQje+8jOmAmuW4uOS4reaWhw0KICAgICAgICAgICAgICAgIEljb27vvJogICAgICAg5Zu+5qCHDQogICAgICAgICAgICAgICAgU2hvcnRLZXnvvJogICDlv6vmjbfplK4NCiAgICAgICAgICAgICAgICBCb3VuZHM6ICAgICAg5L2N572u5L+h5oGv77yM5YWo5piv5pW05pWw77yM5ZyoR3JpZExheW91dOS4rQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwwLDEsMikgKDAsMCkg5YiG5Yir5Li6eHl3aA0KICAgICAgICAgICAgICAgIEV4dEluZm86ICAgICDmianlsZXkv6Hmga/vvIzlpoLmk43kvZzlr7nosaHnmoTooajlkI0s5LiL5ouJ6YCJ6aG5562JDQogICAgICAgICAgICAgICAgRXh0TmFtZXM6ICAgIOaJqeWxleS/oeaBr+WvueW6lOeahE5hbWXvvIzlpoLkuIvmi4lidXR0b27lr7nlupTnmoROYW1lDQogICAgICAgICAgICAgICAgVGlwc++8miAgICAgICDovoXliqnor7TmmI4NCi0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPFJpYmJvbj4NCg0KICAgIDxUYWIgSUQ9IjEiIE5hbWU9IlByb2pNYW5hZ2VyIiBBbGlhcz0iUHJvaiBNYW5hZ2VyIiBGaWxlTW9kZT0iMSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJQcm9qZWN0IiBBbGlhcz0iRmlsZSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwIiBOYW1lPSJBcHBIb21lIiBBbGlhcz0iIiBJY29uPSJBcHBIb21lMTI4IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iLTEiIE5hbWU9IlNlcGFyYXRvciIgQWxpYXM9IlNlcGFyYXRvciIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMSIgTmFtZT0iUHJvak5ldyIgQWxpYXM9Ik5ldyBwcm9qZWN0IiBTaG9ydEtleT0iQ3RybCtOIiBJY29uPSJOZXdQcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMiIgTmFtZT0iUHJvak9wZW4iIEFsaWFzPSJPcGVuIHByb2plY3QiIFNob3J0S2V5PSJDdHJsK08iIEljb249Ik9wZW5Qcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMyIgTmFtZT0iUHJvakNsb3NlIiBBbGlhcz0iQ2xvc2UgcHJvamVjdCIgSWNvbj0iQ2xvc2VQcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iLTEiIE5hbWU9IlNlcGFyYXRvciIgQWxpYXM9IlNlcGFyYXRvciIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwNSIgTmFtZT0iUHJvalNhdmUiIEFsaWFzPSJTYXZlIHByb2plY3QiIFNob3J0S2V5PSJDdHJsK1MiIEljb249IlNhdmVQcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwNiIgTmFtZT0iUHJvalNhdmVBcyIgQWxpYXM9IlNhdmUgcHJvamVjdCBhcyIgSWNvbj0iU2F2ZWFzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwNyIgTmFtZT0iUHJvakNvbmZpZyIgQWxpYXM9IlByb2plY3RJbmZvIiBJY29uPSJQcm9qSW5mbyIgLz4NCg0KICAgICAgICAgICAgPENtZCBJRD0iLTEiIE5hbWU9IlNlcGFyYXRvciIgQWxpYXM9IlNlcGFyYXRvciIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDIiIE5hbWU9IkhlbHAiIEFsaWFzPSJIZWxwIiBJY29uPSJIZWxwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDMiIE5hbWU9IkFib3V0IiBBbGlhcz0iQWJvdXQiIEljb249IldUQUlBYm91dCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDA4IiBOYW1lPSJVcGRhdGVMaXN0cyIgQWxpYXM9IlVwZGF0ZSBsaXN0cyIgSWNvbj0iVXBkYXRlTGlzdHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0iU2VwYXJhdG9yIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDEwIiBOYW1lPSJBcHBRdWl0IiBBbGlhcz0iUXVpdChYKSIgSWNvbj0iQ2xvc2UiIC8+DQogICAgICAgIDwvR3JvdXA+DQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSIwIiBOYW1lPSJXZWxDb21lIiBBbGlhcz0iU3RhcnQiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSJEYXRhIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwOTkiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iV2VsbE5ldyIgQWxpYXM9Ik5ldyB3ZWxsIiBJY29uPSJXZWxsTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhUmF0ZSIgQWxpYXM9IlJhdGUiIEV4dEluZm89IlBfREFUQV9HQVVHRV9GIiBJY29uPSJSYXRlRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDYiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iRGF0YVByZSIgQWxpYXM9IlByZXNzdXJlIiBFeHRJbmZvPSJQX0RBVEFfR0FVR0VfUCIgSWNvbj0iUHJlc3N1cmVEYXRhIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IkFuYWwiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsTmV3IiBBbGlhcz0iTmV3IGFuYWx5c2lzIiBJY29uPSJKb2JOZXciIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA3IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iTWFuYWdpbmciIEljb249IkpvYkVkaXQiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxCYXNpYyIgQWxpYXM9IkJhc2ljIGluZm8iIEljb249IklucHV0QmFzaWMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAyIiBCb3VuZHM9IjEsMSIgTmFtZT0iVmlzaWJsZUFuYWxQVlQiIEFsaWFzPSJQVlQgaW5mbyIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQW5hbHl0aWNhbCIgQWxpYXM9IkZsb3cgcGVyaW9kIGFuYWwiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsUEYiIEFsaWFzPSJQZXJpb2Qgc2VsZWN0IiBFeHRJbmZvPSJQRiIgSWNvbj0iUEYiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA0IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkFuYWxGbG93U2VnIiBBbGlhcz0iUGVyaW9kIGFuYWwiIEljb249IkZsb3dQZXJpb2QiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFuYWx5dGljYWwiIEFsaWFzPSJJbnRlcnByZXRhdGlvbiBGaXR0aW5nIj4NCg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwNSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJEZWNvbnZvbHYiIEFsaWFzPSJEZWNvbnZvbHV0aW9uIiBJY29uPSJEZWNvbnZvbHYiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkZpdE1vZGVsIiBBbGlhcz0iQW5hbHl0aWNhbCIgSWNvbj0iRml0TW9kZWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTA0IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9Im5tRml0TW9kZWwiIEFsaWFzPSJOdW1lcmljYWwiIEljb249IkZpdE1vZGVsIiAvPg0KDQogICAgICAgICAgICA8Q21kIElEPSIzMTAyIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkF1dG9GaXQiIEFsaWFzPSJGaXR0aW5nIiBJY29uPSJBdXRvRml0IiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9Ik51bWVyaWNhbCIgQWxpYXM9Ikdlb2xvZ2ljYWwgTW9kZWxpbmcoRGVidWcpIiBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUwMDIiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iUHJvcGVydHlMb2FkIiBBbGlhcz0iUHJvcGVydHkgSW1wb3J0IiBJY29uPSJQcmVwYXJlR3JpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iUnVuR3JpZCIgQWxpYXM9IkdyaWQgR2VuZXJhdGlvbiIgSWNvbj0iUGxhdGVGaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MjAxIiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IkFuYWxNYXAiIEFsaWFzPSJDYWxjdWxhdGlvbiIgSWNvbj0iUnVuRXgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MjAyIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkFuYWxQRiIgQWxpYXM9IkF1eGlsaWFyeSBGaXR0aW5nIiBFeHRJbmZvPSJQRiIgSWNvbj0iUnVuT3RoZXIiIFZpc2libGU9IjAiLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXZWxsTWFwIiBBbGlhcz0iV2VsbCBNYXAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwOCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsTWFwIiBBbGlhcz0iTWFwIiBJY29uPSJNYXAyRCIgVmlzaWJsZT0iMSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMTgiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEludGVyZmVyZSIgQWxpYXM9IkludGVyZmVyZW5jZSBTZXR0aW5nIiBJY29uPSJNYXAyRCIgVmlzaWJsZT0iMCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IERpc3BsYXkoRGVidWcpIiBWaXNpYmxlPSIwIiA+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9Ik1vZGVsIFdpbmRvdyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSJCYXNpYyBJbmZvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZUIERhdGEiIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRiBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJIZWxwIiBBbGlhcz0iSGVscCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwMiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJIZWxwIiBBbGlhcz0iSGVscCIgSWNvbj0iSGVscCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQoNCiAgICA8VGFiIElEPSIyIiBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IkRhdGEgTWFuYWdlciIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IldlbGwiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTA5OSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJXZWxsTmV3IiBBbGlhcz0iTmV3IFdlbGwoVykiIEljb249IldlbGxOZXciIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRhdGFNYW5hZ2VyIiBBbGlhcz0iQmFzaWMgRGF0YSI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkRhdGFXZWxsQmFzaWMiIEFsaWFzPSJXZWxsIEJhc2ljIERhdGEoQikiIEV4dEluZm89IkJfV0VMTCIgSWNvbj0iQmFzaWNEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhTGF5ZXIiIEFsaWFzPSJHZW9sb2dpY2FsIExheWVyIERhdGEoTCkiIEV4dEluZm89IkJfTEFZRVIiIEljb249IkxheWVyRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDMiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iRGF0YVJlcyIgQWxpYXM9IlJlc2Vydm9pciBEYXRhKFIpIiBFeHRJbmZvPSJQX0RBVEFfUkVTIiBJY29uPSJSZXNEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNCIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJEYXRhRmx1IiBBbGlhcz0iRmx1aWQgUHJvcGVydHkgRGF0YShGKSIgRXh0SW5mbz0iUF9EQVRBX0ZMVUlEIiBJY29uPSJGbHVpZFByb3BlcnR5IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IlByZXNzdXJlIFJhdGUiPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJEYXRhUmF0ZSIgQWxpYXM9IlJhdGUgRGF0YShRKSIgRXh0SW5mbz0iUF9EQVRBX0dBVUdFX0YiIEljb249IlJhdGVEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhUHJlIiBBbGlhcz0iUHJlc3N1cmUgRGF0YShQKSIgRXh0SW5mbz0iUF9EQVRBX0dBVUdFX1AiIEljb249IlByZXNzdXJlRGF0YSIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iR1g2IiBBbGlhcz0iUGxhdGZvcm0gSW50ZXJvcGVyYWJpbGl0eSI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA3IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ikd4NkNvbm5lY3RTZXJ2ZXIiIEFsaWFzPSJHWDYgSW50ZXJvcGVyYWJpbGl0eShDKSIgSWNvbj0iR3g2Q29ubmVjdFNlcnZlciIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDgiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iR3g2R2V0VGFza3MiIEFsaWFzPSJHZXQgVGFza3MoRCkiIEljb249Ikd4NkdldFRhc2tzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwOSIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJHeDZVcGRhdGVUYXNrcyIgQWxpYXM9IlVwZGF0ZSBTdGF0dXMoVSkiIEljb249Ikd4NlVwZGF0ZVRhc2tzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSIyMDEiIE5hbWU9IkRhdGFFZGl0IiBBbGlhcz0iRGF0YSBFZGl0IiA+DQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhRWRpdCIgQWxpYXM9IkRhdGEgRWRpdGluZyI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxGbHUiIEFsaWFzPSJSYXRlIEVkaXRpbmciIEV4dEluZm89IkYiIE1kaVR5cGU9IkRhdGFFZGl0IiBJY29uPSJSYXRlRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbFByZXNzIiBBbGlhcz0iUHJlc3N1cmUgRWRpdGluZyIgRXh0SW5mbz0iUCIgTWRpVHlwZT0iRGF0YUVkaXQiIEljb249IlByZXNzdXJlRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMzMDMiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iQW5hbFByZUNvbiIgQWxpYXM9IlByZXNzdXJlIENvbnZlcnNpb24iIEV4dEluZm89IlAiIE1kaVR5cGU9IkRhdGFFZGl0IiBJY29uPSJBbmFsUHJlQ29uIiAvPg0KICAgICAgICA8L0dyb3VwPg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iMyIgTmFtZT0iQW5hbHl0aWNhbFRlc3QiIEFsaWFzPSJJbnRlcnByZXRhdGlvbiIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IkFuYWx5c2lzIE1hbmFnZW1lbnQiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNiIgQm91bmRzPSIwLDAiIE5hbWU9IkFuYWxOZXciIEFsaWFzPSJOZXcgQW5hbHlzaXMiIEljb249IkpvYk5ldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDciIEJvdW5kcz0iMSwwIiBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IkFuYWx5c2lzIE1hbmFnZW1lbnQiIEljb249IkpvYkVkaXQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlNlZ0FuYWwiIEFsaWFzPSJGbG93IFBlcmlvZCBBbmFseXNpcyI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDAzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxQRiIgQWxpYXM9IkZsb3cgUGVyaW9kIFNlbGVjdGlvbiIgRXh0SW5mbz0iUEYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJBbmFsRmxvd1NlZyIgQWxpYXM9IkZsb3cgUGVyaW9kIEFuYWx5c2lzIiBJY29uPSJGbG93UGVyaW9kIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNSIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJBbmFsT3RoZXJzIiBBbGlhcz0iQ2hhcmFjdGVyaXN0aWMgTGluZSBBbmFseXNpcyIgVHlwZT0iMSIgIFZpc2libGU9IjAiIEV4dE5hbWVzPSJDaGFydFQ7Q2hhcnRTcXJ0VDtDaGFydDI1VDtDaGFydDVUIiBFeHRJbmZvPSJDaGFydCBUO0NoYXJ0IFNxcnQoVCk7Q2hhcnQgMC4yNVQ7Q2hhcnQgLTAuNVQiIEljb249IkFzc2lzQW5hbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMTAiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQW5hbFduZE0iIEFsaWFzPSJGbG93IFBlcmlvZCBXaW5kb3ciIFR5cGU9IjEiIEljb249IkFuYWxXbmRNIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwOSIgQm91bmRzPSIwLDQsMiwxIiBOYW1lPSJBbmFsRGlzdHJpIiBBbGlhcz0iRGlzdHJpYnV0aW9uIENoYXJ0IiBUeXBlPSIxIiBFeHROYW1lcz0iQ2hhcnREZW47Q2hhcnRWaXMiIEV4dEluZm89IkNvbmNlbnRyYXRpb24gRGlzdHJpYnV0aW9uO1Zpc2Nvc2l0eSBEaXN0cmlidXRpb24iIEljb249IkFuYWxEaXN0cmkiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRhdGFGaXQiIEFsaWFzPSJJbnRlcnByZXRhdGlvbiBGaXR0aW5nIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDUiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRGVjb252b2x2IiBBbGlhcz0iRGVjb252b2x1dGlvbihEZWJ1ZykiIEljb249IkRlY29udm9sdiIgLz4NCg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwMSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJGaXRNb2RlbCIgQWxpYXM9IkFuYWx5dGljYWwgU29sdXRpb24iIEljb249IkZpdE1vZGVsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwNCIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJubUZpdE1vZGVsIiBBbGlhcz0iTnVtZXJpY2FsIFNvbHV0aW9uIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDIiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQXV0b0ZpdCIgQWxpYXM9IkF1dG8gRml0dGluZyIgSWNvbj0iQXV0b0ZpdCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDMiIEJvdW5kcz0iMCw0LDIsMSIgTmFtZT0iUGxhdGVGaXQiIEFsaWFzPSJTZW5zaXRpdml0eSBBbmFseXNpcyIgSWNvbj0iUGxhdGVGaXQiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQUlUZXN0IiBBbGlhcz0iSW50ZWxsaWdlbnQgV2VsbCBUZXN0aW5nIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjM5MDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTW9kZWxDbGFzc2lmeSIgQWxpYXM9Ik1vZGVsIFJlY29nbml0aW9uIiBJY29uPSJNb2RlbENsYXNzaWZ5IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJSZWxhdGl2ZVRvb2wiIEFsaWFzPSJSZWxhdGVkIFRvb2xzIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iVGltZSIgQWxpYXM9IlRpbWUiIEljb249IlRpbWUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjAyIiBCb3VuZHM9IjAsMSIgTmFtZT0iU2hvd01vZGVsQ2hhcnRzIiBBbGlhcz0iTW9kZWwgU2NoZW1hdGljIiBJY29uPSJTaG93TW9kZWxDaGFydHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjA0IiBCb3VuZHM9IjEsMSIgTmFtZT0iU2F2ZUFzTW9kZWxTa2V0Y2giIEFsaWFzPSJTYXZlIEFzIFNjaGVtYXRpYyIgSWNvbj0iU2F2ZUFzTW9kZWxTa2V0Y2giIC8+DQoNCiAgICAgICA8L0dyb3VwPg0KDQo8IS0tICAgICAgICAgICAgICAgICAgICA8Q21kIElEPSIzMjAzIiBCb3VuZHM9IjAsMSIgTmFtZT0iU2hvd01vZGVsU2tldGNoIiBBbGlhcz0iVGhlb3J5IiBJY29uPSJTaG93TW9kZWxTa2V0Y2giIC8+PEdyb3VwIE5hbWU9IlRvb2xTIiBBbGlhcz0iRXh0ZW5kZWQgRnVuY3Rpb25zIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9Ijk4MDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRmxvd1RvUyIgQWxpYXM9IlJhdGUgdG8gU2tpbiBGYWN0b3IiIEljb249IkZsb3dUb1MiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MjAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik1peFZpc2Nvc2l0eSIgQWxpYXM9Ik1peGVkIFZpc2Nvc2l0eSIgSWNvbj0iTWl4VmlzY29zaXR5IiBWaXNpYmxlPSIwIiAvPg0KICAgICAgIDwvR3JvdXA+LS0+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IkxvYWQgUmVzdWx0cyIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0iU2F2ZSBDdXJyZW50IFJlc3VsdDtTYXZlIEFsbCBSZXN1bHRzIiBBbGlhcz0iU2F2ZSBSZXN1bHRzIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMTEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iVG9OdW1lcmljYWwiIEFsaWFzPSJUby1OdW1lcmljYWwiIEljb249IkxvYWRKb2JzIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3ciIEFsaWFzPSJXaW5kb3cgRGlzcGxheSI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9Ik1vZGVsIFdpbmRvdyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSJCYXNpYyBJbmZvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZUIERhdGEiIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRiBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNSIgTmFtZT0iTnVtZXJpY2FsVGVzdCIgQWxpYXM9Ik1vZGVsaW5nIiA+DQogICAgICAgIDxHcm91cCBOYW1lPSJObU1hbmFnZXIiIEFsaWFzPSJBbmFseXNpcyBNYW5hZ2VtZW50IiBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQW5hbE5ldyIgQWxpYXM9IlRlbXBvcmFyeSBUZXN0IDEiIEljb249IlByZXBhcmVHcmlkIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTAwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJQcm9wZXJ0eUxvYWQiIEFsaWFzPSJUZW1wb3JhcnkgVGVzdCAyIiBJY29uPSJQcmVwYXJlR3JpZCIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTm1BbmFsQ2hhbmdlIiBBbGlhcz0iQW5hbHlzaXMgU3dpdGNoIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMzAiIEJvdW5kcz0iMCwwIiBOYW1lPSJObUFuYWxDaGFuZ2UiIEFsaWFzPSJBbmFseXNpcyBTd2l0Y2giIEljb249IkpvYkVkaXQiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnRJbml0IiBBbGlhcz0iTW9kZWwgR2VvbWV0cmljIE9iamVjdHMiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTExOCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObU1hcCIgQWxpYXM9Ik1hcCIgSWNvbj0iTm1JbWFnZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTkiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1VbmxvY2tlZCIgQWxpYXM9IkxvY2siIEljb249Ik5tVW5sb2NrZWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTAyIiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9Ik5tSW1hZ2UiIEFsaWFzPSJSZXNlcnZvaXIgTWFwIiBJY29uPSJObUltYWdlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEyMCIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJObU1lYXN1cmUiIEFsaWFzPSJTY2FsZSBCYXIiIEljb249Ik5tTWVhc3VyZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDMiIEJvdW5kcz0iMCw0LDIsMSIgTmFtZT0iTm1Qb2x5Z29uIiBBbGlhcz0iUG9seWdvbiBCb3VuZGFyeSIgSWNvbj0iTm1Qb2x5Z29uIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNCIgQm91bmRzPSIwLDUiIE5hbWU9Ik5tUG9seWdvbiIgQWxpYXM9IlJlY3RhbmdsZSBCb3VuZGFyeSIgSWNvbj0iTm1SZWN0YW5nbGUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTA1IiBCb3VuZHM9IjEsNSIgTmFtZT0iTm1Qb2x5Z29uIiBBbGlhcz0iQ2lyY2xlIEJvdW5kYXJ5IiBJY29uPSJObVJvdW5kIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNiIgQm91bmRzPSIwLDYsMiwxIiBOYW1lPSJObUZhdWx0IiBBbGlhcz0iRmF1bHQiIEljb249Ik5tRmF1bHQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTA3IiBCb3VuZHM9IjAsNyIgTmFtZT0iTm1XZWxsIiBBbGlhcz0iU2VsZWN0IFdlbGwiIEljb249Ik5tV2VsbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDgiIEJvdW5kcz0iMSw3IiBOYW1lPSJObVdlbGwiIEFsaWFzPSJOZXcgV2VsbCIgSWNvbj0iTm1XZWxsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwOSIgQm91bmRzPSIwLDgsMiwxIiBOYW1lPSJObUZhdWx0IiBBbGlhcz0iRnJhY3R1cmUiIEljb249Ik5tRmF1bHQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTEwIiBCb3VuZHM9IjAsOSIgTmFtZT0iTm1MaW1pdCIgQWxpYXM9IlJlZ2lvbiIgSWNvbj0iTm1MaW1pdCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTEiIEJvdW5kcz0iMSw5IiBOYW1lPSJObVJlZ2lvbiIgQWxpYXM9Ik1hcmsgUmVnaW9uIiBJY29uPSJObVJlZ2lvbiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjEiIEJvdW5kcz0iMCwxMCwyLDEiIE5hbWU9Ik5tRGVsZXRlIiBBbGlhcz0iRGVsZXRlIiBJY29uPSJObURlbGV0ZSIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgPEdyb3VwIE5hbWU9Ik50UmVzZXJ2b2lyIiBBbGlhcz0iUmVzZXJ2b2lyIENoYXJhY3RlcmlzdGljcyI+CiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTIiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTm1HZW9tZXRyeSIgQWxpYXM9IkxheWVyIERpdmlzaW9uIiBJY29uPSJObUdlb21ldHJ5IiAvPgogICAgICAgICAgICA8Q21kIElEPSI1MTEzIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik5tUHJvcGVydGllcyIgQWxpYXM9IlJlc2Vydm9pciBQcm9wZXJ0aWVzIiBJY29uPSJObVByb3BlcnRpZXMiIC8+CiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjIiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1ERk4iIEFsaWFzPSJERk4iIEljb249Ik5tREZOIiAvPgogICAgICAgICAgICA8Q21kIElEPSI1MTI2IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9Ik5tSW50ZXJwb2xhdGlvbiIgQWxpYXM9IlByb3BlcnR5IEludGVycG9sYXRpb24iIEljb249Ik5tSW50ZXJwb2xhdGlvbiIgLz4KICAgICAgIDwvR3JvdXA+Cg0KICAgICAgIDxHcm91cCBOYW1lPSJOdE1vZGVsIiBBbGlhcz0iTW9kZWwgR2VuZXJhdGlvbiI+DQogICAgICAgICAgICAgPENtZCBJRD0iNTExNCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObUdyaWQiIEFsaWFzPSJHcmlkIEdlbmVyYXRpb24iIEljb249Ik5tR3JpZCIgLz4NCiAgICAgICAgICAgICA8Q21kIElEPSI1MTE1IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik5tQ2FjdWxhdGlvbiIgQWxpYXM9IkNhbGN1bGF0aW9uIFNvbHV0aW9uIiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgIDwhLS0NCiAgICAgICAgICAgICA8Q21kIElEPSI1MTE2IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9Ik5tQmFjayIgQWxpYXM9IlBvc3QgUHJvY2Vzc2luZyIgSWNvbj0iVGltZSIgLz4NCiAgICAgICAgICAgICA8Q21kIElEPSI1MTE3IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9Ik5tUmVzdWx0IiBBbGlhcz0iUmVzdWx0IiBJY29uPSJGbG93UGVyaW9kIiAvPg0KICAgICAgICAgICAgIC0tPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9Ik50VG9vbHMiIEFsaWFzPSJUb29scyI+DQogICAgICAgICAgICA8Q21kIElEPSI1MTI3IiBCb3VuZHM9IjAsMCIgTmFtZT0iTm1HZW9SZWZlcmVuY2UiIEFsaWFzPSJNb2RlbCBSZWZlcmVuY2UgUG9pbnQgU2V0dGluZyIgSWNvbj0iTm1HZW9SZWZlcmVuY2UiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTI4IiBCb3VuZHM9IjEsMCIgTmFtZT0iTm1Qb2ludGVyUG9zaXRpb24iIEFsaWFzPSJNb2RlbCBQb3NpdGlvbiBEaXNwbGF5IiBJY29uPSJObVBvaW50ZXJQb3NpdGlvbiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjkiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1NZWFzdXJlIiBBbGlhcz0iTW9kZWwgRGltZW5zaW9uIE1lYXN1cmVtZW50IiBJY29uPSJObU1lYXN1cmUiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnREaXNwbGF5IiBBbGlhcz0iRGlzcGxheSI+DQogICAgICAgICAgICA8Q21kIElEPSI1MTIzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik5tU2hvdyIgQWxpYXM9IkRpc3BsYXkiIEljb249Ik5tU2hvdyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjQiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1QcmludFByZXZpZXciIEFsaWFzPSJQcmludCBQcmV2aWV3IiBJY29uPSJObVByaW50UHJldmlldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjUiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1QcmludCIgQWxpYXM9IlByaW50IiBJY29uPSJObVByaW50IiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9IldpbmRvdyBEaXNwbGF5IiAgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9Ik1vZGVsIFdpbmRvdyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSJCYXNpYyBJbmZvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZUIERhdGEiIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRiBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJObURlYnVnIiBBbGlhcz0iRnJhbWV3b3JrIFRlc3QoRGVidWcpIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjU5OTkiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTm1EZWJ1ZyIgQWxpYXM9IkZyYW1ld29yayBDb2RlIERlYnVnZ2luZyIgSWNvbj0iUHJlcGFyZUdyaWQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNCIgTmFtZT0iTWluaUZyYWMiIEFsaWFzPSJNaW5pIEZyYWN0dXJpbmcoRGVidWcpIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iQW5hbHlzaXMgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA2IiBCb3VuZHM9IjAsMCIgTmFtZT0iQW5hbE5ldyIgQWxpYXM9Ik5ldyBBbmFseXNpcyIgSWNvbj0iSm9iTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNyIgQm91bmRzPSIxLDAiIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iQW5hbHlzaXMgTWFuYWdlbWVudCIgSWNvbj0iSm9iRWRpdCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iUEEiIEFsaWFzPSJQcmVzc3VyZSBEcm9wIEFuYWx5c2lzIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjQwMDIiIEJvdW5kcz0iMCwwLDMsMSIgTmFtZT0iTWluaUZyQW5hbFBBIiBBbGlhcz0iUHJlc3N1cmUgRHJvcCBQcmVwYXJhdGlvbiIgRXh0SW5mbz0iUEYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwMyIgQm91bmRzPSIwLDEsMywxIiBOYW1lPSJNaW5pRnJQQSIgQWxpYXM9IlByZXNzdXJlIERyb3AgQW5hbHlzaXMiIEljb249IkZsb3dQZXJpb2QiIC8+DQoNCiAgICAgICAgICAgIDxDbWQgSUQ9IjQwMDQiIEJvdW5kcz0iMCwyLDMsMSIgTmFtZT0iQ2FsU3VkZGVuU3RvcFAiIEFsaWFzPSJJbnN0YW50YW5lb3VzIFNodXQtaW4gUHJlc3N1cmUiIEljb249IlJ1bkV4IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwNSIgQm91bmRzPSIwLDMiIE5hbWU9IkNhbEdGdW5jdGlvbiIgQWxpYXM9IkcgRnVuY3Rpb24iIEljb249IlJ1bk90aGVyIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwNiIgQm91bmRzPSIxLDMiIE5hbWU9IkNhbFNxcnRUIiBBbGlhcz0iU3F1YXJlIFJvb3Qgb2YgVGltZSIgSWNvbj0iUnVuT3RoZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MDA3IiBCb3VuZHM9IjIsMyIgTmFtZT0iQ2FsTG9nTG9nIiBBbGlhcz0iTG9nLUxvZyBQbG90IiBJY29uPSJSdW5PdGhlciIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJGQSIgQWxpYXM9IkZsb3cgUmF0ZSBBbmFseXNpcyI+DQogICAgICAgICAgICA8Q21kIElEPSI0MTAyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik1pbmlGckFuYWxGQSIgQWxpYXM9IkZsb3cgUmF0ZSBQcmVwYXJhdGlvbiIgRXh0SW5mbz0iSVBSIiBJY29uPSJNaW5pRnJBbmFsRkEiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MTAzIiBCb3VuZHM9IjAsMSIgTmFtZT0iTWluaUZyRkFVcCIgQWxpYXM9IlN0ZXAgVXAiIEljb249IlN0ZXBVcCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjQxMDQiIEJvdW5kcz0iMSwxIiBOYW1lPSJNaW5pRnJGQURvd24iIEFsaWFzPSJTdGVwIERvd24iIEljb249IlN0ZXBEb3duIiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCIgIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwOCIgQm91bmRzPSIwLDAiIE5hbWU9IlJzdExvYWQiIEFsaWFzPSJMb2FkIFJlc3VsdHMiIEljb249IkxvYWRKb2JzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwOSIgQm91bmRzPSIxLDAiIE5hbWU9IlJzdFNhdmUiIFR5cGU9IjEiIEV4dE5hbWVzPSJSc3RTYXZlQ3VyO1JzdFNhdmVBbGwiIEV4dEluZm89IlNhdmUgQ3VycmVudCBSZXN1bHQ7U2F2ZSBBbGwgUmVzdWx0cyIgQWxpYXM9IlNhdmUgUmVzdWx0cyIgSWNvbj0iU2F2ZUpvYnMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9IldpbmRvdyBEaXNwbGF5IiAgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9Ik1vZGVsIFdpbmRvdyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSJCYXNpYyBJbmZvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZUIERhdGEiIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRiBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI0MDEiIE5hbWU9IklQUiIgQWxpYXM9IldlbGwgUHJvZCBUZXN0IiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iQW5hbHlzaXMgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA2IiBCb3VuZHM9IjAsMCIgTmFtZT0iQW5hbE5ldyIgQWxpYXM9Ik5ldyBBbmFseXNpcyIgSWNvbj0iSm9iTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNyIgQm91bmRzPSIxLDAiIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iQW5hbHlzaXMgTWFuYWdlbWVudCIgSWNvbj0iSm9iRWRpdCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSVBSIiBBbGlhcz0iSVBSIFByZXZpb3VzIFJlZmVyZW5jZShEZWJ1ZykiPg0KICAgICAgICAgICAgPENtZCBJRD0iNjAwMiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJJUFJBbmFsIiBBbGlhcz0iSVBSIFByZXBhcmF0aW9uIiBFeHRJbmZvPSJJUFIiIEljb249IklQUkFuYWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI2MDAzIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IklQUkNhbCIgQWxpYXM9IklQUiBDYWxjdWxhdGlvbiIgSWNvbj0iSVBSQ2FsIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXZHREYXRhUHJlcHJvY2VzcyIgQWxpYXM9IkRhdGEgUHJlcHJvY2Vzc2luZyIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI2MTAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IldkdERhdGFBc3NuIiBBbGlhcz0iRGF0YSBOb3JtYWxpemF0aW9uIiBFeHRJbmZvPSJJUFIiIEljb249IklQUkFuYWwiICBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8Q21kIElEPSI2MTAyIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IldkdE90aGVyIiBBbGlhcz0iT3RoZXJzIiBJY29uPSJXZHRPdGhlciIgVmlzaWJsZT0iMCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYxMDMiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iV2R0V01GIiBBbGlhcz0iV2VsbGJvcmUgTXVsdGlwaGFzZSBGbG93IiBJY29uPSJXZHRXTUYiICBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8Q21kIElEPSI2MTA0IiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9IldkdENob2tlIiBBbGlhcz0iQ2hva2UgRmxvdyIgSWNvbj0iV2R0Q2hva2UiICBWaXNpYmxlPSIwIi8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IklQUiIgQWxpYXM9IlByb2R1Y3Rpdml0eSBBbmFseXNpcyI+DQogICAgICAgICAgICA8Q21kIElEPSI2MjAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IldkdElQUkNhbCIgQWxpYXM9IlJlc2Vydm9pciBQcm9kdWN0aXZpdHkgQ2FsY3VsYXRpb24iIEljb249IklQUkNhbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYyMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iV2VsbFBkdHkiIEFsaWFzPSJJbnRlZ3JhdGVkIFByb2R1Y3Rpdml0eSIgSWNvbj0iV2VsbFBkdHkiICBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwMyIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJXZHRJUFJFeHQiIEFsaWFzPSJQcm9kdWN0aXZpdHkgV2VsbCBUZXN0W0V4dGVuZGVkXSIgSWNvbj0iSVBSRXh0Ii8+DQogICAgICAgICAgICA8Q21kIElEPSI2MjA0IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IldkdElQUkFuYWwiIEFsaWFzPSJSZXNlcnZvaXIgUHJvZHVjdGl2aXR5IEFuYWx5c2lzIiBJY29uPSJJUFJBbmFsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwNSIgQm91bmRzPSIwLDQsMiwxIiBOYW1lPSJXZWxsSW50ZWdBbmFsIiBBbGlhcz0iQ29tcHJlaGVuc2l2ZSBBbmFseXNpcyIgSWNvbj0iV2VsbEludGVnQW5hbCIgVmlzaWJsZT0iMCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSVBSIiBBbGlhcz0iUHJvZHVjdGl2aXR5IENhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYzMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iV2R0Q2FsIiBBbGlhcz0iQ2FsY3VsYXRpb24iIEljb249IlJ1bkV4IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IkxvYWQgUmVzdWx0cyIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0iU2F2ZSBDdXJyZW50IFJlc3VsdDtTYXZlIEFsbCBSZXN1bHRzIiBBbGlhcz0iU2F2ZSBSZXN1bHRzIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IERpc3BsYXkiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMiIgQm91bmRzPSIwLDAiIE5hbWU9IlZpc2libGVNb2RlbHMiIEFsaWFzPSJNb2RlbCBXaW5kb3ciIEljb249IlZpc2libGVNb2RlbHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAzIiBCb3VuZHM9IjEsMCIgTmFtZT0iVmlzaWJsZVBhcmFtZXRlcnMiIEFsaWFzPSJQYXJhbWV0ZXIgV2luZG93IiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0iQmFzaWMgSW5mbyIgSWNvbj0iSW5wdXRCYXNpYyIgICBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAyIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxQVlQiIEFsaWFzPSJQVlQgRGF0YSIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDMiIEJvdW5kcz0iMCwyIiBOYW1lPSJWaXNpYmxlQW5hbERpZmYiIEFsaWFzPSJESUZGIERhdGEiIEljb249IklucHV0Rmx1aWQiICAgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjYiIE5hbWU9IkFkdmFuY2VkRnVuY3Rpb24iIEFsaWFzPSJBZHZhbmNlZCIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEZXNpZ24iIEFsaWFzPSJXZWxsIFRlc3QgRGVzaWduIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iVGVzdERlc2lnbiIgQWxpYXM9IldlbGwgVGVzdCBEZXNpZ24iIEljb249IlRlc3REZXNpZ24iIEV4dEluZm89IlBGIiAgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDQiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEZsb3dTZWciIEFsaWFzPSJGbG93IFBlcmlvZCBBbmFseXNpcyIgSWNvbj0iRmxvd1BlcmlvZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDUiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iQW5hbE90aGVycyIgQWxpYXM9IkNoYXJhY3RlcmlzdGljIFNlZ21lbnQgQW5hbHlzaXMiIFR5cGU9IjEiIEV4dE5hbWVzPSJDaGFydFQ7Q2hhcnRTcXJ0VDtDaGFydDI1VDtDaGFydDVUIiBFeHRJbmZvPSJDaGFydCBUO0NoYXJ0IFNxcnQoVCk7Q2hhcnQgMC4yNVQ7Q2hhcnQgLTAuNVQiIEljb249IkFzc2lzQW5hbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDkiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQW5hbERpc3RyaSIgQWxpYXM9IkRpc3RyaWJ1dGlvbiBDaGFydCIgVHlwZT0iMSIgRXh0TmFtZXM9IkNoYXJ0RGVuO0NoYXJ0VmlzIiBFeHRJbmZvPSJDb25jZW50cmF0aW9uIERpc3RyaWJ1dGlvbjtWaXNjb3NpdHkgRGlzdHJpYnV0aW9uIiBJY29uPSJBbmFsRGlzdHJpIiAvPg0KDQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRhdGFGaXQiIEFsaWFzPSJJbnRlcnByZXRhdGlvbiBGaXR0aW5nIj4NCg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwNSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJEZWNvbnZvbHYiIEFsaWFzPSJEZWNvbnZvbHV0aW9uIiBJY29uPSJEZWNvbnZvbHYiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iRml0TW9kZWwiIEFsaWFzPSJBbmFseXRpY2FsIFNvbHV0aW9uIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDQiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0ibm1GaXRNb2RlbCIgQWxpYXM9Ik51bWVyaWNhbCBTb2x1dGlvbiIgSWNvbj0iRml0TW9kZWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAyIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkF1dG9GaXQiIEFsaWFzPSJBdXRvIEZpdHRpbmciIEljb249IkF1dG9GaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAzIiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9IlBsYXRlRml0IiBBbGlhcz0iU2Vuc2l0aXZpdHkgQW5hbHlzaXMiIEljb249IlBsYXRlRml0IiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFJVGVzdCIgQWxpYXM9IkludGVsbGlnZW50IFdlbGwgVGVzdChEZWJ1ZykiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzkwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJNb2RlbENsYXNzaWZ5IiBBbGlhcz0iTW9kZWwgUmVjb2duaXRpb24iIEljb249Ik1vZGVsQ2xhc3NpZnkiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlJlbGF0aXZlVG9vbCIgQWxpYXM9IlJlbGF0ZWQgVG9vbHMiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwMSIgQm91bmRzPSIwLDAiIE5hbWU9IlRpbWUiIEFsaWFzPSJUaW1lIiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwMiIgQm91bmRzPSIxLDAiIE5hbWU9IlNob3dNb2RlbENoYXJ0cyIgQWxpYXM9Ik1vZGVsIiBJY29uPSJTaG93TW9kZWxDaGFydHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjAzIiBCb3VuZHM9IjAsMSIgTmFtZT0iU2hvd01vZGVsU2tldGNoIiBBbGlhcz0iVGhlb3J5IiBJY29uPSJTaG93TW9kZWxTa2V0Y2giIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjA0IiBCb3VuZHM9IjEsMSIgTmFtZT0iU2F2ZUFzTW9kZWxTa2V0Y2giIEFsaWFzPSJTYXZlIEFzIFNjaGVtYXRpYyIgSWNvbj0iU2F2ZUFzTW9kZWxTa2V0Y2giIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iVG9vbFMiIEFsaWFzPSJFeHRlbmRlZCBGdW5jdGlvbnMiICBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9Ijk4MDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRmxvd1RvUyIgQWxpYXM9IlJhdGUgdG8gU2tpbiBGYWN0b3IiIEljb249IkZsb3dUb1MiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MjAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik1peFZpc2Nvc2l0eSIgQWxpYXM9Ik1peGVkIFZpc2Nvc2l0eSIgSWNvbj0iTWl4VmlzY29zaXR5IiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IkxvYWQgUmVzdWx0cyIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0iU2F2ZSBDdXJyZW50IFJlc3VsdDtTYXZlIEFsbCBSZXN1bHRzIiBBbGlhcz0iU2F2ZSBSZXN1bHRzIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IERpc3BsYXkiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMiIgQm91bmRzPSIwLDAiIE5hbWU9IlZpc2libGVNb2RlbHMiIEFsaWFzPSJNb2RlbCBXaW5kb3ciIEljb249IlZpc2libGVNb2RlbHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAzIiBCb3VuZHM9IjEsMCIgTmFtZT0iVmlzaWJsZVBhcmFtZXRlcnMiIEFsaWFzPSJQYXJhbWV0ZXIgV2luZG93IiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0iQmFzaWMgSW5mbyIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVCBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMyIgQm91bmRzPSIwLDIiIE5hbWU9IlZpc2libGVBbmFsRGlmZiIgQWxpYXM9IkRJRkYgRGF0YSIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDQiIEJvdW5kcz0iMSwyIiBOYW1lPSJWaXNpYmxlQW5hbFBzZXUiIEFsaWFzPSJQc2V1ZG8gUHJlc3N1cmUgRGF0YSIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNyIgTmFtZT0iU3lzVG9vbCIgQWxpYXM9IlN5c3RlbSBDb25maWd1cmF0aW9uIFRvb2xzKFQpIiBWaXNpYmxlPSIwIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlN5c1Rvb2wiIEFsaWFzPSJDb25maWd1cmF0aW9uIFRvb2xzIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcwMDEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iU3lzVG9vbHMiIEFsaWFzPSJTeXN0ZW0gQ29uZmlndXJhdGlvbiBUb29scyIgSWNvbj0iU3lzVG9vbHMiICAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJNb2RlbE1hbmFnZXIiIEFsaWFzPSJNb2RlbCBNYW5hZ2VtZW50Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcwMDIiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTW9kZWxTY2FuIiBBbGlhcz0iTW9kZWwgVmlldyIgSWNvbj0iTW9kZWxTY2FuIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI4IiBOYW1lPSJSZXN1bHQiIEFsaWFzPSJSZXN1bHRzIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IkxvYWQgUmVzdWx0cyIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0iU2F2ZSBDdXJyZW50IFJlc3VsdDtTYXZlIEFsbCBSZXN1bHRzIiBBbGlhcz0iU2F2ZSBSZXN1bHRzIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iUmVzQ29tcGFyZSIgQWxpYXM9IlJlc3VsdCBDb21wYXJpc29uIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjgwMDMiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iUmVzQ29tcGFyZSIgQWxpYXM9IlJlc3VsdCBDb21wYXJpc29uIiBJY29uPSJSZXNDb21wYXJlIiAgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iUHJpbnQiIEFsaWFzPSJSZXBvcnQgUHJpbnRpbmciPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwMSIgQm91bmRzPSIwLDAiIE5hbWU9IlJlcG9ydENvbmZpZyIgQWxpYXM9IlJlcG9ydCBTZXR0aW5ncyIgSWNvbj0icmVwb3J0Q29uZmlnIiAgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjgwMDQiIEJvdW5kcz0iMSwwIiBOYW1lPSJQcmludFByZXZpZXciIEFsaWFzPSJSZXBvcnQgUHJldmlldyIgSWNvbj0iUHJlUHJpbnQiICAvPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwMiIgQm91bmRzPSIwLDEiIE5hbWU9IlByaW50IiBBbGlhcz0iUHJpbnQoSW5jbHVkZSBQREYpIiBJY29uPSJQcmludCIgIC8+DQogICAgICAgICAgICA8Q21kIElEPSI4MDA1IiBCb3VuZHM9IjEsMSIgTmFtZT0iRXhwb3J0V29yZCIgQWxpYXM9IkV4cG9ydChXb3JkKSIgSWNvbj0iV29yZDE2IiAgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IERpc3BsYXkiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwNCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJWaXNpYmxlUHR5cyIgQWxpYXM9IlByb3BlcnR5IFdpbmRvdyIgSWNvbj0iUHJvcGVydHlXaW5kb3ciIC8+DQoNCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iOSIgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9IkJhc2ljIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iVmlzaWJsZVByb2pUcmVlRGEiIEFsaWFzPSJQcm9qZWN0IFRyZWUiIEljb249IlByb2pUcmVlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwOCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJWaXNpYmxlUHJvalRyZWVKYiIgQWxpYXM9IkFuYWx5c2lzIFRyZWUiIEljb249IlByb2pUcmVlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwOSIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJWaXNpYmxlUHJvalRyZWVScyIgQWxpYXM9IlJlc3VsdCBUcmVlIiBJY29uPSJQcm9qVHJlZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwzIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0iTW9kZWwgV2luZG93IiBJY29uPSJWaXNpYmxlTW9kZWxzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDMiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0iUGFyYW1ldGVyIFdpbmRvdyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA0IiBCb3VuZHM9IjAsNCIgTmFtZT0iVmlzaWJsZVB0eXMiIEFsaWFzPSJQcm9wZXJ0eSBXaW5kb3ciIEljb249IlByb3BlcnR5V2luZG93IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwNSIgQm91bmRzPSIxLDQiIE5hbWU9IlZpc2libGVMb2dzIiBBbGlhcz0iTG9nIFdpbmRvdyIgSWNvbj0iVmlzaWJsZUxvZ3MiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA2IiBCb3VuZHM9IjAsNSIgTmFtZT0iU3RhY2tlZFByb2plY3QiIEFsaWFzPSJQcm9qZWN0IFdpbmRvdyIgSWNvbj0iU3RhY2tlZFByb2plY3QiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA3IiBCb3VuZHM9IjEsNSIgTmFtZT0iU3RhY2tlZE1kaSIgQWxpYXM9IkFuYWx5c2lzIFdpbmRvdyIgSWNvbj0iU3RhY2tlZE1kaSIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93TGF5b3V0IiBBbGlhcz0iV2luZG93IExheW91dCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDExIiBCb3VuZHM9IjAsMCIgTmFtZT0iV2luZG93TGF5b3V0SCIgSWNvbk9ubHk9IjEiIFRpcHM9Ikhvcml6b250YWwgTGF5b3V0IiBJY29uPSJXaW5kb3dMYXlvdXRIIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxMiIgQm91bmRzPSIxLDAiIE5hbWU9IldpbmRvd0xheW91dFYiIEljb25Pbmx5PSIxIiBUaXBzPSJWZXJ0aWNhbCBMYXlvdXQiIEljb249IldpbmRvd0xheW91dFYiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDEzIiBCb3VuZHM9IjAsMSIgTmFtZT0iV2luZG93TGF5b3V0VCIgSWNvbk9ubHk9IjEiIFRpcHM9IlRpbGUgTGF5b3V0IiBJY29uPSJXaW5kb3dMYXlvdXRUIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxNCIgQm91bmRzPSIxLDEiIE5hbWU9IldpbmRvd0xheW91dEMiIEljb25Pbmx5PSIxIiBUaXBzPSJDb2xsYXBzZSBMYXlvdXQiIEljb249IldpbmRvd0xheW91dEMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkNsb3NlIiBBbGlhcz0iQ2xvc2UiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyMSIgQm91bmRzPSIwLDAiIE5hbWU9IkNsb3NlQ3VyV25kIiBBbGlhcz0iQ2xvc2UgQ3VycmVudCIgSWNvbj0iQ2xvc2VBbGxXaW5kb3ciIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDIyIiBCb3VuZHM9IjEsMCIgTmFtZT0iQ2xvc2VBbGxXbmRzIiBBbGlhcz0iQ2xvc2UgQWxsIiBJY29uPSJDbG9zZUFsbFdpbmRvdyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMjMiIEJvdW5kcz0iMCwxIiBOYW1lPSJQcmV2V25kIiBBbGlhcz0iUHJldmlvdXMiIEljb25Pbmx5PSIxIiBJY29uPSJVcCIgVGlwcz0iUHJldmlvdXMgV2luZG93IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyNCIgQm91bmRzPSIxLDEiIE5hbWU9Ik5leHRXbmQiIEFsaWFzPSJOZXh0IiBJY29uT25seT0iMSIgSWNvbj0iRG93biIgVGlwcz0iTmV4dCBXaW5kb3ciIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDI1IiBCb3VuZHM9IjAsMiwyLDEiIFR5cGU9IjciIE5hbWU9Ikxpc3RXeFduZHMiIEFsaWFzPSJXaW5kb3dzIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSIxMCIgTmFtZT0iSGVscCIgQWxpYXM9IkhlbHAiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSGVscCIgQWxpYXM9IkhlbHAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTG9nVmlldyIgQWxpYXM9IkxvZyBWaWV3KEwpIiBJY29uPSJMb2dWaWV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iSGVscCIgQWxpYXM9IkhlbHAoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwOCIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJVcGRhdGVMaXN0cyIgQWxpYXM9IlVwZGF0ZSBMaXN0cyhJKSIgSWNvbj0iVXBkYXRlTGlzdHMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkxhbmciIEFsaWFzPSJMYW5ndWFnZSI+DQogICAgICAgICAgIDxDbWQgSUQ9IjEwMDA5IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkxhbmdTd2FwIiBBbGlhcz0iU3dhcCBsYW5ndWFnZSIgSWNvbj0iTGFuZ1N3YXAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFib3V0IiBBbGlhcz0iQWJvdXQiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDMiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQWJvdXQiIEFsaWFzPSJBYm91dChBKSIgSWNvbj0iV1RBSUFib3V0IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDQiIEJvdW5kcz0iMSwwIiBOYW1lPSJBYm91dFF0IiBBbGlhcz0iQWJvdXQgUXQoUSkiIEljb249IlF0IiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJMb2dpbiIgQWxpYXM9IkxvZ2luKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNyIgQm91bmRzPSIwLDAiIE5hbWU9IlJlZ2lzdGVyIiBBbGlhcz0iKERlYnVnKVNvZnR3YXJlIFJlZ2lzdHJhdGlvbihSKSIgSWNvbj0iUmVnaXN0ZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNSIgQm91bmRzPSIxLDAiIE5hbWU9IkxvZ2luIiBBbGlhcz0iKERlYnVnKVVzZXIgTG9naW4oVSkiIEljb249IkxvZ2luIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEZWJ1ZyIgQWxpYXM9IkRlYnVnKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSIoRGVidWcpIFN1bSBQYXJhbWV0ZXJzIiBBbGlhcz0iKERlYnVnKVN1bW1hcml6ZSBNb2RlbCBQYXJhbWV0ZXJzIiBJY29uPSJTdW1QYXJhIiAvPg0KICAgICAgIDwvR3JvdXA+DQogICAgPC9UYWI+DQoNCjwvUmliYm9uPg0K \ No newline at end of file +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSDnvJbovpHkvbwzy/nlKggWE1MU3B5IHYyMDA2IFUgKGh0dHA6Ly93d3cuYWx0b3ZhLmNvbSkg55SxIGFueSAoYW55KSAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tICAgIOacrOaWh+aho+eahOebrueahOaYr+W7uueri1dUQUnova/ku7bns7vnu5/nmoToj5zljZXlsYLmrKHlhbPns7so6ZKI5a+5UmliYm9u5qih5byPKSAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEF1dGhvcihzKTogd2FuZ3pnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI0MDcxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQoNCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tDQogICAgVGFiIOe6p+WIqw0KICAgICAgICBJRDogICAgICAgICAg5ZSv5LiA5qCH6K+GDQogICAgICAgIE5hbWXvvJogICAgICAg5ZCN56ew77yM6YCa5bi46Iux5paHDQogICAgICAgIEFsaWFz77yaICAgICAg5Yir5ZCN77yM6YCa5bi45Lit5paHDQogICAgICAgIEZpbGVNb2RlOiAgICDmmK/lkKbmlofku7ZNZW515qih5byP77yMMSBvciAwDQogICAgICAgIFZpc2libGXvvJogICAg5piv5ZCm5Y+v6KeB77yMMSBvciAwDQogICAgICAgIFRpcHPvvJogICAgICAg6L6F5Yqp6K+05piODQoNCiAgICAgICAgR3JvdXAg57qn5YirDQogICAgICAgICAgICBOYW1l77yaICAgICAgIOWQjeensO+8jOmAmuW4uOiLseaWhw0KICAgICAgICAgICAgQWxpYXPvvJogICAgICDliKvlkI3vvIzpgJrluLjkuK3mlocNCg0KICAgICAgICAgICAgQ21kIOe6p+WIqw0KICAgICAgICAgICAgICAgIElEOiAgICAgICAgICDllK/kuIDmoIfor4YNCiAgICAgICAgICAgICAgICBUeXBlOiAgICAgICAg5a+55bqU5o6n5Lu257G75Z6LOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw4oCU4oCU6buY6K6kQnV0dG9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDHigJTigJTluKbkuIvmi4noj5zljZVCdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMuKAlOKAlENvbWJvQm94DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDPigJTigJRDaGVja0JveA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA04oCU4oCUUmFkaW9CdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNeKAlOKAlFRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNuKAlOKAlExhYmVsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDfigJTigJRMaXN0V2lkZ2V0DQogICAgICAgICAgICAgICAgTmFtZe+8miAgICAgICDlkI3np7DvvIzpgJrluLjoi7HmlocNCiAgICAgICAgICAgICAgICBBbGlhc++8miAgICAgIOWIq+WQje+8jOmAmuW4uOS4reaWhw0KICAgICAgICAgICAgICAgIEljb27vvJogICAgICAg5Zu+5qCHDQogICAgICAgICAgICAgICAgU2hvcnRLZXnvvJogICDlv6vmjbfplK4NCiAgICAgICAgICAgICAgICBCb3VuZHM6ICAgICAg5L2N572u5L+h5oGv77yM5YWo5piv5pW05pWw77yM5ZyoR3JpZExheW91dOS4rQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwwLDEsMikgKDAsMCkg5YiG5Yir5Li6eHl3aA0KICAgICAgICAgICAgICAgIEV4dEluZm86ICAgICDmianlsZXkv6Hmga/vvIzlpoLmk43kvZzlr7nosaHnmoTooajlkI0s5LiL5ouJ6YCJ6aG5562JDQogICAgICAgICAgICAgICAgRXh0TmFtZXM6ICAgIOaJqeWxleS/oeaBr+WvueW6lOeahE5hbWXvvIzlpoLkuIvmi4lidXR0b27lr7nlupTnmoROYW1lDQogICAgICAgICAgICAgICAgVGlwc++8miAgICAgICDovoXliqnor7TmmI4NCi0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPFJpYmJvbj4NCg0KICAgIDxUYWIgSUQ9IjEiIE5hbWU9IlByb2pNYW5hZ2VyIiBBbGlhcz0iUHJvaiBNYW5hZ2VyIiBGaWxlTW9kZT0iMSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJQcm9qZWN0IiBBbGlhcz0iRmlsZSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwIiBOYW1lPSJBcHBIb21lIiBBbGlhcz0iIiBJY29uPSJBcHBIb21lMTI4IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iLTEiIE5hbWU9IlNlcGFyYXRvciIgQWxpYXM9IlNlcGFyYXRvciIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMSIgTmFtZT0iUHJvak5ldyIgQWxpYXM9Ik5ldyBwcm9qZWN0IiBTaG9ydEtleT0iQ3RybCtOIiBJY29uPSJOZXdQcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMiIgTmFtZT0iUHJvak9wZW4iIEFsaWFzPSJPcGVuIHByb2plY3QiIFNob3J0S2V5PSJDdHJsK08iIEljb249Ik9wZW5Qcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMyIgTmFtZT0iUHJvakNsb3NlIiBBbGlhcz0iQ2xvc2UgcHJvamVjdCIgSWNvbj0iQ2xvc2VQcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iLTEiIE5hbWU9IlNlcGFyYXRvciIgQWxpYXM9IlNlcGFyYXRvciIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwNSIgTmFtZT0iUHJvalNhdmUiIEFsaWFzPSJTYXZlIHByb2plY3QiIFNob3J0S2V5PSJDdHJsK1MiIEljb249IlNhdmVQcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwNiIgTmFtZT0iUHJvalNhdmVBcyIgQWxpYXM9IlNhdmUgcHJvamVjdCBhcyIgSWNvbj0iU2F2ZWFzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwNyIgTmFtZT0iUHJvakNvbmZpZyIgQWxpYXM9IlByb2plY3RJbmZvIiBJY29uPSJQcm9qSW5mbyIgLz4NCg0KICAgICAgICAgICAgPENtZCBJRD0iLTEiIE5hbWU9IlNlcGFyYXRvciIgQWxpYXM9IlNlcGFyYXRvciIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDIiIE5hbWU9IkhlbHAiIEFsaWFzPSJIZWxwIiBJY29uPSJIZWxwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDMiIE5hbWU9IkFib3V0IiBBbGlhcz0iQWJvdXQiIEljb249IldUQUlBYm91dCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDA4IiBOYW1lPSJVcGRhdGVMaXN0cyIgQWxpYXM9IlVwZGF0ZSBsaXN0cyIgSWNvbj0iVXBkYXRlTGlzdHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0iU2VwYXJhdG9yIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDEwIiBOYW1lPSJBcHBRdWl0IiBBbGlhcz0iUXVpdChYKSIgSWNvbj0iQ2xvc2UiIC8+DQogICAgICAgIDwvR3JvdXA+DQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSIwIiBOYW1lPSJXZWxDb21lIiBBbGlhcz0iU3RhcnQiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSJEYXRhIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwOTkiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iV2VsbE5ldyIgQWxpYXM9Ik5ldyB3ZWxsIiBJY29uPSJXZWxsTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhUmF0ZSIgQWxpYXM9IlJhdGUiIEV4dEluZm89IlBfREFUQV9HQVVHRV9GIiBJY29uPSJSYXRlRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDYiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iRGF0YVByZSIgQWxpYXM9IlByZXNzdXJlIiBFeHRJbmZvPSJQX0RBVEFfR0FVR0VfUCIgSWNvbj0iUHJlc3N1cmVEYXRhIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IkFuYWwiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsTmV3IiBBbGlhcz0iTmV3IGFuYWx5c2lzIiBJY29uPSJKb2JOZXciIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA3IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iTWFuYWdpbmciIEljb249IkpvYkVkaXQiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxCYXNpYyIgQWxpYXM9IkJhc2ljIGluZm8iIEljb249IklucHV0QmFzaWMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAyIiBCb3VuZHM9IjEsMSIgTmFtZT0iVmlzaWJsZUFuYWxQVlQiIEFsaWFzPSJQVlQgaW5mbyIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQW5hbHl0aWNhbCIgQWxpYXM9IkZsb3cgcGVyaW9kIGFuYWwiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsUEYiIEFsaWFzPSJQZXJpb2Qgc2VsZWN0IiBFeHRJbmZvPSJQRiIgSWNvbj0iUEYiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA0IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkFuYWxGbG93U2VnIiBBbGlhcz0iUGVyaW9kIGFuYWwiIEljb249IkZsb3dQZXJpb2QiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFuYWx5dGljYWwiIEFsaWFzPSJJbnRlcnByZXRhdGlvbiBGaXR0aW5nIj4NCg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwNSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJEZWNvbnZvbHYiIEFsaWFzPSJEZWNvbnZvbHV0aW9uIiBJY29uPSJEZWNvbnZvbHYiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkZpdE1vZGVsIiBBbGlhcz0iQW5hbHl0aWNhbCIgSWNvbj0iRml0TW9kZWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTA0IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9Im5tRml0TW9kZWwiIEFsaWFzPSJOdW1lcmljYWwiIEljb249IkZpdE1vZGVsIiAvPg0KDQogICAgICAgICAgICA8Q21kIElEPSIzMTAyIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkF1dG9GaXQiIEFsaWFzPSJGaXR0aW5nIiBJY29uPSJBdXRvRml0IiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9Ik51bWVyaWNhbCIgQWxpYXM9Ikdlb2xvZ2ljYWwgTW9kZWxpbmcoRGVidWcpIiBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUwMDIiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iUHJvcGVydHlMb2FkIiBBbGlhcz0iUHJvcGVydHkgSW1wb3J0IiBJY29uPSJQcmVwYXJlR3JpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iUnVuR3JpZCIgQWxpYXM9IkdyaWQgR2VuZXJhdGlvbiIgSWNvbj0iUGxhdGVGaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MjAxIiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IkFuYWxNYXAiIEFsaWFzPSJDYWxjdWxhdGlvbiIgSWNvbj0iUnVuRXgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MjAyIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkFuYWxQRiIgQWxpYXM9IkF1eGlsaWFyeSBGaXR0aW5nIiBFeHRJbmZvPSJQRiIgSWNvbj0iUnVuT3RoZXIiIFZpc2libGU9IjAiLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXZWxsTWFwIiBBbGlhcz0iV2VsbCBNYXAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwOCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsTWFwIiBBbGlhcz0iTWFwIiBJY29uPSJNYXAyRCIgVmlzaWJsZT0iMSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMTgiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEludGVyZmVyZSIgQWxpYXM9IkludGVyZmVyZW5jZSBTZXR0aW5nIiBJY29uPSJNYXAyRCIgVmlzaWJsZT0iMCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IERpc3BsYXkoRGVidWcpIiBWaXNpYmxlPSIwIiA+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9Ik1vZGVsIFdpbmRvdyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSJCYXNpYyBJbmZvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZUIERhdGEiIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRiBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJIZWxwIiBBbGlhcz0iSGVscCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwMiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJIZWxwIiBBbGlhcz0iSGVscCIgSWNvbj0iSGVscCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQoNCiAgICA8VGFiIElEPSIyIiBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IkRhdGEgTWFuYWdlciIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IldlbGwiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTA5OSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJXZWxsTmV3IiBBbGlhcz0iTmV3IFdlbGwoVykiIEljb249IldlbGxOZXciIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRhdGFNYW5hZ2VyIiBBbGlhcz0iQmFzaWMgRGF0YSI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkRhdGFXZWxsQmFzaWMiIEFsaWFzPSJXZWxsIEJhc2ljIERhdGEoQikiIEV4dEluZm89IkJfV0VMTCIgSWNvbj0iQmFzaWNEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhTGF5ZXIiIEFsaWFzPSJHZW9sb2dpY2FsIExheWVyIERhdGEoTCkiIEV4dEluZm89IkJfTEFZRVIiIEljb249IkxheWVyRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDMiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iRGF0YVJlcyIgQWxpYXM9IlJlc2Vydm9pciBEYXRhKFIpIiBFeHRJbmZvPSJQX0RBVEFfUkVTIiBJY29uPSJSZXNEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNCIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJEYXRhRmx1IiBBbGlhcz0iRmx1aWQgUHJvcGVydHkgRGF0YShGKSIgRXh0SW5mbz0iUF9EQVRBX0ZMVUlEIiBJY29uPSJGbHVpZFByb3BlcnR5IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IlByZXNzdXJlIFJhdGUiPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJEYXRhUmF0ZSIgQWxpYXM9IlJhdGUgRGF0YShRKSIgRXh0SW5mbz0iUF9EQVRBX0dBVUdFX0YiIEljb249IlJhdGVEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhUHJlIiBBbGlhcz0iUHJlc3N1cmUgRGF0YShQKSIgRXh0SW5mbz0iUF9EQVRBX0dBVUdFX1AiIEljb249IlByZXNzdXJlRGF0YSIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iR1g2IiBBbGlhcz0iUGxhdGZvcm0gSW50ZXJvcGVyYWJpbGl0eSI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA3IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ikd4NkNvbm5lY3RTZXJ2ZXIiIEFsaWFzPSJHWDYgSW50ZXJvcGVyYWJpbGl0eShDKSIgSWNvbj0iR3g2Q29ubmVjdFNlcnZlciIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDgiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iR3g2R2V0VGFza3MiIEFsaWFzPSJHZXQgVGFza3MoRCkiIEljb249Ikd4NkdldFRhc2tzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwOSIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJHeDZVcGRhdGVUYXNrcyIgQWxpYXM9IlVwZGF0ZSBTdGF0dXMoVSkiIEljb249Ikd4NlVwZGF0ZVRhc2tzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSIyMDEiIE5hbWU9IkRhdGFFZGl0IiBBbGlhcz0iRGF0YSBFZGl0IiA+DQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhRWRpdCIgQWxpYXM9IkRhdGEgRWRpdGluZyI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxGbHUiIEFsaWFzPSJSYXRlIEVkaXRpbmciIEV4dEluZm89IkYiIE1kaVR5cGU9IkRhdGFFZGl0IiBJY29uPSJSYXRlRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbFByZXNzIiBBbGlhcz0iUHJlc3N1cmUgRWRpdGluZyIgRXh0SW5mbz0iUCIgTWRpVHlwZT0iRGF0YUVkaXQiIEljb249IlByZXNzdXJlRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMzMDMiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iQW5hbFByZUNvbiIgQWxpYXM9IlByZXNzdXJlIENvbnZlcnNpb24iIEV4dEluZm89IlAiIE1kaVR5cGU9IkRhdGFFZGl0IiBJY29uPSJBbmFsUHJlQ29uIiAvPg0KICAgICAgICA8L0dyb3VwPg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iMyIgTmFtZT0iQW5hbHl0aWNhbFRlc3QiIEFsaWFzPSJJbnRlcnByZXRhdGlvbiIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IkFuYWx5c2lzIE1hbmFnZW1lbnQiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNiIgQm91bmRzPSIwLDAiIE5hbWU9IkFuYWxOZXciIEFsaWFzPSJOZXcgQW5hbHlzaXMiIEljb249IkpvYk5ldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDciIEJvdW5kcz0iMSwwIiBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IkFuYWx5c2lzIE1hbmFnZW1lbnQiIEljb249IkpvYkVkaXQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlNlZ0FuYWwiIEFsaWFzPSJGbG93IFBlcmlvZCBBbmFseXNpcyI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDAzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxQRiIgQWxpYXM9IkZsb3cgUGVyaW9kIFNlbGVjdGlvbiIgRXh0SW5mbz0iUEYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJBbmFsRmxvd1NlZyIgQWxpYXM9IkZsb3cgUGVyaW9kIEFuYWx5c2lzIiBJY29uPSJGbG93UGVyaW9kIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNSIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJBbmFsT3RoZXJzIiBBbGlhcz0iQ2hhcmFjdGVyaXN0aWMgTGluZSBBbmFseXNpcyIgVHlwZT0iMSIgIFZpc2libGU9IjAiIEV4dE5hbWVzPSJDaGFydFQ7Q2hhcnRTcXJ0VDtDaGFydDI1VDtDaGFydDVUIiBFeHRJbmZvPSJDaGFydCBUO0NoYXJ0IFNxcnQoVCk7Q2hhcnQgMC4yNVQ7Q2hhcnQgLTAuNVQiIEljb249IkFzc2lzQW5hbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMTAiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQW5hbFduZE0iIEFsaWFzPSJGbG93IFBlcmlvZCBXaW5kb3ciIFR5cGU9IjEiIEljb249IkFuYWxXbmRNIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwOSIgQm91bmRzPSIwLDQsMiwxIiBOYW1lPSJBbmFsRGlzdHJpIiBBbGlhcz0iRGlzdHJpYnV0aW9uIENoYXJ0IiBUeXBlPSIxIiBFeHROYW1lcz0iQ2hhcnREZW47Q2hhcnRWaXMiIEV4dEluZm89IkNvbmNlbnRyYXRpb24gRGlzdHJpYnV0aW9uO1Zpc2Nvc2l0eSBEaXN0cmlidXRpb24iIEljb249IkFuYWxEaXN0cmkiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRhdGFGaXQiIEFsaWFzPSJJbnRlcnByZXRhdGlvbiBGaXR0aW5nIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDUiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRGVjb252b2x2IiBBbGlhcz0iRGVjb252b2x1dGlvbihEZWJ1ZykiIEljb249IkRlY29udm9sdiIgLz4NCg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwMSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJGaXRNb2RlbCIgQWxpYXM9IkFuYWx5dGljYWwgU29sdXRpb24iIEljb249IkZpdE1vZGVsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwNCIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJubUZpdE1vZGVsIiBBbGlhcz0iTnVtZXJpY2FsIFNvbHV0aW9uIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDIiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQXV0b0ZpdCIgQWxpYXM9IkF1dG8gRml0dGluZyIgSWNvbj0iQXV0b0ZpdCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDMiIEJvdW5kcz0iMCw0LDIsMSIgTmFtZT0iUGxhdGVGaXQiIEFsaWFzPSJTZW5zaXRpdml0eSBBbmFseXNpcyIgSWNvbj0iUGxhdGVGaXQiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQUlUZXN0IiBBbGlhcz0iSW50ZWxsaWdlbnQgV2VsbCBUZXN0aW5nIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjM5MDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTW9kZWxDbGFzc2lmeSIgQWxpYXM9Ik1vZGVsIFJlY29nbml0aW9uIiBJY29uPSJNb2RlbENsYXNzaWZ5IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJSZWxhdGl2ZVRvb2wiIEFsaWFzPSJSZWxhdGVkIFRvb2xzIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iVGltZSIgQWxpYXM9IlRpbWUiIEljb249IlRpbWUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjAyIiBCb3VuZHM9IjAsMSIgTmFtZT0iU2hvd01vZGVsQ2hhcnRzIiBBbGlhcz0iTW9kZWwgU2NoZW1hdGljIiBJY29uPSJTaG93TW9kZWxDaGFydHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjA0IiBCb3VuZHM9IjEsMSIgTmFtZT0iU2F2ZUFzTW9kZWxTa2V0Y2giIEFsaWFzPSJTYXZlIEFzIFNjaGVtYXRpYyIgSWNvbj0iU2F2ZUFzTW9kZWxTa2V0Y2giIC8+DQoNCiAgICAgICA8L0dyb3VwPg0KDQo8IS0tICAgICAgICAgICAgICAgICAgICA8Q21kIElEPSIzMjAzIiBCb3VuZHM9IjAsMSIgTmFtZT0iU2hvd01vZGVsU2tldGNoIiBBbGlhcz0iVGhlb3J5IiBJY29uPSJTaG93TW9kZWxTa2V0Y2giIC8+PEdyb3VwIE5hbWU9IlRvb2xTIiBBbGlhcz0iRXh0ZW5kZWQgRnVuY3Rpb25zIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9Ijk4MDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRmxvd1RvUyIgQWxpYXM9IlJhdGUgdG8gU2tpbiBGYWN0b3IiIEljb249IkZsb3dUb1MiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MjAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik1peFZpc2Nvc2l0eSIgQWxpYXM9Ik1peGVkIFZpc2Nvc2l0eSIgSWNvbj0iTWl4VmlzY29zaXR5IiBWaXNpYmxlPSIwIiAvPg0KICAgICAgIDwvR3JvdXA+LS0+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IkxvYWQgUmVzdWx0cyIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0iU2F2ZSBDdXJyZW50IFJlc3VsdDtTYXZlIEFsbCBSZXN1bHRzIiBBbGlhcz0iU2F2ZSBSZXN1bHRzIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMTEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iVG9OdW1lcmljYWwiIEFsaWFzPSJUby1OdW1lcmljYWwiIEljb249IkxvYWRKb2JzIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3ciIEFsaWFzPSJXaW5kb3cgRGlzcGxheSI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9Ik1vZGVsIFdpbmRvdyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSJCYXNpYyBJbmZvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZUIERhdGEiIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRiBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNSIgTmFtZT0iTnVtZXJpY2FsVGVzdCIgQWxpYXM9Ik1vZGVsaW5nIiA+DQogICAgICAgIDxHcm91cCBOYW1lPSJObU1hbmFnZXIiIEFsaWFzPSJBbmFseXNpcyBNYW5hZ2VtZW50IiBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQW5hbE5ldyIgQWxpYXM9IlRlbXBvcmFyeSBUZXN0IDEiIEljb249IlByZXBhcmVHcmlkIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTAwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJQcm9wZXJ0eUxvYWQiIEFsaWFzPSJUZW1wb3JhcnkgVGVzdCAyIiBJY29uPSJQcmVwYXJlR3JpZCIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTm1BbmFsQ2hhbmdlIiBBbGlhcz0iQW5hbHlzaXMgU3dpdGNoIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMzAiIEJvdW5kcz0iMCwwIiBOYW1lPSJObUFuYWxDaGFuZ2UiIEFsaWFzPSJBbmFseXNpcyBTd2l0Y2giIEljb249IkpvYkVkaXQiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnRJbml0IiBBbGlhcz0iTW9kZWwgR2VvbWV0cmljIE9iamVjdHMiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTExOCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObU1hcCIgQWxpYXM9Ik1hcCIgSWNvbj0iTm1JbWFnZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTkiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1VbmxvY2tlZCIgQWxpYXM9IkxvY2siIEljb249Ik5tVW5sb2NrZWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTAyIiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9Ik5tSW1hZ2UiIEFsaWFzPSJSZXNlcnZvaXIgTWFwIiBJY29uPSJObUltYWdlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEyMCIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJObU1lYXN1cmUiIEFsaWFzPSJTY2FsZSBCYXIiIEljb249Ik5tTWVhc3VyZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDMiIEJvdW5kcz0iMCw0LDIsMSIgTmFtZT0iTm1Qb2x5Z29uIiBBbGlhcz0iUG9seWdvbiBCb3VuZGFyeSIgSWNvbj0iTm1Qb2x5Z29uIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNCIgQm91bmRzPSIwLDUiIE5hbWU9Ik5tUG9seWdvbiIgQWxpYXM9IlJlY3RhbmdsZSBCb3VuZGFyeSIgSWNvbj0iTm1SZWN0YW5nbGUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTA1IiBCb3VuZHM9IjEsNSIgTmFtZT0iTm1Qb2x5Z29uIiBBbGlhcz0iQ2lyY2xlIEJvdW5kYXJ5IiBJY29uPSJObVJvdW5kIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNiIgQm91bmRzPSIwLDYsMiwxIiBOYW1lPSJObUZhdWx0IiBBbGlhcz0iRmF1bHQiIEljb249Ik5tRmF1bHQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTA3IiBCb3VuZHM9IjAsNyIgTmFtZT0iTm1XZWxsIiBBbGlhcz0iU2VsZWN0IFdlbGwiIEljb249Ik5tV2VsbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDgiIEJvdW5kcz0iMSw3IiBOYW1lPSJObVdlbGwiIEFsaWFzPSJOZXcgV2VsbCIgSWNvbj0iTm1XZWxsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwOSIgQm91bmRzPSIwLDgsMiwxIiBOYW1lPSJObUZhdWx0IiBBbGlhcz0iRnJhY3R1cmUiIEljb249Ik5tRmF1bHQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTEwIiBCb3VuZHM9IjAsOSIgTmFtZT0iTm1MaW1pdCIgQWxpYXM9IlJlZ2lvbiIgSWNvbj0iTm1MaW1pdCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTEiIEJvdW5kcz0iMSw5IiBOYW1lPSJObVJlZ2lvbiIgQWxpYXM9Ik1hcmsgUmVnaW9uIiBJY29uPSJObVJlZ2lvbiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjEiIEJvdW5kcz0iMCwxMCwyLDEiIE5hbWU9Ik5tRGVsZXRlIiBBbGlhcz0iRGVsZXRlIiBJY29uPSJObURlbGV0ZSIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgPEdyb3VwIE5hbWU9Ik50UmVzZXJ2b2lyIiBBbGlhcz0iUmVzZXJ2b2lyIENoYXJhY3RlcmlzdGljcyI+DQogICAgICAgICAgICA8Q21kIElEPSI1MTEyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik5tR2VvbWV0cnkiIEFsaWFzPSJMYXllciBEaXZpc2lvbiIgSWNvbj0iTm1HZW9tZXRyeSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTMiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1Qcm9wZXJ0aWVzIiBBbGlhcz0iUmVzZXJ2b2lyIFByb3BlcnRpZXMiIEljb249Ik5tUHJvcGVydGllcyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjIiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1ERk4iIEFsaWFzPSJERk4iIEljb249Ik5tREZOIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEyNiIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJObUludGVycG9sYXRpb24iIEFsaWFzPSJQcm9wZXJ0eSBJbnRlcnBvbGF0aW9uIiBJY29uPSJObUludGVycG9sYXRpb24iIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgIDxHcm91cCBOYW1lPSJOdE1vZGVsIiBBbGlhcz0iTW9kZWwgR2VuZXJhdGlvbiI+DQogICAgICAgICAgICAgPENtZCBJRD0iNTExNCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObUdyaWQiIEFsaWFzPSJHcmlkIEdlbmVyYXRpb24iIEljb249Ik5tR3JpZCIgLz4NCiAgICAgICAgICAgICA8Q21kIElEPSI1MTE1IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik5tQ2FjdWxhdGlvbiIgQWxpYXM9IkNhbGN1bGF0aW9uIFNvbHV0aW9uIiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgIDwhLS0NCiAgICAgICAgICAgICA8Q21kIElEPSI1MTE2IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9Ik5tQmFjayIgQWxpYXM9IlBvc3QgUHJvY2Vzc2luZyIgSWNvbj0iVGltZSIgLz4NCiAgICAgICAgICAgICA8Q21kIElEPSI1MTE3IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9Ik5tUmVzdWx0IiBBbGlhcz0iUmVzdWx0IiBJY29uPSJGbG93UGVyaW9kIiAvPg0KICAgICAgICAgICAgIC0tPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9Ik50VG9vbHMiIEFsaWFzPSJUb29scyI+DQogICAgICAgICAgICA8Q21kIElEPSI1MTI3IiBCb3VuZHM9IjAsMCIgTmFtZT0iTm1HZW9SZWZlcmVuY2UiIEFsaWFzPSJNb2RlbCBSZWZlcmVuY2UgUG9pbnQgU2V0dGluZyIgSWNvbj0iTm1HZW9SZWZlcmVuY2UiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTI4IiBCb3VuZHM9IjEsMCIgTmFtZT0iTm1Qb2ludGVyUG9zaXRpb24iIEFsaWFzPSJNb2RlbCBQb3NpdGlvbiBEaXNwbGF5IiBJY29uPSJObVBvaW50ZXJQb3NpdGlvbiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjkiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1NZWFzdXJlIiBBbGlhcz0iTW9kZWwgRGltZW5zaW9uIE1lYXN1cmVtZW50IiBJY29uPSJObU1lYXN1cmUiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnREaXNwbGF5IiBBbGlhcz0iRGlzcGxheSI+DQogICAgICAgICAgICA8Q21kIElEPSI1MTIzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik5tU2hvdyIgQWxpYXM9IkRpc3BsYXkiIEljb249Ik5tU2hvdyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjQiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1QcmludFByZXZpZXciIEFsaWFzPSJQcmludCBQcmV2aWV3IiBJY29uPSJObVByaW50UHJldmlldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjUiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1QcmludCIgQWxpYXM9IlByaW50IiBJY29uPSJObVByaW50IiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9IldpbmRvdyBEaXNwbGF5IiAgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9Ik1vZGVsIFdpbmRvdyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSJCYXNpYyBJbmZvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZUIERhdGEiIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRiBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJObURlYnVnIiBBbGlhcz0iRnJhbWV3b3JrIFRlc3QoRGVidWcpIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjU5OTkiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTm1EZWJ1ZyIgQWxpYXM9IkZyYW1ld29yayBDb2RlIERlYnVnZ2luZyIgSWNvbj0iUHJlcGFyZUdyaWQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNCIgTmFtZT0iTWluaUZyYWMiIEFsaWFzPSJNaW5pIEZyYWN0dXJpbmcoRGVidWcpIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iQW5hbHlzaXMgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA2IiBCb3VuZHM9IjAsMCIgTmFtZT0iQW5hbE5ldyIgQWxpYXM9Ik5ldyBBbmFseXNpcyIgSWNvbj0iSm9iTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNyIgQm91bmRzPSIxLDAiIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iQW5hbHlzaXMgTWFuYWdlbWVudCIgSWNvbj0iSm9iRWRpdCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iUEEiIEFsaWFzPSJQcmVzc3VyZSBEcm9wIEFuYWx5c2lzIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjQwMDIiIEJvdW5kcz0iMCwwLDMsMSIgTmFtZT0iTWluaUZyQW5hbFBBIiBBbGlhcz0iUHJlc3N1cmUgRHJvcCBQcmVwYXJhdGlvbiIgRXh0SW5mbz0iUEYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwMyIgQm91bmRzPSIwLDEsMywxIiBOYW1lPSJNaW5pRnJQQSIgQWxpYXM9IlByZXNzdXJlIERyb3AgQW5hbHlzaXMiIEljb249IkZsb3dQZXJpb2QiIC8+DQoNCiAgICAgICAgICAgIDxDbWQgSUQ9IjQwMDQiIEJvdW5kcz0iMCwyLDMsMSIgTmFtZT0iQ2FsU3VkZGVuU3RvcFAiIEFsaWFzPSJJbnN0YW50YW5lb3VzIFNodXQtaW4gUHJlc3N1cmUiIEljb249IlJ1bkV4IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwNSIgQm91bmRzPSIwLDMiIE5hbWU9IkNhbEdGdW5jdGlvbiIgQWxpYXM9IkcgRnVuY3Rpb24iIEljb249IlJ1bk90aGVyIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwNiIgQm91bmRzPSIxLDMiIE5hbWU9IkNhbFNxcnRUIiBBbGlhcz0iU3F1YXJlIFJvb3Qgb2YgVGltZSIgSWNvbj0iUnVuT3RoZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MDA3IiBCb3VuZHM9IjIsMyIgTmFtZT0iQ2FsTG9nTG9nIiBBbGlhcz0iTG9nLUxvZyBQbG90IiBJY29uPSJSdW5PdGhlciIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJGQSIgQWxpYXM9IkZsb3cgUmF0ZSBBbmFseXNpcyI+DQogICAgICAgICAgICA8Q21kIElEPSI0MTAyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik1pbmlGckFuYWxGQSIgQWxpYXM9IkZsb3cgUmF0ZSBQcmVwYXJhdGlvbiIgRXh0SW5mbz0iSVBSIiBJY29uPSJNaW5pRnJBbmFsRkEiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MTAzIiBCb3VuZHM9IjAsMSIgTmFtZT0iTWluaUZyRkFVcCIgQWxpYXM9IlN0ZXAgVXAiIEljb249IlN0ZXBVcCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjQxMDQiIEJvdW5kcz0iMSwxIiBOYW1lPSJNaW5pRnJGQURvd24iIEFsaWFzPSJTdGVwIERvd24iIEljb249IlN0ZXBEb3duIiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCIgIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwOCIgQm91bmRzPSIwLDAiIE5hbWU9IlJzdExvYWQiIEFsaWFzPSJMb2FkIFJlc3VsdHMiIEljb249IkxvYWRKb2JzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwOSIgQm91bmRzPSIxLDAiIE5hbWU9IlJzdFNhdmUiIFR5cGU9IjEiIEV4dE5hbWVzPSJSc3RTYXZlQ3VyO1JzdFNhdmVBbGwiIEV4dEluZm89IlNhdmUgQ3VycmVudCBSZXN1bHQ7U2F2ZSBBbGwgUmVzdWx0cyIgQWxpYXM9IlNhdmUgUmVzdWx0cyIgSWNvbj0iU2F2ZUpvYnMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9IldpbmRvdyBEaXNwbGF5IiAgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9Ik1vZGVsIFdpbmRvdyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSJCYXNpYyBJbmZvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZUIERhdGEiIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRiBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI0MDEiIE5hbWU9IklQUiIgQWxpYXM9IldlbGwgUHJvZCBUZXN0IiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iQW5hbHlzaXMgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA2IiBCb3VuZHM9IjAsMCIgTmFtZT0iQW5hbE5ldyIgQWxpYXM9Ik5ldyBBbmFseXNpcyIgSWNvbj0iSm9iTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNyIgQm91bmRzPSIxLDAiIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iQW5hbHlzaXMgTWFuYWdlbWVudCIgSWNvbj0iSm9iRWRpdCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSVBSIiBBbGlhcz0iSVBSIFByZXZpb3VzIFJlZmVyZW5jZShEZWJ1ZykiPg0KICAgICAgICAgICAgPENtZCBJRD0iNjAwMiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJJUFJBbmFsIiBBbGlhcz0iSVBSIFByZXBhcmF0aW9uIiBFeHRJbmZvPSJJUFIiIEljb249IklQUkFuYWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI2MDAzIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IklQUkNhbCIgQWxpYXM9IklQUiBDYWxjdWxhdGlvbiIgSWNvbj0iSVBSQ2FsIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXZHREYXRhUHJlcHJvY2VzcyIgQWxpYXM9IkRhdGEgUHJlcHJvY2Vzc2luZyIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI2MTAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IldkdERhdGFBc3NuIiBBbGlhcz0iRGF0YSBOb3JtYWxpemF0aW9uIiBFeHRJbmZvPSJJUFIiIEljb249IklQUkFuYWwiICBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8Q21kIElEPSI2MTAyIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IldkdE90aGVyIiBBbGlhcz0iT3RoZXJzIiBJY29uPSJXZHRPdGhlciIgVmlzaWJsZT0iMCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYxMDMiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iV2R0V01GIiBBbGlhcz0iV2VsbGJvcmUgTXVsdGlwaGFzZSBGbG93IiBJY29uPSJXZHRXTUYiICBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8Q21kIElEPSI2MTA0IiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9IldkdENob2tlIiBBbGlhcz0iQ2hva2UgRmxvdyIgSWNvbj0iV2R0Q2hva2UiICBWaXNpYmxlPSIwIi8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IklQUiIgQWxpYXM9IlByb2R1Y3Rpdml0eSBBbmFseXNpcyI+DQogICAgICAgICAgICA8Q21kIElEPSI2MjAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IldkdElQUkNhbCIgQWxpYXM9IlJlc2Vydm9pciBQcm9kdWN0aXZpdHkgQ2FsY3VsYXRpb24iIEljb249IklQUkNhbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYyMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iV2VsbFBkdHkiIEFsaWFzPSJJbnRlZ3JhdGVkIFByb2R1Y3Rpdml0eSIgSWNvbj0iV2VsbFBkdHkiICBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwMyIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJXZHRJUFJFeHQiIEFsaWFzPSJQcm9kdWN0aXZpdHkgV2VsbCBUZXN0W0V4dGVuZGVkXSIgSWNvbj0iSVBSRXh0Ii8+DQogICAgICAgICAgICA8Q21kIElEPSI2MjA0IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IldkdElQUkFuYWwiIEFsaWFzPSJSZXNlcnZvaXIgUHJvZHVjdGl2aXR5IEFuYWx5c2lzIiBJY29uPSJJUFJBbmFsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwNSIgQm91bmRzPSIwLDQsMiwxIiBOYW1lPSJXZWxsSW50ZWdBbmFsIiBBbGlhcz0iQ29tcHJlaGVuc2l2ZSBBbmFseXNpcyIgSWNvbj0iV2VsbEludGVnQW5hbCIgVmlzaWJsZT0iMCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSVBSIiBBbGlhcz0iUHJvZHVjdGl2aXR5IENhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYzMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iV2R0Q2FsIiBBbGlhcz0iQ2FsY3VsYXRpb24iIEljb249IlJ1bkV4IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IkxvYWQgUmVzdWx0cyIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0iU2F2ZSBDdXJyZW50IFJlc3VsdDtTYXZlIEFsbCBSZXN1bHRzIiBBbGlhcz0iU2F2ZSBSZXN1bHRzIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IERpc3BsYXkiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMiIgQm91bmRzPSIwLDAiIE5hbWU9IlZpc2libGVNb2RlbHMiIEFsaWFzPSJNb2RlbCBXaW5kb3ciIEljb249IlZpc2libGVNb2RlbHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAzIiBCb3VuZHM9IjEsMCIgTmFtZT0iVmlzaWJsZVBhcmFtZXRlcnMiIEFsaWFzPSJQYXJhbWV0ZXIgV2luZG93IiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0iQmFzaWMgSW5mbyIgSWNvbj0iSW5wdXRCYXNpYyIgICBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAyIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxQVlQiIEFsaWFzPSJQVlQgRGF0YSIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDMiIEJvdW5kcz0iMCwyIiBOYW1lPSJWaXNpYmxlQW5hbERpZmYiIEFsaWFzPSJESUZGIERhdGEiIEljb249IklucHV0Rmx1aWQiICAgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjYiIE5hbWU9IkFkdmFuY2VkRnVuY3Rpb24iIEFsaWFzPSJBZHZhbmNlZCIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEZXNpZ24iIEFsaWFzPSJXZWxsIFRlc3QgRGVzaWduIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iVGVzdERlc2lnbiIgQWxpYXM9IldlbGwgVGVzdCBEZXNpZ24iIEljb249IlRlc3REZXNpZ24iIEV4dEluZm89IlBGIiAgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDQiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEZsb3dTZWciIEFsaWFzPSJGbG93IFBlcmlvZCBBbmFseXNpcyIgSWNvbj0iRmxvd1BlcmlvZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDUiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iQW5hbE90aGVycyIgQWxpYXM9IkNoYXJhY3RlcmlzdGljIFNlZ21lbnQgQW5hbHlzaXMiIFR5cGU9IjEiIEV4dE5hbWVzPSJDaGFydFQ7Q2hhcnRTcXJ0VDtDaGFydDI1VDtDaGFydDVUIiBFeHRJbmZvPSJDaGFydCBUO0NoYXJ0IFNxcnQoVCk7Q2hhcnQgMC4yNVQ7Q2hhcnQgLTAuNVQiIEljb249IkFzc2lzQW5hbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDkiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQW5hbERpc3RyaSIgQWxpYXM9IkRpc3RyaWJ1dGlvbiBDaGFydCIgVHlwZT0iMSIgRXh0TmFtZXM9IkNoYXJ0RGVuO0NoYXJ0VmlzIiBFeHRJbmZvPSJDb25jZW50cmF0aW9uIERpc3RyaWJ1dGlvbjtWaXNjb3NpdHkgRGlzdHJpYnV0aW9uIiBJY29uPSJBbmFsRGlzdHJpIiAvPg0KDQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRhdGFGaXQiIEFsaWFzPSJJbnRlcnByZXRhdGlvbiBGaXR0aW5nIj4NCg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwNSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJEZWNvbnZvbHYiIEFsaWFzPSJEZWNvbnZvbHV0aW9uIiBJY29uPSJEZWNvbnZvbHYiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iRml0TW9kZWwiIEFsaWFzPSJBbmFseXRpY2FsIFNvbHV0aW9uIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDQiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0ibm1GaXRNb2RlbCIgQWxpYXM9Ik51bWVyaWNhbCBTb2x1dGlvbiIgSWNvbj0iRml0TW9kZWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAyIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkF1dG9GaXQiIEFsaWFzPSJBdXRvIEZpdHRpbmciIEljb249IkF1dG9GaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAzIiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9IlBsYXRlRml0IiBBbGlhcz0iU2Vuc2l0aXZpdHkgQW5hbHlzaXMiIEljb249IlBsYXRlRml0IiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFJVGVzdCIgQWxpYXM9IkludGVsbGlnZW50IFdlbGwgVGVzdChEZWJ1ZykiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzkwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJNb2RlbENsYXNzaWZ5IiBBbGlhcz0iTW9kZWwgUmVjb2duaXRpb24iIEljb249Ik1vZGVsQ2xhc3NpZnkiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlJlbGF0aXZlVG9vbCIgQWxpYXM9IlJlbGF0ZWQgVG9vbHMiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwMSIgQm91bmRzPSIwLDAiIE5hbWU9IlRpbWUiIEFsaWFzPSJUaW1lIiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwMiIgQm91bmRzPSIxLDAiIE5hbWU9IlNob3dNb2RlbENoYXJ0cyIgQWxpYXM9Ik1vZGVsIiBJY29uPSJTaG93TW9kZWxDaGFydHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjAzIiBCb3VuZHM9IjAsMSIgTmFtZT0iU2hvd01vZGVsU2tldGNoIiBBbGlhcz0iVGhlb3J5IiBJY29uPSJTaG93TW9kZWxTa2V0Y2giIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjA0IiBCb3VuZHM9IjEsMSIgTmFtZT0iU2F2ZUFzTW9kZWxTa2V0Y2giIEFsaWFzPSJTYXZlIEFzIFNjaGVtYXRpYyIgSWNvbj0iU2F2ZUFzTW9kZWxTa2V0Y2giIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iVG9vbFMiIEFsaWFzPSJFeHRlbmRlZCBGdW5jdGlvbnMiICBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9Ijk4MDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRmxvd1RvUyIgQWxpYXM9IlJhdGUgdG8gU2tpbiBGYWN0b3IiIEljb249IkZsb3dUb1MiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MjAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik1peFZpc2Nvc2l0eSIgQWxpYXM9Ik1peGVkIFZpc2Nvc2l0eSIgSWNvbj0iTWl4VmlzY29zaXR5IiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IkxvYWQgUmVzdWx0cyIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0iU2F2ZSBDdXJyZW50IFJlc3VsdDtTYXZlIEFsbCBSZXN1bHRzIiBBbGlhcz0iU2F2ZSBSZXN1bHRzIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IERpc3BsYXkiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMiIgQm91bmRzPSIwLDAiIE5hbWU9IlZpc2libGVNb2RlbHMiIEFsaWFzPSJNb2RlbCBXaW5kb3ciIEljb249IlZpc2libGVNb2RlbHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAzIiBCb3VuZHM9IjEsMCIgTmFtZT0iVmlzaWJsZVBhcmFtZXRlcnMiIEFsaWFzPSJQYXJhbWV0ZXIgV2luZG93IiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0iQmFzaWMgSW5mbyIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVCBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMyIgQm91bmRzPSIwLDIiIE5hbWU9IlZpc2libGVBbmFsRGlmZiIgQWxpYXM9IkRJRkYgRGF0YSIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDQiIEJvdW5kcz0iMSwyIiBOYW1lPSJWaXNpYmxlQW5hbFBzZXUiIEFsaWFzPSJQc2V1ZG8gUHJlc3N1cmUgRGF0YSIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNyIgTmFtZT0iU3lzVG9vbCIgQWxpYXM9IlN5c3RlbSBDb25maWd1cmF0aW9uIFRvb2xzKFQpIiBWaXNpYmxlPSIwIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlN5c1Rvb2wiIEFsaWFzPSJDb25maWd1cmF0aW9uIFRvb2xzIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcwMDEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iU3lzVG9vbHMiIEFsaWFzPSJTeXN0ZW0gQ29uZmlndXJhdGlvbiBUb29scyIgSWNvbj0iU3lzVG9vbHMiICAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJNb2RlbE1hbmFnZXIiIEFsaWFzPSJNb2RlbCBNYW5hZ2VtZW50Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcwMDIiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTW9kZWxTY2FuIiBBbGlhcz0iTW9kZWwgVmlldyIgSWNvbj0iTW9kZWxTY2FuIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI4IiBOYW1lPSJSZXN1bHQiIEFsaWFzPSJSZXN1bHRzIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IkxvYWQgUmVzdWx0cyIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0iU2F2ZSBDdXJyZW50IFJlc3VsdDtTYXZlIEFsbCBSZXN1bHRzIiBBbGlhcz0iU2F2ZSBSZXN1bHRzIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iUmVzQ29tcGFyZSIgQWxpYXM9IlJlc3VsdCBDb21wYXJpc29uIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjgwMDMiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iUmVzQ29tcGFyZSIgQWxpYXM9IlJlc3VsdCBDb21wYXJpc29uIiBJY29uPSJSZXNDb21wYXJlIiAgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iUHJpbnQiIEFsaWFzPSJSZXBvcnQgUHJpbnRpbmciPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwMSIgQm91bmRzPSIwLDAiIE5hbWU9IlJlcG9ydENvbmZpZyIgQWxpYXM9IlJlcG9ydCBTZXR0aW5ncyIgSWNvbj0icmVwb3J0Q29uZmlnIiAgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjgwMDQiIEJvdW5kcz0iMSwwIiBOYW1lPSJQcmludFByZXZpZXciIEFsaWFzPSJSZXBvcnQgUHJldmlldyIgSWNvbj0iUHJlUHJpbnQiICAvPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwMiIgQm91bmRzPSIwLDEiIE5hbWU9IlByaW50IiBBbGlhcz0iUHJpbnQoSW5jbHVkZSBQREYpIiBJY29uPSJQcmludCIgIC8+DQogICAgICAgICAgICA8Q21kIElEPSI4MDA1IiBCb3VuZHM9IjEsMSIgTmFtZT0iRXhwb3J0V29yZCIgQWxpYXM9IkV4cG9ydChXb3JkKSIgSWNvbj0iV29yZDE2IiAgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IERpc3BsYXkiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwNCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJWaXNpYmxlUHR5cyIgQWxpYXM9IlByb3BlcnR5IFdpbmRvdyIgSWNvbj0iUHJvcGVydHlXaW5kb3ciIC8+DQoNCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iOSIgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9IkJhc2ljIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iVmlzaWJsZVByb2pUcmVlRGEiIEFsaWFzPSJQcm9qZWN0IFRyZWUiIEljb249IlByb2pUcmVlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwOCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJWaXNpYmxlUHJvalRyZWVKYiIgQWxpYXM9IkFuYWx5c2lzIFRyZWUiIEljb249IlByb2pUcmVlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwOSIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJWaXNpYmxlUHJvalRyZWVScyIgQWxpYXM9IlJlc3VsdCBUcmVlIiBJY29uPSJQcm9qVHJlZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwzIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0iTW9kZWwgV2luZG93IiBJY29uPSJWaXNpYmxlTW9kZWxzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDMiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0iUGFyYW1ldGVyIFdpbmRvdyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA0IiBCb3VuZHM9IjAsNCIgTmFtZT0iVmlzaWJsZVB0eXMiIEFsaWFzPSJQcm9wZXJ0eSBXaW5kb3ciIEljb249IlByb3BlcnR5V2luZG93IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwNSIgQm91bmRzPSIxLDQiIE5hbWU9IlZpc2libGVMb2dzIiBBbGlhcz0iTG9nIFdpbmRvdyIgSWNvbj0iVmlzaWJsZUxvZ3MiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA2IiBCb3VuZHM9IjAsNSIgTmFtZT0iU3RhY2tlZFByb2plY3QiIEFsaWFzPSJQcm9qZWN0IFdpbmRvdyIgSWNvbj0iU3RhY2tlZFByb2plY3QiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA3IiBCb3VuZHM9IjEsNSIgTmFtZT0iU3RhY2tlZE1kaSIgQWxpYXM9IkFuYWx5c2lzIFdpbmRvdyIgSWNvbj0iU3RhY2tlZE1kaSIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93TGF5b3V0IiBBbGlhcz0iV2luZG93IExheW91dCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDExIiBCb3VuZHM9IjAsMCIgTmFtZT0iV2luZG93TGF5b3V0SCIgSWNvbk9ubHk9IjEiIFRpcHM9Ikhvcml6b250YWwgTGF5b3V0IiBJY29uPSJXaW5kb3dMYXlvdXRIIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxMiIgQm91bmRzPSIxLDAiIE5hbWU9IldpbmRvd0xheW91dFYiIEljb25Pbmx5PSIxIiBUaXBzPSJWZXJ0aWNhbCBMYXlvdXQiIEljb249IldpbmRvd0xheW91dFYiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDEzIiBCb3VuZHM9IjAsMSIgTmFtZT0iV2luZG93TGF5b3V0VCIgSWNvbk9ubHk9IjEiIFRpcHM9IlRpbGUgTGF5b3V0IiBJY29uPSJXaW5kb3dMYXlvdXRUIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxNCIgQm91bmRzPSIxLDEiIE5hbWU9IldpbmRvd0xheW91dEMiIEljb25Pbmx5PSIxIiBUaXBzPSJDb2xsYXBzZSBMYXlvdXQiIEljb249IldpbmRvd0xheW91dEMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkNsb3NlIiBBbGlhcz0iQ2xvc2UiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyMSIgQm91bmRzPSIwLDAiIE5hbWU9IkNsb3NlQ3VyV25kIiBBbGlhcz0iQ2xvc2UgQ3VycmVudCIgSWNvbj0iQ2xvc2VBbGxXaW5kb3ciIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDIyIiBCb3VuZHM9IjEsMCIgTmFtZT0iQ2xvc2VBbGxXbmRzIiBBbGlhcz0iQ2xvc2UgQWxsIiBJY29uPSJDbG9zZUFsbFdpbmRvdyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMjMiIEJvdW5kcz0iMCwxIiBOYW1lPSJQcmV2V25kIiBBbGlhcz0iUHJldmlvdXMiIEljb25Pbmx5PSIxIiBJY29uPSJVcCIgVGlwcz0iUHJldmlvdXMgV2luZG93IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyNCIgQm91bmRzPSIxLDEiIE5hbWU9Ik5leHRXbmQiIEFsaWFzPSJOZXh0IiBJY29uT25seT0iMSIgSWNvbj0iRG93biIgVGlwcz0iTmV4dCBXaW5kb3ciIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDI1IiBCb3VuZHM9IjAsMiwyLDEiIFR5cGU9IjciIE5hbWU9Ikxpc3RXeFduZHMiIEFsaWFzPSJXaW5kb3dzIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSIxMCIgTmFtZT0iSGVscCIgQWxpYXM9IkhlbHAiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSGVscCIgQWxpYXM9IkhlbHAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTG9nVmlldyIgQWxpYXM9IkxvZyBWaWV3KEwpIiBJY29uPSJMb2dWaWV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iSGVscCIgQWxpYXM9IkhlbHAoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwOCIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJVcGRhdGVMaXN0cyIgQWxpYXM9IlVwZGF0ZSBMaXN0cyhJKSIgSWNvbj0iVXBkYXRlTGlzdHMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkxhbmciIEFsaWFzPSJMYW5ndWFnZSI+DQogICAgICAgICAgIDxDbWQgSUQ9IjEwMDA5IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkxhbmdTd2FwIiBBbGlhcz0iU3dhcCBsYW5ndWFnZSIgSWNvbj0iTGFuZ1N3YXAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFib3V0IiBBbGlhcz0iQWJvdXQiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDMiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQWJvdXQiIEFsaWFzPSJBYm91dChBKSIgSWNvbj0iV1RBSUFib3V0IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDQiIEJvdW5kcz0iMSwwIiBOYW1lPSJBYm91dFF0IiBBbGlhcz0iQWJvdXQgUXQoUSkiIEljb249IlF0IiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJMb2dpbiIgQWxpYXM9IkxvZ2luKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNyIgQm91bmRzPSIwLDAiIE5hbWU9IlJlZ2lzdGVyIiBBbGlhcz0iKERlYnVnKVNvZnR3YXJlIFJlZ2lzdHJhdGlvbihSKSIgSWNvbj0iUmVnaXN0ZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNSIgQm91bmRzPSIxLDAiIE5hbWU9IkxvZ2luIiBBbGlhcz0iKERlYnVnKVVzZXIgTG9naW4oVSkiIEljb249IkxvZ2luIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEZWJ1ZyIgQWxpYXM9IkRlYnVnKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSIoRGVidWcpIFN1bSBQYXJhbWV0ZXJzIiBBbGlhcz0iKERlYnVnKVN1bW1hcml6ZSBNb2RlbCBQYXJhbWV0ZXJzIiBJY29uPSJTdW1QYXJhIiAvPg0KICAgICAgIDwvR3JvdXA+DQogICAgPC9UYWI+DQoNCjwvUmliYm9uPg0K \ No newline at end of file diff --git a/Bin/Config/Common/ModelParaDefinesNM_cn.dat b/Bin/Config/Common/ModelParaDefinesNM_cn.dat index 3b97d08..7ead93c 100644 --- a/Bin/Config/Common/ModelParaDefinesNM_cn.dat +++ b/Bin/Config/Common/ModelParaDefinesNM_cn.dat @@ -1 +1 @@ -PD94bWwgdmVycup_mpac2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSoqKioqKioqKioqKiwzyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gICAg5pys5paH5qGj55qE55uu55qE5piv5bu656uLV1RBSeaVsOWAvOinoyhOTSnmqKHlnZfnmoTlj4LmlbDlrprkuYkgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIOS7heWMheWQq1BFQknmsYLop6PlmajmiYDpnIDnmoTlgqjlsYLjgIHkupXlkozlh6DkvZXlr7nosaHlj4LmlbAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgRGF0ZTogMjAyNjA2MTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPCEtLQ0KICAgIOWPguaVsOiMg+WbtO+8mlBFQknmsYLop6PlmajmiYDpnIDnmoTlgqjlsYLjgIHkupXlkozlh6DkvZXlr7nosaHlj4LmlbANCiAgICDlr7nlupQgSFhfTldUTV9NT0RFTF9JTlBVVCDnu5PmnoTkvZPlrZfmrrUNCiAgICDpgJrov4cgX3BhcmFIZWxwZXItPmxvYWRQYXJhRGVmaW5lcygpIOWKoOi9ve+8jHNLZXkg5qCH6K+G5Li6IHNfTm1fU2VyaWUNCi0tPg0KDQo8Um9vdD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IuWCqOWxguWPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9ImgiICAgQWxpYXM9IuWCqOWxguWOmuW6piIgICAgICAgVW5pdD0ibSIgICAgIERlZmF1bHQ9IjEwIiAgICBNYXg9IjEwMDAwIiAgTWluPSIxZS0wNSIgIERpZ2l0PSI2IiAgRGVzYz0icmVzZXJ2b2lyIHRoaWNrbmVzcyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUGkiICBBbGlhcz0i5Yid5aeL5Y6L5YqbIiAgICAgICBVbml0PSJNUGEiICAgRGVmYXVsdD0iNDAiICAgIE1heD0iNTAwIiAgICBNaW49IjAuMSIgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIGZvcm1hdGlvbiBwcmVzc3VyZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iSyIgICBBbGlhcz0i5riX6YCP546HIiAgICAgICAgIFVuaXQ9Im1EIiAgICBEZWZhdWx0PSIxIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InBlcm1lYWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0icGhpIiBBbGlhcz0i5a2U6ZqZ5bqmIiAgICAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxIiAgICAgIE1pbj0iMWUtMDUiICBEaWdpdD0iNiIgIERlc2M9InBvcm9zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJDdGkiIEFsaWFzPSLnu7zlkIjljovnvKnns7vmlbAiICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAxIiBNYXg9IjEwIiAgICAgTWluPSIxZS0zMCIgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0idG90YWwgY29tcHJlc3NpYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJDZiIgIEFsaWFzPSLlsqnnn7PljovnvKnns7vmlbAiICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAwMSIgTWF4PSIxMCIgICAgTWluPSIxZS0zMCIgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icm9jayBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlNvaSIgQWxpYXM9IuWIneWni+WQq+ayuemlseWSjOW6piIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuOCIgICBNYXg9IjEiICAgICAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0iaW5pdGlhbCBvaWwgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iU3dpIiBBbGlhcz0i5Yid5aeL5ZCr5rC06aWx5ZKM5bqmIiBVbml0PSIiICAgICAgRGVmYXVsdD0iMC4yIiAgIE1heD0iMSIgICAgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIHdhdGVyIHNhdHVyYXRpb24iIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i5LqV5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19YIiAgICBBbGlhcz0iWOWdkOaghyIgICAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgICAgIE1heD0iMTAwMDAiICBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiICBEZXNjPSJ3ZWxsIFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19ZIiAgICBBbGlhcz0iWeWdkOaghyIgICAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgICAgIE1heD0iMTAwMDAiICBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiICBEZXNjPSJ3ZWxsIFkgY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19SdyIgICBBbGlhcz0i5LqV562S5Y2K5b6EIiAgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxMCIgICAgIE1pbj0iMC4wMDEiICBEaWdpdD0iNiIgIERlc2M9IndlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19Ta2luIiBBbGlhcz0i6KGo55qu57O75pWwIiAgICBVbml0PSIiICAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwIiAgIE1pbj0iLTEwMCIgICBEaWdpdD0iNiIgIERlc2M9InNraW4gZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0MiICAgIEFsaWFzPSLkupXnrZLlgqjpm4bns7vmlbAiIFVuaXQ9Im1eMy9NUGEiIERlZmF1bHQ9IjAiIE1heD0iMTAwMCIgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJ3ZWxsYm9yZSBzdG9yYWdlIGNvZWZmaWNpZW50IiAvPgogICAgPFBhcmFJdGVtIE5hbWU9IldfV2VsbExlbmd0aCIgICAgICAgICBBbGlhcz0i5rC05bmz5q616ZW/5bqmIiAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjIwMCIgIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiBEZXNjPSJob3Jpem9udGFsIHdlbGwgbGVuZ3RoIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0RyYWluQW5nbGUiICAgICAgICAgQWxpYXM9IuaOkuawtOinkuW6piIgICAgIFVuaXQ9Im8iICAgIERlZmF1bHQ9IjAiICAgIE1heD0iMzYwIiAgIE1pbj0iLTM2MCIgIERpZ2l0PSI2IiBEZXNjPSJob3Jpem9udGFsIHdlbGwgZHJhaW4gYW5nbGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfTnVtYmVyT2ZGcmFjdHVyZXMiICBBbGlhcz0i6KOC57yd5pWw6YePIiAgICAgVW5pdD0iIiAgICAgRGVmYXVsdD0iMTUiICAgTWF4PSIxMDAwIiAgTWluPSIyIiAgICAgRGlnaXQ9IjAiIERlc2M9Im51bWJlciBvZiBmcmFjdHVyZXMiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfRnJhY3R1cmVIYWxmTGVuZ3RoIiBBbGlhcz0i6KOC57yd5Y2K6ZW/IiAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iNTAiICAgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGhhbGYtbGVuZ3RoIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0ZyYWN0dXJlQW5nbGUiICAgICAgQWxpYXM9Iuijgue8neinkuW6piIgICAgIFVuaXQ9Im8iICAgIERlZmF1bHQ9IjkwIiAgIE1heD0iMzYwIiAgIE1pbj0iLTM2MCIgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBhbmdsZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19EZmMiICAgICAgICAgICAgICAgIEFsaWFzPSLoo4LnvJ3lr7zmtYHog73lipsiIFVuaXQ9Im1kLm0iIERlZmF1bHQ9IjEwMDAiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBjb25kdWN0aXZpdHkiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i54us56uL6KOC57yd5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9YMCIgQWxpYXM9Iui1t+eCuVgwIiAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgc3RhcnQgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX1kwIiBBbGlhcz0i6LW354K5WTAiICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBzdGFydCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWDEiIEFsaWFzPSLnu4jngrlYMSIgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGVuZCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWTEiIEFsaWFzPSLnu4jngrlZMSIgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGVuZCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfRkMiIEFsaWFzPSLlr7zmtYHog73lipsiIFVuaXQ9Im1kLm0iIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgY29uZHVjdGl2aXR5IiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IuaWreWxguWPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1gwIiBBbGlhcz0i6LW354K5WDAiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZmF1bHQgc3RhcnQgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9ZMCIgQWxpYXM9Iui1t+eCuVkwIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IHN0YXJ0IFkgY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWDEiIEFsaWFzPSLnu4jngrlYMSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBlbmQgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9ZMSIgQWxpYXM9Iue7iOeCuVkxIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IGVuZCBZIGNvb3JkaW5hdGUiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i55+p5b2i6L6555WM5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWE1pbiIgQWxpYXM9IuW3pui+ueeVjFgiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1pbmltdW0gWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWU1pbiIgQWxpYXM9IuS4i+i+ueeVjFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1pbmltdW0gWSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWE1heCIgQWxpYXM9IuWPs+i+ueeVjFgiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1heGltdW0gWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWU1heCIgQWxpYXM9IuS4iui+ueeVjFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1heGltdW0gWSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLlnIblvaLovrnnlYzlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCQ19DZW50ZXJYIiBBbGlhcz0i5ZyG5b+DWCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJjaXJjbGUgYm91bmRhcnkgY2VudGVyIFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJDX0NlbnRlclkiIEFsaWFzPSLlnIblv4NZIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImNpcmNsZSBib3VuZGFyeSBjZW50ZXIgWSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQkNfUmFkaXVzIiAgQWxpYXM9IuWNiuW+hCIgIFVuaXQ9Im0iIERlZmF1bHQ9IjEiIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiICBEaWdpdD0iNiIgRGVzYz0iY2lyY2xlIGJvdW5kYXJ5IHJhZGl1cyIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLlpJrovrnlvaLovrnnlYzngrnlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUF9YIiBBbGlhcz0iWOWdkOaghyIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJwb2x5Z29uIGJvdW5kYXJ5IHZlcnRleCBYIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUF9ZIiBBbGlhcz0iWeWdkOaghyIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJwb2x5Z29uIGJvdW5kYXJ5IHZlcnRleCBZIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IuWMuuWfn+WPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJfTGVha2FnZSIgQWxpYXM9IuazhOmcsuezu+aVsCIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJyZWdpb24gbGVha2FnZSBjb2VmZmljaWVudCIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLmoIforrDljLrln5/lj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSTV9Db21XIiAgICAgICBBbGlhcz0i5YKo6IO95q+UIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMSIgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiIERlc2M9InN0b3JhZ2UgcmF0aW8iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX0NvbUtyIiAgICAgIEFsaWFzPSLmtYHluqbmr5QiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxMDAwIiBNaW49IjAuMDAxIiBEaWdpdD0iNiIgRGVzYz0ibW9iaWxpdHkgcmF0aW8iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX05ldFRvR3Jvc3MiIEFsaWFzPSLlh4Dmr5vmr5QiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxIiAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgRGVzYz0ibmV0LXRvLWdyb3NzIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8IS0tIOe7k+aenOmdouadv+WPguaVsOWPqueUsSByZWJ1aWxkUmVzdWx0UGFyYXMoKSDpgInmi6nvvIzkuI3kvJrlh7rnjrDlnKjlt6bkvqfpnaLmnb/kuK3jgIIgLS0+DQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i57uT5p6c5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfUnciICAgQWxpYXM9IuS6leW+hCIgICAgICAgICBVbml0PSJtIiAgICAgIERlZmF1bHQ9IjAuMSIgICAgTWF4PSIxMCIgICAgTWluPSIwLjAwMSIgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfRGZjIiAgQWxpYXM9Iuijgue8neWvvOa1geiDveWKmyIgVW5pdD0ibWQubSIgICBEZWZhdWx0PSIxMDAwIiAgIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBmcmFjdHVyZSBjb25kdWN0aXZpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9XX1NraW4iIEFsaWFzPSLooajnmq7ns7vmlbAiICAgICBVbml0PSIiICAgICAgIERlZmF1bHQ9IjAiICAgICAgTWF4PSIxMDAwIiAgTWluPSItMTAwIiAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHNraW4gZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfV19DIiAgICBBbGlhcz0i5LqV562S5YKo6ZuG57O75pWwIiBVbml0PSJtXjMvTVBhIiBEZWZhdWx0PSIwIiAgICAgIE1heD0iMTAwMCIgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3ZWxsYm9yZSBzdG9yYWdlIGNvZWZmaWNpZW50IiAvPgoNCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1BpIiAgQWxpYXM9IuWIneWni+WcsOWxguWOi+WKmyIgICBVbml0PSJNUGEiICAgRGVmYXVsdD0iNDAiICAgICBNYXg9IjUwMCIgICBNaW49IjAuMSIgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIGZvcm1hdGlvbiBwcmVzc3VyZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0siICAgQWxpYXM9Iua4l+mAj+eOhyIgICAgICAgICBVbml0PSJtRCIgICAgRGVmYXVsdD0iMSIgICAgICBNYXg9IjEwMDAwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBwZXJtZWFiaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9oIiAgIEFsaWFzPSLlgqjlsYLljprluqYiICAgICAgIFVuaXQ9Im0iICAgICBEZWZhdWx0PSIxMCIgICAgIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHJlc2Vydm9pciB0aGlja25lc3MiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9waGkiIEFsaWFzPSLlrZTpmpnluqYiICAgICAgICAgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuMSIgICAgTWF4PSIxIiAgICAgTWluPSIxZS0wNSIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgcG9yb3NpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DdGkiIEFsaWFzPSLnu7zlkIjljovnvKnns7vmlbAiICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAxIiAgTWF4PSIxMCIgICAgTWluPSIxZS0zMCIgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgdG90YWwgY29tcHJlc3NpYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ2YiICBBbGlhcz0i5bKp55+z5Y6L57yp57O75pWwIiAgIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwLjAwMDEiIE1heD0iMTAiICAgIE1pbj0iMWUtMzAiIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IHJvY2sgY29tcHJlc3NpYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfU29pIiBBbGlhcz0i5Yid5aeL5ZCr5rK56aWx5ZKM5bqmIiBVbml0PSIiICAgICAgRGVmYXVsdD0iMC44IiAgICBNYXg9IjEiICAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIG9pbCBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfU2dpIiBBbGlhcz0i5Yid5aeL5ZCr5rCU6aWx5ZKM5bqmIiBVbml0PSIiICAgICAgRGVmYXVsdD0iMCIgICAgICBNYXg9IjEiICAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIGdhcyBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfU3dpIiBBbGlhcz0i5Yid5aeL5ZCr5rC06aWx5ZKM5bqmIiBVbml0PSIiICAgICAgRGVmYXVsdD0iMC4yIiAgICBNYXg9IjEiICAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIHdhdGVyIHNhdHVyYXRpb24iIC8+DQoNCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0JvIiAgIEFsaWFzPSLmsrnkvZPnp6/ns7vmlbAiIFVuaXQ9Im0zL20zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBvaWwgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9NaXVvIiBBbGlhcz0i5rK555u46buP5bqmIiAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjFlLTMwIiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBvaWwgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ28iICAgQWxpYXM9IuayueWOi+e8qeezu+aVsCIgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgb2lsIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0J3IiAgIEFsaWFzPSLmsLTkvZPnp6/ns7vmlbAiIFVuaXQ9Im0zL20zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3YXRlciBmb3JtYXRpb24gdm9sdW1lIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X01pdXciIEFsaWFzPSLmsLTnm7jpu4/luqYiICAgVW5pdD0ibVBhLnMiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMWUtMzAiIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdhdGVyIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0N3IiAgIEFsaWFzPSLmsLTljovnvKnns7vmlbAiIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IHdhdGVyIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0JnIiAgIEFsaWFzPSLmsJTkvZPnp6/ns7vmlbAiIFVuaXQ9Im0zL20zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBnYXMgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9NaXVnIiBBbGlhcz0i5rCU55u46buP5bqmIiAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjFlLTMwIiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBnYXMgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ2ciICAgQWxpYXM9IuawlOWOi+e8qeezu+aVsCIgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgZ2FzIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCjwvUm9vdD4NCg== \ No newline at end of file +PD94bWwgdmVycup_mpac2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSoqKioqKioqKioqKiwzyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gICAg5pys5paH5qGj55qE55uu55qE5piv5bu656uLV1RBSeaVsOWAvOinoyhOTSnmqKHlnZfnmoTlj4LmlbDlrprkuYkgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIOS7heWMheWQq1BFQknmsYLop6PlmajmiYDpnIDnmoTlgqjlsYLjgIHkupXlkozlh6DkvZXlr7nosaHlj4LmlbAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgRGF0ZTogMjAyNjA2MTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPCEtLQ0KICAgIOWPguaVsOiMg+WbtO+8mlBFQknmsYLop6PlmajmiYDpnIDnmoTlgqjlsYLjgIHkupXlkozlh6DkvZXlr7nosaHlj4LmlbANCiAgICDlr7nlupQgSFhfTldUTV9NT0RFTF9JTlBVVCDnu5PmnoTkvZPlrZfmrrUNCiAgICDpgJrov4cgX3BhcmFIZWxwZXItPmxvYWRQYXJhRGVmaW5lcygpIOWKoOi9ve+8jHNLZXkg5qCH6K+G5Li6IHNfTm1fU2VyaWUNCi0tPg0KDQo8Um9vdD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IuWCqOWxguWPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9ImgiICAgQWxpYXM9IuWCqOWxguWOmuW6piIgICAgICAgVW5pdD0ibSIgICAgIERlZmF1bHQ9IjEwIiAgICBNYXg9IjEwMDAwIiAgTWluPSIxZS0wNSIgIERpZ2l0PSI2IiAgRGVzYz0icmVzZXJ2b2lyIHRoaWNrbmVzcyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUGkiICBBbGlhcz0i5Yid5aeL5Y6L5YqbIiAgICAgICBVbml0PSJNUGEiICAgRGVmYXVsdD0iNDAiICAgIE1heD0iNTAwIiAgICBNaW49IjAuMSIgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIGZvcm1hdGlvbiBwcmVzc3VyZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iSyIgICBBbGlhcz0i5riX6YCP546HIiAgICAgICAgIFVuaXQ9Im1EIiAgICBEZWZhdWx0PSIyNSIgICAgTWF4PSIxMDAwMCIgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InBlcm1lYWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0icGhpIiBBbGlhcz0i5a2U6ZqZ5bqmIiAgICAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxIiAgICAgIE1pbj0iMWUtMDUiICBEaWdpdD0iNiIgIERlc2M9InBvcm9zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCbyIgIEFsaWFzPSLmsrnkvZPnp6/ns7vmlbAiICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMS4yIiAgIE1heD0iMTAiICAgICBNaW49IjFlLTA2IiAgRGlnaXQ9IjYiICBEZXNjPSJvaWwgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9Ik1pdW8iIEFsaWFzPSLmsrnnm7jpu4/luqYiICAgICAgVW5pdD0ibVBhLnMiIERlZmF1bHQ9IjAuNSIgICBNYXg9IjEwMDAwIiAgTWluPSIxZS0wNiIgIERpZ2l0PSI2IiAgRGVzYz0ib2lsIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iS3hLeSIgQWxpYXM9IuawtOW5s+a4l+mAj+eOh+avlCIgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIxIiAgICAgTWF4PSIxMDAwIiAgIE1pbj0iMWUtMDYiICBEaWdpdD0iNiIgIERlc2M9Imhvcml6b250YWwgcGVybWVhYmlsaXR5IHJhdGlvIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJDdGkiIEFsaWFzPSLnu7zlkIjljovnvKnns7vmlbAiICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAxIiBNYXg9IjEwIiAgICAgTWluPSIxZS0zMCIgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0idG90YWwgY29tcHJlc3NpYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJDZiIgIEFsaWFzPSLlsqnnn7PljovnvKnns7vmlbAiICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAwMSIgTWF4PSIxMCIgICAgTWluPSIxZS0zMCIgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icm9jayBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlNvaSIgQWxpYXM9IuWIneWni+WQq+ayuemlseWSjOW6piIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuOCIgICBNYXg9IjEiICAgICAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0iaW5pdGlhbCBvaWwgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iU3dpIiBBbGlhcz0i5Yid5aeL5ZCr5rC06aWx5ZKM5bqmIiBVbml0PSIiICAgICAgRGVmYXVsdD0iMC4yIiAgIE1heD0iMSIgICAgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIHdhdGVyIHNhdHVyYXRpb24iIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i5LqV5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19YIiAgICBBbGlhcz0iWOWdkOaghyIgICAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgICAgIE1heD0iMTAwMDAiICBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiICBEZXNjPSJ3ZWxsIFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19ZIiAgICBBbGlhcz0iWeWdkOaghyIgICAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgICAgIE1heD0iMTAwMDAiICBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiICBEZXNjPSJ3ZWxsIFkgY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19SdyIgICBBbGlhcz0i5LqV562S5Y2K5b6EIiAgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxMCIgICAgIE1pbj0iMC4wMDEiICBEaWdpdD0iNiIgIERlc2M9IndlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19Ta2luIiBBbGlhcz0i6KGo55qu57O75pWwIiAgICBVbml0PSIiICAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwIiAgIE1pbj0iLTEwMCIgICBEaWdpdD0iNiIgIERlc2M9InNraW4gZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0MiICAgIEFsaWFzPSLkupXnrZLlgqjpm4bns7vmlbAiIFVuaXQ9Im1eMy9NUGEiIERlZmF1bHQ9IjAiIE1heD0iMTAwMCIgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJ3ZWxsYm9yZSBzdG9yYWdlIGNvZWZmaWNpZW50IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1dlbGxMZW5ndGgiICAgICAgICAgQWxpYXM9IuawtOW5s+autemVv+W6piIgICBVbml0PSJtIiAgICBEZWZhdWx0PSIyMDAiICBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iNiIgRGVzYz0iaG9yaXpvbnRhbCB3ZWxsIGxlbmd0aCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19EcmFpbkFuZ2xlIiAgICAgICAgIEFsaWFzPSLmjpLmsLTop5LluqYiICAgICBVbml0PSLCsCIgICAgRGVmYXVsdD0iMCIgICAgTWF4PSIzNjAiICAgTWluPSItMzYwIiAgRGlnaXQ9IjYiIERlc2M9Imhvcml6b250YWwgd2VsbCBkcmFpbiBhbmdsZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19OdW1iZXJPZkZyYWN0dXJlcyIgIEFsaWFzPSLoo4LnvJ3mlbDph48iICAgICBVbml0PSIiICAgICBEZWZhdWx0PSIxNSIgICBNYXg9IjEwMDAiICBNaW49IjIiICAgICBEaWdpdD0iMCIgRGVzYz0ibnVtYmVyIG9mIGZyYWN0dXJlcyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19GcmFjdHVyZUhhbGZMZW5ndGgiIEFsaWFzPSLoo4LnvJ3ljYrplb8iICAgICBVbml0PSJtIiAgICBEZWZhdWx0PSI1MCIgICBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgaGFsZi1sZW5ndGgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfRnJhY3R1cmVBbmdsZSIgICAgICBBbGlhcz0i6KOC57yd6KeS5bqmIiAgICAgVW5pdD0iwrAiICAgIERlZmF1bHQ9IjkwIiAgIE1heD0iMzYwIiAgIE1pbj0iLTM2MCIgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBhbmdsZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19EZmMiICAgICAgICAgICAgICAgIEFsaWFzPSLoo4LnvJ3lr7zmtYHog73lipsiIFVuaXQ9Im1ELm0iIERlZmF1bHQ9IjEwMDAiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBjb25kdWN0aXZpdHkiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i54us56uL6KOC57yd5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9YMCIgQWxpYXM9Iui1t+eCuVgwIiAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgc3RhcnQgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX1kwIiBBbGlhcz0i6LW354K5WTAiICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBzdGFydCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWDEiIEFsaWFzPSLnu4jngrlYMSIgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGVuZCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWTEiIEFsaWFzPSLnu4jngrlZMSIgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGVuZCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfRkMiIEFsaWFzPSLlr7zmtYHog73lipsiIFVuaXQ9Im1ELm0iIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgY29uZHVjdGl2aXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX0RXIiBBbGlhcz0i6KOC57yd5a695bqm5Y+C5pWwIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIHdpZHRoIHBhcmFtZXRlciIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLmlq3lsYLlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9YMCIgQWxpYXM9Iui1t+eCuVgwIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IHN0YXJ0IFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWTAiIEFsaWFzPSLotbfngrlZMCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBzdGFydCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1gxIiBBbGlhcz0i57uI54K5WDEiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZmF1bHQgZW5kIFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWTEiIEFsaWFzPSLnu4jngrlZMSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBlbmQgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9MZWFrYWdlIiBBbGlhcz0i5rOE5ryP57O75pWwIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IGxlYWthZ2UgY29lZmZpY2llbnQiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i55+p5b2i6L6555WM5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWE1pbiIgQWxpYXM9IuW3pui+ueeVjFgiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1pbmltdW0gWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWU1pbiIgQWxpYXM9IuS4i+i+ueeVjFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1pbmltdW0gWSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWE1heCIgQWxpYXM9IuWPs+i+ueeVjFgiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1heGltdW0gWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWU1heCIgQWxpYXM9IuS4iui+ueeVjFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1heGltdW0gWSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLlnIblvaLovrnnlYzlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCQ19DZW50ZXJYIiBBbGlhcz0i5ZyG5b+DWCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJjaXJjbGUgYm91bmRhcnkgY2VudGVyIFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJDX0NlbnRlclkiIEFsaWFzPSLlnIblv4NZIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImNpcmNsZSBib3VuZGFyeSBjZW50ZXIgWSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQkNfUmFkaXVzIiAgQWxpYXM9IuWNiuW+hCIgIFVuaXQ9Im0iIERlZmF1bHQ9IjEiIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiICBEaWdpdD0iNiIgRGVzYz0iY2lyY2xlIGJvdW5kYXJ5IHJhZGl1cyIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLlpJrovrnlvaLovrnnlYzngrnlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUF9YIiBBbGlhcz0iWOWdkOaghyIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJwb2x5Z29uIGJvdW5kYXJ5IHZlcnRleCBYIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUF9ZIiBBbGlhcz0iWeWdkOaghyIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJwb2x5Z29uIGJvdW5kYXJ5IHZlcnRleCBZIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IuWMuuWfn+WPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJfTGVha2FnZSIgQWxpYXM9IuazhOmcsuezu+aVsCIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJyZWdpb24gbGVha2FnZSBjb2VmZmljaWVudCIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLmoIforrDljLrln5/lj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSTV9Db21XIiAgICAgICBBbGlhcz0i5YKo6IO95q+UIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMSIgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiIERlc2M9InN0b3JhZ2UgcmF0aW8iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX0NvbUtyIiAgICAgIEFsaWFzPSLmtYHluqbmr5QiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxMDAwIiBNaW49IjAuMDAxIiBEaWdpdD0iNiIgRGVzYz0ibW9iaWxpdHkgcmF0aW8iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX05ldFRvR3Jvc3MiIEFsaWFzPSLlh4Dmr5vmr5QiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxIiAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgRGVzYz0ibmV0LXRvLWdyb3NzIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8IS0tIOe7k+aenOmdouadv+WPguaVsOWPqueUsSByZWJ1aWxkUmVzdWx0UGFyYXMoKSDpgInmi6nvvIzkuI3kvJrlh7rnjrDlnKjlt6bkvqfpnaLmnb/kuK3jgIIgLS0+DQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i57uT5p6c5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfUnciICAgQWxpYXM9IuS6leW+hCIgICAgICAgICBVbml0PSJtIiAgICAgIERlZmF1bHQ9IjAuMSIgICAgTWF4PSIxMCIgICAgTWluPSIwLjAwMSIgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfRGZjIiAgQWxpYXM9Iuijgue8neWvvOa1geiDveWKmyIgVW5pdD0ibUQubSIgICBEZWZhdWx0PSIxMDAwIiAgIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBmcmFjdHVyZSBjb25kdWN0aXZpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9XX1NraW4iIEFsaWFzPSLooajnmq7ns7vmlbAiICAgICBVbml0PSIiICAgICAgIERlZmF1bHQ9IjAiICAgICAgTWF4PSIxMDAwIiAgTWluPSItMTAwIiAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHNraW4gZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfV19DIiAgICBBbGlhcz0i5LqV562S5YKo6ZuG57O75pWwIiBVbml0PSJtXjMvTVBhIiBEZWZhdWx0PSIwIiAgICAgIE1heD0iMTAwMCIgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3ZWxsYm9yZSBzdG9yYWdlIGNvZWZmaWNpZW50IiAvPg0KDQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9QaSIgIEFsaWFzPSLliJ3lp4vlnLDlsYLljovlipsiICAgVW5pdD0iTVBhIiAgIERlZmF1bHQ9IjQwIiAgICAgTWF4PSI1MDAiICAgTWluPSIwLjEiICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBmb3JtYXRpb24gcHJlc3N1cmUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9LIiAgIEFsaWFzPSLmuJfpgI/njociICAgICAgICAgVW5pdD0ibUQiICAgIERlZmF1bHQ9IjI1IiAgICAgTWF4PSIxMDAwMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgcGVybWVhYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfaCIgICBBbGlhcz0i5YKo5bGC5Y6a5bqmIiAgICAgICBVbml0PSJtIiAgICAgRGVmYXVsdD0iMTAiICAgICBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCByZXNlcnZvaXIgdGhpY2tuZXNzIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfcGhpIiBBbGlhcz0i5a2U6ZqZ5bqmIiAgICAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjEiICAgIE1heD0iMSIgICAgIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHBvcm9zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ3RpIiBBbGlhcz0i57u85ZCI5Y6L57yp57O75pWwIiAgIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwLjAwMSIgIE1heD0iMTAiICAgIE1pbj0iMWUtMzAiIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IHRvdGFsIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0NmIiAgQWxpYXM9IuWyqeefs+WOi+e8qeezu+aVsCIgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDAxIiBNYXg9IjEwIiAgICBNaW49IjFlLTMwIiBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCByb2NrIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1NvaSIgQWxpYXM9IuWIneWni+WQq+ayuemlseWSjOW6piIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuOCIgICAgTWF4PSIxIiAgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBvaWwgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1NnaSIgQWxpYXM9IuWIneWni+WQq+awlOmlseWSjOW6piIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAiICAgICAgTWF4PSIxIiAgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBnYXMgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1N3aSIgQWxpYXM9IuWIneWni+WQq+awtOmlseWSjOW6piIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuMiIgICAgTWF4PSIxIiAgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCB3YXRlciBzYXR1cmF0aW9uIiAvPg0KDQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9CbyIgICBBbGlhcz0i5rK55L2T56ev57O75pWwIiBVbml0PSIiICAgICAgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1byIgQWxpYXM9IuayueebuOm7j+W6piIgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0NvIiAgIEFsaWFzPSLmsrnljovnvKnns7vmlbAiIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IG9pbCBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9CdyIgICBBbGlhcz0i5rC05L2T56ev57O75pWwIiBVbml0PSJtMy9tMyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgd2F0ZXIgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9NaXV3IiBBbGlhcz0i5rC055u46buP5bqmIiAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjFlLTMwIiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3YXRlciB2aXNjb3NpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DdyIgICBBbGlhcz0i5rC05Y6L57yp57O75pWwIiBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCB3YXRlciBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9CZyIgICBBbGlhcz0i5rCU5L2T56ev57O75pWwIiBVbml0PSJtMy9tMyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgZ2FzIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1ZyIgQWxpYXM9IuawlOebuOm7j+W6piIgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgZ2FzIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0NnIiAgIEFsaWFzPSLmsJTljovnvKnns7vmlbAiIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IGdhcyBjb21wcmVzc2liaWxpdHkiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQo8L1Jvb3Q+DQo= \ No newline at end of file diff --git a/Bin/Config/Common/ModelParaDefinesNM_en.dat b/Bin/Config/Common/ModelParaDefinesNM_en.dat index a1226c0..00e84c3 100644 --- a/Bin/Config/Common/ModelParaDefinesNM_en.dat +++ b/Bin/Config/Common/ModelParaDefinesNM_en.dat @@ -1 +1 @@ -PD94bWwgdmVycup_mpac2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSoqKioqKioqKioqKiwzyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gICAgVGhpcyBmaWxlIGRlZmluZXMgcGFyYW1ldGVycyBmb3IgdGhlIFdUQUkgTnVtZXJpY2FsIChOTSkgICAgLS0+DQo8IS0tICAgIG1vZHVsZS4gT25seSByZXNlcnZvaXIsIHdlbGwsIGFuZCBnZW9tZXRyeSBwYXJhbWV0ZXJzICAgICAgICAtLT4NCjwhLS0gICAgcmVxdWlyZWQgYnkgdGhlIFBFQkkgc29sdmVyIGFyZSBpbmNsdWRlZC4gICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI2MDYxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi0tPg0KDQo8IS0tDQogICAgUGFyYW1ldGVyIHNjb3BlOiByZXNlcnZvaXIsIHdlbGwsIGFuZCBnZW9tZXRyeSBwYXJhbWV0ZXJzIHJlcXVpcmVkIGJ5IHRoZSBQRUJJIHNvbHZlcg0KICAgIENvcnJlc3BvbmRzIHRvIEhYX05XVE1fTU9ERUxfSU5QVVQgc3RydWN0IGZpZWxkcw0KICAgIExvYWRlZCB2aWEgX3BhcmFIZWxwZXItPmxvYWRQYXJhRGVmaW5lcygpLCBzS2V5ID0gc19ObV9TZXJpZQ0KLS0+DQoNCjxSb290Pg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVzZXJ2b2lyIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJoIiAgIEFsaWFzPSJSZXNlcnZvaXIgVGhpY2tuZXNzIiAgICAgICAgIFVuaXQ9Im0iICAgICBEZWZhdWx0PSIxMCIgICAgTWF4PSIxMDAwMCIgIE1pbj0iMWUtMDUiICBEaWdpdD0iMyIgIERlc2M9InJlc2Vydm9pciB0aGlja25lc3MiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlBpIiAgQWxpYXM9IkluaXRpYWwgUHJlc3N1cmUiICAgICAgICAgICAgVW5pdD0iTVBhIiAgIERlZmF1bHQ9IjQwIiAgICBNYXg9IjUwMCIgICAgTWluPSIwLjEiICAgIERpZ2l0PSI1IiAgRGVzYz0iaW5pdGlhbCBmb3JtYXRpb24gcHJlc3N1cmUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IksiICAgQWxpYXM9IlBlcm1lYWJpbGl0eSIgICAgICAgICAgICAgICAgVW5pdD0ibUQiICAgIERlZmF1bHQ9IjEiICAgICBNYXg9IjEwMDAwIiAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0icGVybWVhYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJwaGkiIEFsaWFzPSJQb3Jvc2l0eSIgICAgICAgICAgICAgICAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxIiAgICAgIE1pbj0iMWUtMDUiICBEaWdpdD0iNCIgIERlc2M9InBvcm9zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJDdGkiIEFsaWFzPSJUb3RhbCBDb21wcmVzc2liaWxpdHkiICAgICAgIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwLjAwMSIgTWF4PSIxMCIgICAgIE1pbj0iMWUtMzAiICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InRvdGFsIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQ2YiICBBbGlhcz0iUm9jayBDb21wcmVzc2liaWxpdHkiICAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDAxIiBNYXg9IjEwIiAgICBNaW49IjFlLTMwIiAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyb2NrIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iU29pIiBBbGlhcz0iSW5pdGlhbCBPaWwgU2F0dXJhdGlvbiIgICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMC44IiAgIE1heD0iMSIgICAgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIG9pbCBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJTd2kiIEFsaWFzPSJJbml0aWFsIFdhdGVyIFNhdHVyYXRpb24iICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjIiICAgTWF4PSIxIiAgICAgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9ImluaXRpYWwgd2F0ZXIgc2F0dXJhdGlvbiIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJXZWxsIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1giICAgIEFsaWFzPSJYIENvb3JkaW5hdGUiICAgICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1kiICAgIEFsaWFzPSJZIENvb3JkaW5hdGUiICAgICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1J3IiAgIEFsaWFzPSJXZWxsYm9yZSBSYWRpdXMiICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxMCIgICAgIE1pbj0iMC4wMDEiICBEaWdpdD0iNiIgIERlc2M9IndlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19Ta2luIiBBbGlhcz0iU2tpbiBGYWN0b3IiICAgICAgICAgICAgIFVuaXQ9IiIgICAgICAgRGVmYXVsdD0iMCIgICAgIE1heD0iMTAwMCIgICBNaW49Ii0xMDAiICAgRGlnaXQ9IjYiICBEZXNjPSJza2luIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19DIiAgICBBbGlhcz0iV2VsbGJvcmUgU3RvcmFnZSBDb2VmZiIgIFVuaXQ9Im1eMy9NUGEiIERlZmF1bHQ9IjAiICAgICBNYXg9IjEwMDAiICAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0id2VsbGJvcmUgc3RvcmFnZSBjb2VmZmljaWVudCIgLz4KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1dlbGxMZW5ndGgiICAgICAgICAgQWxpYXM9Ikhvcml6b250YWwgV2VsbCBMZW5ndGgiIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjIwMCIgIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiBEZXNjPSJob3Jpem9udGFsIHdlbGwgbGVuZ3RoIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0RyYWluQW5nbGUiICAgICAgICAgQWxpYXM9IkRyYWluIEFuZ2xlIiAgICAgICAgICAgIFVuaXQ9Im8iICAgIERlZmF1bHQ9IjAiICAgIE1heD0iMzYwIiAgIE1pbj0iLTM2MCIgIERpZ2l0PSI2IiBEZXNjPSJob3Jpem9udGFsIHdlbGwgZHJhaW4gYW5nbGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfTnVtYmVyT2ZGcmFjdHVyZXMiICBBbGlhcz0iTnVtYmVyIG9mIEZyYWN0dXJlcyIgICAgVW5pdD0iIiAgICAgRGVmYXVsdD0iMTUiICAgTWF4PSIxMDAwIiAgTWluPSIyIiAgICAgRGlnaXQ9IjAiIERlc2M9Im51bWJlciBvZiBmcmFjdHVyZXMiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfRnJhY3R1cmVIYWxmTGVuZ3RoIiBBbGlhcz0iRnJhY3R1cmUgSGFsZi1MZW5ndGgiICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iNTAiICAgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGhhbGYtbGVuZ3RoIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0ZyYWN0dXJlQW5nbGUiICAgICAgQWxpYXM9IkZyYWN0dXJlIEFuZ2xlIiAgICAgICAgIFVuaXQ9Im8iICAgIERlZmF1bHQ9IjkwIiAgIE1heD0iMzYwIiAgIE1pbj0iLTM2MCIgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBhbmdsZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19EZmMiICAgICAgICAgICAgICAgIEFsaWFzPSJGcmFjdHVyZSBDb25kdWN0aXZpdHkiICBVbml0PSJtZC5tIiBEZWZhdWx0PSIxMDAwIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgY29uZHVjdGl2aXR5IiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IkluZGVwZW5kZW50IEZyYWN0dXJlIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX1gwIiBBbGlhcz0iU3RhcnQgWDAiICAgICAgICAgICAgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIHN0YXJ0IFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9ZMCIgQWxpYXM9IlN0YXJ0IFkwIiAgICAgICAgICAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBzdGFydCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWDEiIEFsaWFzPSJFbmQgWDEiICAgICAgICAgICAgICAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgZW5kIFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9ZMSIgQWxpYXM9IkVuZCBZMSIgICAgICAgICAgICAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBlbmQgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX0ZDIiBBbGlhcz0iRnJhY3R1cmUgQ29uZHVjdGl2aXR5IiBVbml0PSJtZC5tIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICAgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGNvbmR1Y3Rpdml0eSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJGYXVsdCBQYXJhbWV0ZXJzIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWDAiIEFsaWFzPSJTdGFydCBYMCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBzdGFydCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1kwIiBBbGlhcz0iU3RhcnQgWTAiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZmF1bHQgc3RhcnQgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9YMSIgQWxpYXM9IkVuZCBYMSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBlbmQgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9ZMSIgQWxpYXM9IkVuZCBZMSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBlbmQgWSBjb29yZGluYXRlIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IlJlY3RhbmdsZSBCb3VuZGFyeSBQYXJhbWV0ZXJzIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWE1pbiIgQWxpYXM9IkxlZnQgQm91bmRhcnkgWCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJyZWN0YW5nbGUgYm91bmRhcnkgbWluaW11bSBYIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUl9ZTWluIiBBbGlhcz0iQm90dG9tIEJvdW5kYXJ5IFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1pbmltdW0gWSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWE1heCIgQWxpYXM9IlJpZ2h0IEJvdW5kYXJ5IFgiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1heGltdW0gWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWU1heCIgQWxpYXM9IlRvcCBCb3VuZGFyeSBZIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InJlY3RhbmdsZSBib3VuZGFyeSBtYXhpbXVtIFkiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iQ2lyY2xlIEJvdW5kYXJ5IFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCQ19DZW50ZXJYIiBBbGlhcz0iQ2VudGVyIFgiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iY2lyY2xlIGJvdW5kYXJ5IGNlbnRlciBYIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCQ19DZW50ZXJZIiBBbGlhcz0iQ2VudGVyIFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iY2lyY2xlIGJvdW5kYXJ5IGNlbnRlciBZIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCQ19SYWRpdXMiICBBbGlhcz0iUmFkaXVzIiAgIFVuaXQ9Im0iIERlZmF1bHQ9IjEiIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiICBEaWdpdD0iNiIgRGVzYz0iY2lyY2xlIGJvdW5kYXJ5IHJhZGl1cyIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJQb2x5Z29uIEJvdW5kYXJ5IFZlcnRleCBQYXJhbWV0ZXJzIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlBfWCIgQWxpYXM9IlggQ29vcmRpbmF0ZSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJwb2x5Z29uIGJvdW5kYXJ5IHZlcnRleCBYIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUF9ZIiBBbGlhcz0iWSBDb29yZGluYXRlIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InBvbHlnb24gYm91bmRhcnkgdmVydGV4IFkiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVnaW9uIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSX0xlYWthZ2UiIEFsaWFzPSJMZWFrYWdlIENvZWZmaWNpZW50IiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgRGlnaXQ9IjYiIERlc2M9InJlZ2lvbiBsZWFrYWdlIGNvZWZmaWNpZW50IiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IlJlZ2lvbiBNYXJrIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSTV9Db21XIiAgICAgICBBbGlhcz0iU3RvcmFnZSBSYXRpbyIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjEiICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiBEZXNjPSJzdG9yYWdlIHJhdGlvIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSTV9Db21LciIgICAgICBBbGlhcz0iTW9iaWxpdHkgUmF0aW8iIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxMDAwIiBNaW49IjAuMDAxIiBEaWdpdD0iNiIgRGVzYz0ibW9iaWxpdHkgcmF0aW8iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX05ldFRvR3Jvc3MiIEFsaWFzPSJOZXQtdG8tR3Jvc3MiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxIiAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgRGVzYz0ibmV0LXRvLWdyb3NzIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8IS0tIFJlc3VsdCBwYXJhbWV0ZXJzIGFyZSBzZWxlY3RlZCBvbmx5IGJ5IHJlYnVpbGRSZXN1bHRQYXJhcygpLiAtLT4NCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJSZXN1bHQgUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9XX1J3IiAgIEFsaWFzPSJXZWxsIFJhZGl1cyIgICAgICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwLjEiICAgIE1heD0iMTAiICAgIE1pbj0iMC4wMDEiICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3ZWxsYm9yZSByYWRpdXMiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9XX0RmYyIgIEFsaWFzPSJGcmFjdHVyZSBDb25kdWN0aXZpdHkiICBVbml0PSJtZC5tIiAgIERlZmF1bHQ9IjEwMDAiICAgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGZyYWN0dXJlIGNvbmR1Y3Rpdml0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfU2tpbiIgQWxpYXM9IlNraW4gRmFjdG9yIiAgICAgICAgICAgIFVuaXQ9IiIgICAgICAgRGVmYXVsdD0iMCIgICAgICBNYXg9IjEwMDAiICBNaW49Ii0xMDAiICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgc2tpbiBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9XX0MiICAgIEFsaWFzPSJXZWxsYm9yZSBTdG9yYWdlIENvZWZmIiBVbml0PSJtXjMvTVBhIiBEZWZhdWx0PSIwIiAgICAgIE1heD0iMTAwMCIgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3ZWxsYm9yZSBzdG9yYWdlIGNvZWZmaWNpZW50IiAvPgoNCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1BpIiAgQWxpYXM9IkluaXRpYWwgRm9ybWF0aW9uIFByZXNzdXJlIiBVbml0PSJNUGEiICAgRGVmYXVsdD0iNDAiICAgICBNYXg9IjUwMCIgICBNaW49IjAuMSIgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIGZvcm1hdGlvbiBwcmVzc3VyZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0siICAgQWxpYXM9IlBlcm1lYWJpbGl0eSIgICAgICAgICAgICAgICBVbml0PSJtRCIgICAgRGVmYXVsdD0iMSIgICAgICBNYXg9IjEwMDAwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBwZXJtZWFiaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9oIiAgIEFsaWFzPSJSZXNlcnZvaXIgVGhpY2tuZXNzIiAgICAgICAgVW5pdD0ibSIgICAgIERlZmF1bHQ9IjEwIiAgICAgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgcmVzZXJ2b2lyIHRoaWNrbmVzcyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X3BoaSIgQWxpYXM9IlBvcm9zaXR5IiAgICAgICAgICAgICAgICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMC4xIiAgICBNYXg9IjEiICAgICBNaW49IjFlLTA1IiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBwb3Jvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0N0aSIgQWxpYXM9IlRvdGFsIENvbXByZXNzaWJpbGl0eSIgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDEiICBNYXg9IjEwIiAgICBNaW49IjFlLTMwIiBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCB0b3RhbCBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DZiIgIEFsaWFzPSJSb2NrIENvbXByZXNzaWJpbGl0eSIgICAgICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAwMSIgTWF4PSIxMCIgICAgTWluPSIxZS0zMCIgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgcm9jayBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9Tb2kiIEFsaWFzPSJJbml0aWFsIE9pbCBTYXR1cmF0aW9uIiAgICAgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuOCIgICAgTWF4PSIxIiAgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBvaWwgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1NnaSIgQWxpYXM9IkluaXRpYWwgR2FzIFNhdHVyYXRpb24iICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMCIgICAgICBNYXg9IjEiICAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIGdhcyBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfU3dpIiBBbGlhcz0iSW5pdGlhbCBXYXRlciBTYXR1cmF0aW9uIiAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjIiICAgIE1heD0iMSIgICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGluaXRpYWwgd2F0ZXIgc2F0dXJhdGlvbiIgLz4NCg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQm8iICAgQWxpYXM9Ik9pbCBGb3JtYXRpb24gVm9sdW1lIEZhY3RvciIgICBVbml0PSJtMy9tMyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1byIgQWxpYXM9Ik9pbCBWaXNjb3NpdHkiICAgICAgICAgICAgICAgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0NvIiAgIEFsaWFzPSJPaWwgQ29tcHJlc3NpYmlsaXR5IiAgICAgICAgICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgb2lsIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0J3IiAgIEFsaWFzPSJXYXRlciBGb3JtYXRpb24gVm9sdW1lIEZhY3RvciIgVW5pdD0ibTMvbTMiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdhdGVyIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1dyIgQWxpYXM9IldhdGVyIFZpc2Nvc2l0eSIgICAgICAgICAgICAgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgd2F0ZXIgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ3ciICAgQWxpYXM9IldhdGVyIENvbXByZXNzaWJpbGl0eSIgICAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCB3YXRlciBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9CZyIgICBBbGlhcz0iR2FzIEZvcm1hdGlvbiBWb2x1bWUgRmFjdG9yIiAgIFVuaXQ9Im0zL20zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBnYXMgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9NaXVnIiBBbGlhcz0iR2FzIFZpc2Nvc2l0eSIgICAgICAgICAgICAgICAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjFlLTMwIiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBnYXMgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ2ciICAgQWxpYXM9IkdhcyBDb21wcmVzc2liaWxpdHkiICAgICAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCBnYXMgY29tcHJlc3NpYmlsaXR5IiAvPg0KICA8L1BhcmFHcm91cD4NCg0KPC9Sb290Pg0K \ No newline at end of file +PD94bWwgdmVycup_mpac2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSoqKioqKioqKioqKiwzyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gICAgVGhpcyBmaWxlIGRlZmluZXMgcGFyYW1ldGVycyBmb3IgdGhlIFdUQUkgTnVtZXJpY2FsIChOTSkgICAgLS0+DQo8IS0tICAgIG1vZHVsZS4gT25seSByZXNlcnZvaXIsIHdlbGwsIGFuZCBnZW9tZXRyeSBwYXJhbWV0ZXJzICAgICAgICAtLT4NCjwhLS0gICAgcmVxdWlyZWQgYnkgdGhlIFBFQkkgc29sdmVyIGFyZSBpbmNsdWRlZC4gICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI2MDYxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi0tPg0KDQo8IS0tDQogICAgUGFyYW1ldGVyIHNjb3BlOiByZXNlcnZvaXIsIHdlbGwsIGFuZCBnZW9tZXRyeSBwYXJhbWV0ZXJzIHJlcXVpcmVkIGJ5IHRoZSBQRUJJIHNvbHZlcg0KICAgIENvcnJlc3BvbmRzIHRvIEhYX05XVE1fTU9ERUxfSU5QVVQgc3RydWN0IGZpZWxkcw0KICAgIExvYWRlZCB2aWEgX3BhcmFIZWxwZXItPmxvYWRQYXJhRGVmaW5lcygpLCBzS2V5ID0gc19ObV9TZXJpZQ0KLS0+DQoNCjxSb290Pg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVzZXJ2b2lyIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJoIiAgIEFsaWFzPSJSZXNlcnZvaXIgVGhpY2tuZXNzIiAgICAgICAgIFVuaXQ9Im0iICAgICBEZWZhdWx0PSIxMCIgICAgTWF4PSIxMDAwMCIgIE1pbj0iMWUtMDUiICBEaWdpdD0iMyIgIERlc2M9InJlc2Vydm9pciB0aGlja25lc3MiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlBpIiAgQWxpYXM9IkluaXRpYWwgUHJlc3N1cmUiICAgICAgICAgICAgVW5pdD0iTVBhIiAgIERlZmF1bHQ9IjQwIiAgICBNYXg9IjUwMCIgICAgTWluPSIwLjEiICAgIERpZ2l0PSI1IiAgRGVzYz0iaW5pdGlhbCBmb3JtYXRpb24gcHJlc3N1cmUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IksiICAgQWxpYXM9IlBlcm1lYWJpbGl0eSIgICAgICAgICAgICAgICAgVW5pdD0ibUQiICAgIERlZmF1bHQ9IjI1IiAgICBNYXg9IjEwMDAwIiAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0icGVybWVhYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJwaGkiIEFsaWFzPSJQb3Jvc2l0eSIgICAgICAgICAgICAgICAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxIiAgICAgIE1pbj0iMWUtMDUiICBEaWdpdD0iNCIgIERlc2M9InBvcm9zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCbyIgIEFsaWFzPSJPaWwgRm9ybWF0aW9uIFZvbHVtZSBGYWN0b3IiIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIxLjIiICAgTWF4PSIxMCIgICAgIE1pbj0iMWUtMDYiICBEaWdpdD0iNiIgIERlc2M9Im9pbCBmb3JtYXRpb24gdm9sdW1lIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iTWl1byIgQWxpYXM9Ik9pbCBWaXNjb3NpdHkiICAgICAgICAgICAgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMC41IiAgIE1heD0iMTAwMDAiICBNaW49IjFlLTA2IiAgRGlnaXQ9IjYiICBEZXNjPSJvaWwgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJLeEt5IiBBbGlhcz0iSG9yaXpvbnRhbCBQZXJtZWFiaWxpdHkgUmF0aW8iIFVuaXQ9IiIgICBEZWZhdWx0PSIxIiAgICAgTWF4PSIxMDAwIiAgIE1pbj0iMWUtMDYiICBEaWdpdD0iNiIgIERlc2M9Imhvcml6b250YWwgcGVybWVhYmlsaXR5IHJhdGlvIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJDdGkiIEFsaWFzPSJUb3RhbCBDb21wcmVzc2liaWxpdHkiICAgICAgIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwLjAwMSIgTWF4PSIxMCIgICAgIE1pbj0iMWUtMzAiICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InRvdGFsIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQ2YiICBBbGlhcz0iUm9jayBDb21wcmVzc2liaWxpdHkiICAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDAxIiBNYXg9IjEwIiAgICBNaW49IjFlLTMwIiAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyb2NrIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iU29pIiBBbGlhcz0iSW5pdGlhbCBPaWwgU2F0dXJhdGlvbiIgICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMC44IiAgIE1heD0iMSIgICAgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIG9pbCBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJTd2kiIEFsaWFzPSJJbml0aWFsIFdhdGVyIFNhdHVyYXRpb24iICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjIiICAgTWF4PSIxIiAgICAgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9ImluaXRpYWwgd2F0ZXIgc2F0dXJhdGlvbiIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJXZWxsIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1giICAgIEFsaWFzPSJYIENvb3JkaW5hdGUiICAgICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1kiICAgIEFsaWFzPSJZIENvb3JkaW5hdGUiICAgICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1J3IiAgIEFsaWFzPSJXZWxsYm9yZSBSYWRpdXMiICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxMCIgICAgIE1pbj0iMC4wMDEiICBEaWdpdD0iNiIgIERlc2M9IndlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19Ta2luIiBBbGlhcz0iU2tpbiBGYWN0b3IiICAgICAgICAgICAgIFVuaXQ9IiIgICAgICAgRGVmYXVsdD0iMCIgICAgIE1heD0iMTAwMCIgICBNaW49Ii0xMDAiICAgRGlnaXQ9IjYiICBEZXNjPSJza2luIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19DIiAgICBBbGlhcz0iV2VsbGJvcmUgU3RvcmFnZSBDb2VmZiIgIFVuaXQ9Im1eMy9NUGEiIERlZmF1bHQ9IjAiICAgICBNYXg9IjEwMDAiICAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0id2VsbGJvcmUgc3RvcmFnZSBjb2VmZmljaWVudCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19XZWxsTGVuZ3RoIiAgICAgICAgIEFsaWFzPSJIb3Jpem9udGFsIFdlbGwgTGVuZ3RoIiBVbml0PSJtIiAgICBEZWZhdWx0PSIyMDAiICBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iNiIgRGVzYz0iaG9yaXpvbnRhbCB3ZWxsIGxlbmd0aCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19EcmFpbkFuZ2xlIiAgICAgICAgIEFsaWFzPSJEcmFpbiBBbmdsZSIgICAgICAgICAgICBVbml0PSLCsCIgICAgRGVmYXVsdD0iMCIgICAgTWF4PSIzNjAiICAgTWluPSItMzYwIiAgRGlnaXQ9IjYiIERlc2M9Imhvcml6b250YWwgd2VsbCBkcmFpbiBhbmdsZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19OdW1iZXJPZkZyYWN0dXJlcyIgIEFsaWFzPSJOdW1iZXIgb2YgRnJhY3R1cmVzIiAgICBVbml0PSIiICAgICBEZWZhdWx0PSIxNSIgICBNYXg9IjEwMDAiICBNaW49IjIiICAgICBEaWdpdD0iMCIgRGVzYz0ibnVtYmVyIG9mIGZyYWN0dXJlcyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19GcmFjdHVyZUhhbGZMZW5ndGgiIEFsaWFzPSJGcmFjdHVyZSBIYWxmLUxlbmd0aCIgICBVbml0PSJtIiAgICBEZWZhdWx0PSI1MCIgICBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgaGFsZi1sZW5ndGgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfRnJhY3R1cmVBbmdsZSIgICAgICBBbGlhcz0iRnJhY3R1cmUgQW5nbGUiICAgICAgICAgVW5pdD0iwrAiICAgIERlZmF1bHQ9IjkwIiAgIE1heD0iMzYwIiAgIE1pbj0iLTM2MCIgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBhbmdsZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19EZmMiICAgICAgICAgICAgICAgIEFsaWFzPSJGcmFjdHVyZSBDb25kdWN0aXZpdHkiICBVbml0PSJtRC5tIiBEZWZhdWx0PSIxMDAwIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgY29uZHVjdGl2aXR5IiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IkluZGVwZW5kZW50IEZyYWN0dXJlIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX1gwIiBBbGlhcz0iU3RhcnQgWDAiICAgICAgICAgICAgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIHN0YXJ0IFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9ZMCIgQWxpYXM9IlN0YXJ0IFkwIiAgICAgICAgICAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBzdGFydCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWDEiIEFsaWFzPSJFbmQgWDEiICAgICAgICAgICAgICAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgZW5kIFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9ZMSIgQWxpYXM9IkVuZCBZMSIgICAgICAgICAgICAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBlbmQgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX0ZDIiBBbGlhcz0iRnJhY3R1cmUgQ29uZHVjdGl2aXR5IiBVbml0PSJtRC5tIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICAgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGNvbmR1Y3Rpdml0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9EVyIgQWxpYXM9IkZyYWN0dXJlIFdpZHRoIFBhcmFtZXRlciIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSB3aWR0aCBwYXJhbWV0ZXIiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iRmF1bHQgUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1gwIiBBbGlhcz0iU3RhcnQgWDAiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZmF1bHQgc3RhcnQgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9ZMCIgQWxpYXM9IlN0YXJ0IFkwIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IHN0YXJ0IFkgY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWDEiIEFsaWFzPSJFbmQgWDEiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZmF1bHQgZW5kIFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWTEiIEFsaWFzPSJFbmQgWTEiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZmF1bHQgZW5kIFkgY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfTGVha2FnZSIgQWxpYXM9IkxlYWthZ2UgQ29lZmZpY2llbnQiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiBEaWdpdD0iNiIgRGVzYz0iZmF1bHQgbGVha2FnZSBjb2VmZmljaWVudCIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJSZWN0YW5nbGUgQm91bmRhcnkgUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJSX1hNaW4iIEFsaWFzPSJMZWZ0IEJvdW5kYXJ5IFgiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1pbmltdW0gWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWU1pbiIgQWxpYXM9IkJvdHRvbSBCb3VuZGFyeSBZIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InJlY3RhbmdsZSBib3VuZGFyeSBtaW5pbXVtIFkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJSX1hNYXgiIEFsaWFzPSJSaWdodCBCb3VuZGFyeSBYIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InJlY3RhbmdsZSBib3VuZGFyeSBtYXhpbXVtIFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJSX1lNYXgiIEFsaWFzPSJUb3AgQm91bmRhcnkgWSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJyZWN0YW5nbGUgYm91bmRhcnkgbWF4aW11bSBZIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IkNpcmNsZSBCb3VuZGFyeSBQYXJhbWV0ZXJzIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQkNfQ2VudGVyWCIgQWxpYXM9IkNlbnRlciBYIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImNpcmNsZSBib3VuZGFyeSBjZW50ZXIgWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQkNfQ2VudGVyWSIgQWxpYXM9IkNlbnRlciBZIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImNpcmNsZSBib3VuZGFyeSBjZW50ZXIgWSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQkNfUmFkaXVzIiAgQWxpYXM9IlJhZGl1cyIgICBVbml0PSJtIiBEZWZhdWx0PSIxIiBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiAgRGlnaXQ9IjYiIERlc2M9ImNpcmNsZSBib3VuZGFyeSByYWRpdXMiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUG9seWdvbiBCb3VuZGFyeSBWZXJ0ZXggUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJQX1giIEFsaWFzPSJYIENvb3JkaW5hdGUiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icG9seWdvbiBib3VuZGFyeSB2ZXJ0ZXggWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlBfWSIgQWxpYXM9IlkgQ29vcmRpbmF0ZSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJwb2x5Z29uIGJvdW5kYXJ5IHZlcnRleCBZIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IlJlZ2lvbiBQYXJhbWV0ZXJzIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUl9MZWFrYWdlIiBBbGlhcz0iTGVha2FnZSBDb2VmZmljaWVudCIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJyZWdpb24gbGVha2FnZSBjb2VmZmljaWVudCIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJSZWdpb24gTWFyayBQYXJhbWV0ZXJzIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUk1fQ29tVyIgICAgICAgQWxpYXM9IlN0b3JhZ2UgUmF0aW8iIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxIiAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgRGVzYz0ic3RvcmFnZSByYXRpbyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUk1fQ29tS3IiICAgICAgQWxpYXM9Ik1vYmlsaXR5IFJhdGlvIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMTAwMCIgTWluPSIwLjAwMSIgRGlnaXQ9IjYiIERlc2M9Im1vYmlsaXR5IHJhdGlvIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSTV9OZXRUb0dyb3NzIiBBbGlhcz0iTmV0LXRvLUdyb3NzIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMSIgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiIERlc2M9Im5ldC10by1ncm9zcyIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPCEtLSBSZXN1bHQgcGFyYW1ldGVycyBhcmUgc2VsZWN0ZWQgb25seSBieSByZWJ1aWxkUmVzdWx0UGFyYXMoKS4gLS0+DQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVzdWx0IFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfV19SdyIgICBBbGlhcz0iV2VsbCBSYWRpdXMiICAgICAgICAgICAgIFVuaXQ9Im0iICAgICAgRGVmYXVsdD0iMC4xIiAgICBNYXg9IjEwIiAgICBNaW49IjAuMDAxIiAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgd2VsbGJvcmUgcmFkaXVzIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfV19EZmMiICBBbGlhcz0iRnJhY3R1cmUgQ29uZHVjdGl2aXR5IiAgVW5pdD0ibUQubSIgICBEZWZhdWx0PSIxMDAwIiAgIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBmcmFjdHVyZSBjb25kdWN0aXZpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9XX1NraW4iIEFsaWFzPSJTa2luIEZhY3RvciIgICAgICAgICAgICBVbml0PSIiICAgICAgIERlZmF1bHQ9IjAiICAgICAgTWF4PSIxMDAwIiAgTWluPSItMTAwIiAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHNraW4gZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfV19DIiAgICBBbGlhcz0iV2VsbGJvcmUgU3RvcmFnZSBDb2VmZiIgVW5pdD0ibV4zL01QYSIgRGVmYXVsdD0iMCIgICAgICBNYXg9IjEwMDAiICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgd2VsbGJvcmUgc3RvcmFnZSBjb2VmZmljaWVudCIgLz4NCg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfUGkiICBBbGlhcz0iSW5pdGlhbCBGb3JtYXRpb24gUHJlc3N1cmUiIFVuaXQ9Ik1QYSIgICBEZWZhdWx0PSI0MCIgICAgIE1heD0iNTAwIiAgIE1pbj0iMC4xIiAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGluaXRpYWwgZm9ybWF0aW9uIHByZXNzdXJlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfSyIgICBBbGlhcz0iUGVybWVhYmlsaXR5IiAgICAgICAgICAgICAgIFVuaXQ9Im1EIiAgICBEZWZhdWx0PSIyNSIgICAgIE1heD0iMTAwMDAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHBlcm1lYWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X2giICAgQWxpYXM9IlJlc2Vydm9pciBUaGlja25lc3MiICAgICAgICBVbml0PSJtIiAgICAgRGVmYXVsdD0iMTAiICAgICBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCByZXNlcnZvaXIgdGhpY2tuZXNzIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfcGhpIiBBbGlhcz0iUG9yb3NpdHkiICAgICAgICAgICAgICAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjEiICAgIE1heD0iMSIgICAgIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHBvcm9zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ3RpIiBBbGlhcz0iVG90YWwgQ29tcHJlc3NpYmlsaXR5IiAgICAgIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwLjAwMSIgIE1heD0iMTAiICAgIE1pbj0iMWUtMzAiIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IHRvdGFsIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0NmIiAgQWxpYXM9IlJvY2sgQ29tcHJlc3NpYmlsaXR5IiAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDAxIiBNYXg9IjEwIiAgICBNaW49IjFlLTMwIiBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCByb2NrIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1NvaSIgQWxpYXM9IkluaXRpYWwgT2lsIFNhdHVyYXRpb24iICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMC44IiAgICBNYXg9IjEiICAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIG9pbCBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfU2dpIiBBbGlhcz0iSW5pdGlhbCBHYXMgU2F0dXJhdGlvbiIgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwIiAgICAgIE1heD0iMSIgICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGluaXRpYWwgZ2FzIHNhdHVyYXRpb24iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9Td2kiIEFsaWFzPSJJbml0aWFsIFdhdGVyIFNhdHVyYXRpb24iICAgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuMiIgICAgTWF4PSIxIiAgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCB3YXRlciBzYXR1cmF0aW9uIiAvPg0KDQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9CbyIgICBBbGlhcz0iT2lsIEZvcm1hdGlvbiBWb2x1bWUgRmFjdG9yIiAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBvaWwgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9NaXVvIiBBbGlhcz0iT2lsIFZpc2Nvc2l0eSIgICAgICAgICAgICAgICAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjFlLTMwIiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBvaWwgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ28iICAgQWxpYXM9Ik9pbCBDb21wcmVzc2liaWxpdHkiICAgICAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCBvaWwgY29tcHJlc3NpYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQnciICAgQWxpYXM9IldhdGVyIEZvcm1hdGlvbiBWb2x1bWUgRmFjdG9yIiBVbml0PSJtMy9tMyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgd2F0ZXIgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9NaXV3IiBBbGlhcz0iV2F0ZXIgVmlzY29zaXR5IiAgICAgICAgICAgICAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjFlLTMwIiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3YXRlciB2aXNjb3NpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DdyIgICBBbGlhcz0iV2F0ZXIgQ29tcHJlc3NpYmlsaXR5IiAgICAgICAgIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IHdhdGVyIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0JnIiAgIEFsaWFzPSJHYXMgRm9ybWF0aW9uIFZvbHVtZSBGYWN0b3IiICAgVW5pdD0ibTMvbTMiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGdhcyBmb3JtYXRpb24gdm9sdW1lIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X01pdWciIEFsaWFzPSJHYXMgVmlzY29zaXR5IiAgICAgICAgICAgICAgICAgVW5pdD0ibVBhLnMiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMWUtMzAiIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGdhcyB2aXNjb3NpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DZyIgICBBbGlhcz0iR2FzIENvbXByZXNzaWJpbGl0eSIgICAgICAgICAgIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IGdhcyBjb21wcmVzc2liaWxpdHkiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQo8L1Jvb3Q+DQo= \ No newline at end of file diff --git a/Bin/Config/Common/UnitDefault_cn.dat b/Bin/Config/Common/UnitDefault_cn.dat index 7e3dd09..b97a271 100644 --- a/Bin/Config/Common/UnitDefault_cn.dat +++ b/Bin/Config/Common/UnitDefault_cn.dat @@ -1 +1 @@ -77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxSb290Pg0KICAgIDxUeXwzyBlT2Y+DQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMDHnu4TvvJrplb/luqYgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0ibGVuZ3RoIiBOYW1lPSJsZW5ndGgiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMTAxIiBVbml0PSJtIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDEwMiIgVW5pdD0ia20iIGs9IjEwMDAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDMiIFVuaXQ9ImNtIiBrPSIwLjAxIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMTA0IiBVbml0PSJtbSIgaz0iMC4wMDEiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDUiIFVuaXQ9ImluIiBrPSIwLjAyNTQiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDYiIFVuaXQ9ImZ0IiBrPSIwLjMwNDgiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDciIFVuaXQ9InlkIiBrPSIwLjkxNDQiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDgiIFVuaXQ9Im1pIiBrPSIxNjA5LjM0IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMTA5IiBVbml0PSJubWlsZSIgaz0iMTg1MiIgRGlnaXQ9IjAiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDExMCIgVW5pdD0ibm0iIGs9IjFlLTA5IiBEaWdpdD0iNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDAy57uE77ya5pe26Ze0ID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRpbWUiIE5hbWU9InRpbWUiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMjAxIiBVbml0PSJzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDIwMiIgVW5pdD0ibXMiIGs9IjAuMDAxIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMjAzIiBVbml0PSJ1cyIgaz0iMWUtMDYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAyMDQiIFVuaXQ9Im1pbiIgaz0iNjAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAyMDUiIFVuaXQ9ImgiIGs9IjM2MDAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAyMDYiIFVuaXQ9ImQiIGs9Ijg2NDAwIiBEaWdpdD0iMCIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDAz57uE77ya6LSo6YePID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9Im1hc3MiIE5hbWU9Im1hc3MiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzAxIiBVbml0PSJrZyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAzMDIiIFVuaXQ9ImciIGs9IjAuMDAxIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzAzIiBVbml0PSJ0b24iIGs9IjEwMDAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAzMDQiIFVuaXQ9ImxiIiBrPSIwLjQ1MzU5MjM3IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzA1IiBVbml0PSJveiIgaz0iMC4wMjgzNDk1IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzA2IiBVbml0PSJzdG9uIiBrPSI5MDcuMTg1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzA3IiBVbml0PSJsdG9uIiBrPSIxMDE2LjA1IiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA057uE77ya6KeS5bqmID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9ImFuZ2xlIiBOYW1lPSJhbmdsZSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA0MDEiIFVuaXQ9InJhZCIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA0MDIiIFVuaXQ9ImRlZyIgaz0iMC4wMTc0NTMyOTI1MTk5NDMzIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNDAzIiBVbml0PSJncmFkIiBrPSIwLjAxNTcwNzk2MzI2Nzk0OSIgRGlnaXQ9IjYiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwwNee7hO+8mumdouenryA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJhcmVhIiBOYW1lPSJhcmVhIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDUwMSIgVW5pdD0ibcKyIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDUwMiIgVW5pdD0ia23CsiIgaz0iMWU2IiBEaWdpdD0iMCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNTAzIiBVbml0PSJjbcKyIiBrPSIwLjAwMDEiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA1MDQiIFVuaXQ9ImZ0wrIiIGs9IjAuMDkyOTAzMDQiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA1MDUiIFVuaXQ9ImluwrIiIGs9IjAuMDAwNjQ1MTYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA1MDYiIFVuaXQ9ImFjcmUiIGs9IjQwNDYuODU2NDIyNCIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDUwNyIgVW5pdD0iaGEiIGs9IjEwMDAwIiBEaWdpdD0iMCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNTA4IiBVbml0PSJ5ZMKyIiBrPSIwLjgzNjEyNzM2IiBEaWdpdD0iNCIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA257uE77ya5L2T56evID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZvbHVtZSIgTmFtZT0idm9sdW1lIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwMSIgVW5pdD0ibcKzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwMiIgVW5pdD0iTCIgaz0iMC4wMDEiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDMiIFVuaXQ9Im1MIiBrPSIxZS0wNiIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwNCIgVW5pdD0iY23CsyIgaz0iMWUtMDYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDUiIFVuaXQ9ImNjIiBrPSIxZS0wNiIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwNiIgVW5pdD0iYmJsIiBrPSIwLjE1ODk4NzI5NDkyOCIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwNyIgVW5pdD0iZ2FsKFVTKSIgaz0iMC4wMDM3ODU0MTE3ODQiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDgiIFVuaXQ9ImdhbChVSykiIGs9IjAuMDA0NTQ2MDkiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDkiIFVuaXQ9ImZ0wrMiIGs9IjAuMDI4MzE2ODQ2NTkyIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNjEwIiBVbml0PSJpbsKzIiBrPSIxLjYzODcwNjRlLTA1IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNjExIiBVbml0PSJxdCIgaz0iMC4wMDA5NDYzNTI5NDYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MTIiIFVuaXQ9InB0IiBrPSIwLjAwMDQ3MzE3NjQ3MyIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYxMyIgVW5pdD0iZ2kiIGs9IjAuMDAwMTE4Mjk0MTE4IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNjE0IiBVbml0PSJhY3JlLmZ0IiBrPSIxMjMzLjQ4MTgzNzU0NzUyIiBEaWdpdD0iMyIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA357uE77ya6YCf5bqmID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZlbG9jaXR5IiBOYW1lPSJ2ZWxvY2l0eSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA3MDEiIFVuaXQ9Im0vcyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA3MDIiIFVuaXQ9ImttL2giIGs9IjAuMjc3Nzc3Nzc4IiBEaWdpdD0iNSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNzAzIiBVbml0PSJmdC9zIiBrPSIwLjMwNDgiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA3MDQiIFVuaXQ9Im1pbGUvaCIgaz0iMC40NDcwNCIgRGlnaXQ9IjUiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwwOOe7hO+8mua4qeW6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ0ZW1wZXJhdHVyZSIgTmFtZT0idGVtcGVyYXR1cmUiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwODAxIiBVbml0PSJLIiBrPSIxIiBiPSIwIiBEaWdpdD0iMiIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDgwMiIgVW5pdD0i4oSDIiBrPSIxIiBiPSIyNzMuMTUiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA4MDMiIFVuaXQ9ImRlZ0MiIGs9IjEiIGI9IjI3My4xNSIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDgwNCIgVW5pdD0iZGVnRiIgaz0iMC41NTU1NTU1NTU1NTU1NTYiIGI9IjI1NS4zNzIyMjIyMjIyMjIiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA4MDUiIFVuaXQ9IsKwRiIgaz0iMC41NTU1NTU1NTU1NTU1NTYiIGI9IjI1NS4zNzIyMjIyMjIyMjIiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA4MDYiIFVuaXQ9IlIiIGs9IjAuNTU1NTU1NTU1NTU1NTU2IiBiPSIwIiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA557uE77ya5rip5beuID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRlbXBlcmF0dXJlX2RlbHRhIiBOYW1lPSJ0ZW1wZXJhdHVyZV9kZWx0YSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA5MDEiIFVuaXQ9IksiIGs9IjEiIERpZ2l0PSIyIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwOTAyIiBVbml0PSLihIMiIGs9IjEiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA5MDMiIFVuaXQ9ImRlZ0MiIGs9IjEiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA5MDQiIFVuaXQ9ImRlZ0YiIGs9IjAuNTU1NTU1NTU1NTU1NTU2IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwOTA1IiBVbml0PSLCsEYiIGs9IjAuNTU1NTU1NTU1NTU1NTU2IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwOTA2IiBVbml0PSJSIiBrPSIwLjU1NTU1NTU1NTU1NTU1NiIgRGlnaXQ9IjIiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxMOe7hO+8muWcsOa4qeair+W6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJnZW90aGVybWFsZ3JhZGllbnQiIE5hbWU9Imdlb3RoZXJtYWxncmFkaWVudCI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDEiIFVuaXQ9IksvbSIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDIiIFVuaXQ9IuKEgy9rbSIgaz0iMC4wMDEiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDMiIFVuaXQ9ImRlZy9rbSIgaz0iMC4wMDEiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDQiIFVuaXQ9IsKwRi9mdCIgaz0iMS44MTgxODE4MTgxODE4MiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTAwNSIgVW5pdD0iRi9mdCIgaz0iMS44MTgxODE4MTgxODE4MiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTAwNiIgVW5pdD0iwrBGLzEwMGZ0IiBrPSIwLjAxODE4MTgxODE4MTgxODIiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDciIFVuaXQ9IkYvbWlsZSIgaz0iMC4wMzQ0ODI3NTg2MjA2ODk3IiBEaWdpdD0iMyIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDEx57uE77ya5Y6L5YqbID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InByZXNzdXJlIiBOYW1lPSJwcmVzc3VyZSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTExMDEiIFVuaXQ9IlBhIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwMiIgVW5pdD0ia1BhIiBrPSIxMDAwIiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTAzIiBVbml0PSJNUGEiIGs9IjFlNiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwNCIgVW5pdD0iYmFyIiBrPSIxMDAwMDAiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTExMDUiIFVuaXQ9Im1iYXIiIGs9IjEwMCIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwNiIgVW5pdD0icHNpIiBrPSI2ODk0Ljc1NzI5IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTA3IiBVbml0PSJhdG0iIGs9IjEwMTMyNSIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwOCIgVW5pdD0iYXQiIGs9Ijk4MDY2LjUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTExMDkiIFVuaXQ9ImtnZi9jbcKyIiBrPSI5ODA2Ni41IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTEwIiBVbml0PSJtbUhnIiBrPSIxMzMuMzIyMzY4IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTExIiBVbml0PSJUb3JyIiBrPSIxMzMuMzIyMzY4IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTEyIiBVbml0PSJtSDJPIiBrPSI5ODA2LjY1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTEzIiBVbml0PSJtbUgyTyIgaz0iOS44MDY2NSIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTExNCIgVW5pdD0iZHluL2NtwrIiIGs9IjAuMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxMue7hO+8muWvhuW6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJkZW5zaXR5IiBOYW1lPSJkZW5zaXR5Ij4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTIwMSIgVW5pdD0ia2cvbcKzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTIwMiIgVW5pdD0iZy9jbcKzIiBrPSIxMDAwIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjAzIiBVbml0PSJnL2NjIiBrPSIxMDAwIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA0IiBVbml0PSJsYi9mdMKzIiBrPSIxNi4wMTg0NjM0IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA1IiBVbml0PSJsYi9nYWwoVVMpIiBrPSIxMTkuODI2NDI3IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA2IiBVbml0PSJsYi9nYWwoVUspIiBrPSI5OS43NzY0IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA3IiBVbml0PSJsYi9iYmwiIGs9IjIuODUzIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA4IiBVbml0PSJnL2Z0wrMiIGs9IjAuMDM1MzE0NyIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTIwOSIgVW5pdD0iZy9jZiIgaz0iMC4wMzUzMTQ3IiBEaWdpdD0iMyIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDEz57uE77ya5Yqo5Yqb57KY5bqmID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZpc2Nvc2l0eSIgTmFtZT0idmlzY29zaXR5X2R5bmFtaWMiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMzAxIiBVbml0PSJQYcK3cyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEzMDIiIFVuaXQ9Im1QYcK3cyIgaz0iMC4wMDEiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEzMDMiIFVuaXQ9ImNQIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTMwNCIgVW5pdD0iUCIgaz0iMC4xIiBEaWdpdD0iNCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMzA1IiBVbml0PSJrZ2bCt3MvbcKyIiBrPSI5LjgwNjY1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMzA2IiBVbml0PSJsYmbCt3MvZnTCsiIgaz0iNDcuODgwMyIgRGlnaXQ9IjMiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxNOe7hO+8mui/kOWKqOeymOW6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ2aXNjb3NpdHlfa2luZW1hdGljIiBOYW1lPSJ2aXNjb3NpdHlfa2luZW1hdGljIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTQwMSIgVW5pdD0ibcKyL3MiIGs9IjEiIERpZ2l0PSI2IiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDAyIiBVbml0PSJtbcKyL3MiIGs9IjFlLTA2IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDAzIiBVbml0PSJjU3QiIGs9IjFlLTA2IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDA0IiBVbml0PSJTdCIgaz0iMC4wMDAxIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDA1IiBVbml0PSJjbcKyL3MiIGs9IjAuMDAwMSIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTQwNiIgVW5pdD0iZnTCsi9zIiBrPSIwLjA5MjkwMzA0IiBEaWdpdD0iNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDE157uE77ya5riX6YCP546HID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InBlcm1lYWJpbGl0eSIgTmFtZT0icGVybWVhYmlsaXR5Ij4NCg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNTAxIiBVbml0PSJEIiBrPSIxIiBEaWdpdD0iNCIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTUwMiIgVW5pdD0ibUQiIGs9IjAuMDAxIiBEaWdpdD0iNCIgLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTUwMyIgVW5pdD0iMS9jbcKyIiBrPSI5LjgxZSswNyIgRGlnaXQ9IjIiLz4NCg0KDQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMTbnu4TvvJrog73ph48gPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iZW5lcmd5IiBOYW1lPSJlbmVyZ3kiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNjAxIiBVbml0PSJKIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTYwMiIgVW5pdD0ia0oiIGs9IjEwMDAiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDMiIFVuaXQ9Ik1KIiBrPSIxZTYiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDQiIFVuaXQ9ImNhbCIgaz0iNC4xODQiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDUiIFVuaXQ9ImtjYWwiIGs9IjQxODQiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDYiIFVuaXQ9IkJ0dSIgaz0iMTA1NS4wNTU4NTI2MiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTYwNyIgVW5pdD0iQlRVIiBrPSIxMDU1LjA1NTg1MjYyIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNjA4IiBVbml0PSJrV8K3aCIgaz0iMy42ZTYiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDkiIFVuaXQ9ImZ0wrdsYmYiIGs9IjEuMzU1ODE3OTQ4IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNjEwIiBVbml0PSJrZ2bCt20iIGs9IjkuODA2NjUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MTEiIFVuaXQ9ImhwwrdoIiBrPSIyLjY4NDUyZTYiIERpZ2l0PSIzIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMTfnu4TvvJrlip/njocgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icG93ZXIiIE5hbWU9InBvd2VyIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTcwMSIgVW5pdD0iVyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE3MDIiIFVuaXQ9ImtXIiBrPSIxMDAwIiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNzAzIiBVbml0PSJNVyIgaz0iMWU2IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNzA0IiBVbml0PSJocCIgaz0iNzQ1LjY5OTg3MTU4MjI3IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNzA1IiBVbml0PSJCdHUvaCIgaz0iMC4yOTMwNzEwNyIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTcwNiIgVW5pdD0iY2FsL3MiIGs9IjQuMTg2OCIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTcwNyIgVW5pdD0ia2dmwrdtL3MiIGs9IjkuODA2NjUiIERpZ2l0PSIzIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMTjnu4TvvJrkvZPnp6/mtYHph48gPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iZmxvd19yYXRlX3ZvbHVtZSIgTmFtZT0iZmxvd19yYXRlX3ZvbHVtZSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE4MDEiIFVuaXQ9Im3Csy9kIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwMiIgVW5pdD0ibcKzL3MiIGs9Ijg2NDAwIiBEaWdpdD0iNiIgUmVtYXJrPSIxIG3Csy9zID0gODY0MDAgbcKzL2QiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwMyIgVW5pdD0ibcKzL2EiIGs9IjAuMDAyNzM5NzI2MDI3Mzk3MjYiIERpZ2l0PSI2IiBSZW1hcms9IjEgbcKzL2EgPSAxLzM2NSBtwrMvZCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxODA0IiBVbml0PSJzdGIvZCIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iMSBzdGIvZCDiiYggMSBtwrMvZCAo5bel56iL6L+R5Ly8KSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxODA1IiBVbml0PSJiYmwvZCIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iMSBiYmwvZCDiiYggMSBtwrMvZCAo5bel56iL6L+R5Ly8KSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxODA2IiBVbml0PSJmdMKzL3MiIGs9IjI0NDYuNTc1IiBEaWdpdD0iNiIgUmVtYXJrPSIxIGZ0wrMvcyA9IDI0NDYuNTc1IG3Csy9kIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE4MDciIFVuaXQ9ImZ0wrMvZCIgaz0iMC4wMjgzMTY4NDY1OTIiIERpZ2l0PSI2IiBSZW1hcms9IjEgZnTCsy9kID0gMC4wMjgzMTY4NDY1OTIgbcKzL2QiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwOCIgVW5pdD0iTU1zY2YvZCIgaz0iMjgzMTYuODQ2NTkyIiBEaWdpdD0iNCIgUmVtYXJrPSIxIE1Nc2NmL2QgPSAyODMxNi44NDY1OTIgbcKzL2QgKOeQhuaDs+awlOS9kykiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwOSIgVW5pdD0iTXNjZi9kIiBrPSIyOC4zMTY4NDY1OTIiIERpZ2l0PSI2IiBSZW1hcms9IjEgTXNjZi9kID0gMjguMzE2ODQ2NTkyIG3Csy9kICjnkIbmg7PmsJTkvZMpIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE4MTAiIFVuaXQ9IjEw4oG0Km3Csy9kIiBrPSIxMDAwMCIgRGlnaXQ9IjQiIFJlbWFyaz0iMSDkuIfmlrkv5aSpID0gMTAwMDAgbcKzL2QiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxOee7hO+8muWOi+e8qeezu+aVsCA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJjb21wcmVzc2liaWxpdHkiIE5hbWU9ImNvbXByZXNzaWJpbGl0eSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE5MDEiIFVuaXQ9IjEvTVBhIiBrPSIxIiBEaWdpdD0iNiIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTkwMiIgVW5pdD0iMS9QYSIgaz0iMWU2IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxOTAzIiBVbml0PSIxL3BzaSIgaz0iMTQ1LjAzNzczOCIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTkwNCIgVW5pdD0iMS9hdG0iIGs9IjkuODY5MjMyNjY3MTYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE5MDUiIFVuaXQ9IjEvYmFyIiBrPSIxMCIgRGlnaXQ9IjYiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwyMOe7hO+8mua1k+W6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJjb25jZW50cmF0aW9uIiBOYW1lPSJjb25jZW50cmF0aW9uIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwMSIgVW5pdD0ia2cvbcKzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwMiIgVW5pdD0iZy9MIiBrPSIxIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMDAzIiBVbml0PSJtZy9MIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwNCIgVW5pdD0izrxnL21MIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwNSIgVW5pdD0icHBtIiBrPSIwLjAwMSIgRGlnaXQ9IjQiIFJlbWFyaz0iYXNzdW1pbmcgMSBwcG0gPSAxIG1nL2tnIGluIHdhdGVyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIwMDYiIFVuaXQ9IktwcG0iIGs9IjEiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIwMDciIFVuaXQ9Im1vbC9twrMiIGs9IjEiIERpZ2l0PSIzIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMjHnu4TvvJrnmb7liIbmr5QgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icGVyY2VudCIgTmFtZT0icGVyY2VudCI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIxMDEiIFVuaXQ9IiUiIGs9IjEiIERpZ2l0PSIyIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMTAyIiBVbml0PSJwdSIgaz0iMSIgRGlnaXQ9IjIiIFJlbWFyaz0icGVyIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjEwMyIgVW5pdD0iZnJhY3Rpb24iIGs9IjEwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjEwNCIgVW5pdD0idi92IiBrPSIxMDAiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIxMDUiIFVuaXQ9Im3Csy9twrMiIGs9IjEwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwyMue7hO+8muaFouW6pu+8iOWjsOazou+8iSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJzbG93bmVzcyIgTmFtZT0ic2xvd25lc3MiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMjAxIiBVbml0PSJzL20iIGs9IjEiIERpZ2l0PSIzIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMjAyIiBVbml0PSJ1cy9tIiBrPSIxZS0wNiIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjIwMyIgVW5pdD0idXMvZnQiIGs9IjMuMjgwODM5ODk1MDEzMTJlLTA2IiBEaWdpdD0iNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDIz57uE77ya5pS+5bCE5oCnID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InJhZGlvYWN0aXZpdHkiIE5hbWU9InJhZGlvYWN0aXZpdHkiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMzAxIiBVbml0PSJBUEkiIGs9IjEiIERpZ2l0PSIxIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMzAyIiBVbml0PSJnQVBJIiBrPSIxIiBEaWdpdD0iMSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDI057uE77ya55S15Y6LID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZvbHRhZ2UiIE5hbWU9InZvbHRhZ2UiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNDAxIiBVbml0PSJWIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjQwMiIgVW5pdD0ibVYiIGs9IjAuMDAxIiBEaWdpdD0iNCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNDAzIiBVbml0PSJrViIgaz0iMTAwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwyNee7hO+8muWKmyA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJmb3JjZSIgTmFtZT0iZm9yY2UiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNTAxIiBVbml0PSJOIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjUwMiIgVW5pdD0ia04iIGs9IjEwMDAiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI1MDMiIFVuaXQ9ImxiZiIgaz0iNC40NDgyMjE2MTUyNjA1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNTA0IiBVbml0PSJrZ2YiIGs9IjkuODA2NjUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI1MDUiIFVuaXQ9ImR5biIgaz0iMWUtMDUiIERpZ2l0PSI2Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMjbnu4TvvJrpopHnjocgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iZnJlcXVlbmN5IiBOYW1lPSJmcmVxdWVuY3kiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNjAxIiBVbml0PSJIeiIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI2MDIiIFVuaXQ9ImtIeiIgaz0iMTAwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjYwMyIgVW5pdD0iTUh6IiBrPSIxZTYiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI2MDQiIFVuaXQ9IkdIeiIgaz0iMWU5IiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDI357uE77ya54Ot5a+8546HID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRoZXJtYWxfY29uZHVjdGl2aXR5IiBOYW1lPSJ0aGVybWFsX2NvbmR1Y3Rpdml0eSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI3MDEiIFVuaXQ9IlcvKG3Ct0spIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjcwMiIgVW5pdD0iVy8obcK34oSDKSIgaz0iMSIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjcwMyIgVW5pdD0iQnR1LyhowrdmdMK3wrBGKSIgaz0iMS43MzA3MzUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI3MDQiIFVuaXQ9ImNhbC8oY23Ct3PCt+KEgykiIGs9IjQxOC40IiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDI457uE77ya5q+U54Ot5a65ID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InNwZWNpZmljX2hlYXQiIE5hbWU9InNwZWNpZmljX2hlYXQiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyODAxIiBVbml0PSJKLyhrZ8K3SykiIGs9IjEiIERpZ2l0PSIzIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyODAyIiBVbml0PSJKLyhnwrdLKSIgaz0iMTAwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjgwMyIgVW5pdD0iY2FsLyhnwrfihIMpIiBrPSI0MTg0IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyODA0IiBVbml0PSJCdHUvKGxiwrfCsEYpIiBrPSI0MTg2LjgiIERpZ2l0PSIyIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMjnnu4TvvJrmkanlsJTotKjph48gPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0ibW9sYXJfbWFzcyIgTmFtZT0ibW9sYXJfbWFzcyI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI5MDEiIFVuaXQ9ImtnL21vbCIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI5MDIiIFVuaXQ9ImcvbW9sIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjkwMyIgVW5pdD0ibGIvbGJtb2wiIGs9IjAuNDUzNTkyMzciIERpZ2l0PSI0Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMzDnu4TvvJpVbmtub3duMSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJtb2xhcl9tYXNzIiBOYW1lPSJtb2xhcl9tYXNzIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzAwMSIgVW5pdD0ia2cvbW9sIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzAwMiIgVW5pdD0iZy9tb2wiIGs9IjAuMDAxIiBEaWdpdD0iNCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMDAzIiBVbml0PSJsYi9sYm1vbCIgaz0iMC40NTM1OTIzNyIgRGlnaXQ9IjQiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMzHnu4TvvJpVbmtub3duMSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ3cyIgTmFtZT0i55uQ5bqmIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzEwMSIgVW5pdD0ibWcvTCIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMTAyIiBVbml0PSLOvGcvbUwiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzEwMyIgVW5pdD0iZy9MIiBrPSIxMDAwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTMxMDQiIFVuaXQ9ImtnL21eMyIgaz0iMC4wMDEiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzEwNSIgVW5pdD0icHBtIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTMxMDYiIFVuaXQ9IktwcG0iIGs9IjEwMDAiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwzMue7hO+8mlVua25vd24xID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZpc2Nvc2l0eSIgTmFtZT0idmlzY29zaXR5Ij4KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMjAxIiBVbml0PSJQYS5zIiBrPSIxIi8+CiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwMiIgVW5pdD0ibVBhLnMiIGs9IjAuMDAxIi8+CiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwMyIgVW5pdD0iUCIgaz0iMC4xIi8+CiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwNCIgVW5pdD0iY1AiIGs9IjAuMDAxIi8+CiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwNSIgVW5pdD0iYmYucy9mdF4yIiBrPSI0Ny44ODAzIi8+CiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwNiIgVW5pdD0ia2dmLnMvbV4zIiBrPSI5LjgwNjY1Ii8+CiAgICAgICAgPC9Vbml0R3JvdXA+CgogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMzPnu4TvvJrkupXnrZLlgqjpm4bns7vmlbAgPT09PT09PT09PT09PT09PT09PT0gLS0+CiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJUb0RvMyIgTmFtZT0iVG9EbzMiPgogICAgICAgICAgICA8VW5pdCBJRD0iVTMzMDEiIFVuaXQ9Im1eMy9NUGEiIGs9IjEiIERpZ2l0PSI2IiBSZW1hcms9ImJhc2UgdW5pdCIvPgogICAgICAgIDwvVW5pdEdyb3VwPgoKICAgIDwvVHlwZU9mPgo8L1Jvb3Q+Cg== \ No newline at end of file +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxSb290Pg0KICAgIDxUeXwzyBlT2Y+DQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMDHnu4TvvJrplb/luqYgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0ibGVuZ3RoIiBOYW1lPSJsZW5ndGgiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMTAxIiBVbml0PSJtIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDEwMiIgVW5pdD0ia20iIGs9IjEwMDAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDMiIFVuaXQ9ImNtIiBrPSIwLjAxIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMTA0IiBVbml0PSJtbSIgaz0iMC4wMDEiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDUiIFVuaXQ9ImluIiBrPSIwLjAyNTQiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDYiIFVuaXQ9ImZ0IiBrPSIwLjMwNDgiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDciIFVuaXQ9InlkIiBrPSIwLjkxNDQiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDgiIFVuaXQ9Im1pIiBrPSIxNjA5LjM0IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMTA5IiBVbml0PSJubWlsZSIgaz0iMTg1MiIgRGlnaXQ9IjAiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDExMCIgVW5pdD0ibm0iIGs9IjFlLTA5IiBEaWdpdD0iNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDAy57uE77ya5pe26Ze0ID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRpbWUiIE5hbWU9InRpbWUiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMjAxIiBVbml0PSJzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDIwMiIgVW5pdD0ibXMiIGs9IjAuMDAxIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMjAzIiBVbml0PSJ1cyIgaz0iMWUtMDYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAyMDQiIFVuaXQ9Im1pbiIgaz0iNjAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAyMDUiIFVuaXQ9ImgiIGs9IjM2MDAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAyMDYiIFVuaXQ9ImQiIGs9Ijg2NDAwIiBEaWdpdD0iMCIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDAz57uE77ya6LSo6YePID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9Im1hc3MiIE5hbWU9Im1hc3MiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzAxIiBVbml0PSJrZyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAzMDIiIFVuaXQ9ImciIGs9IjAuMDAxIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzAzIiBVbml0PSJ0b24iIGs9IjEwMDAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAzMDQiIFVuaXQ9ImxiIiBrPSIwLjQ1MzU5MjM3IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzA1IiBVbml0PSJveiIgaz0iMC4wMjgzNDk1IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzA2IiBVbml0PSJzdG9uIiBrPSI5MDcuMTg1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzA3IiBVbml0PSJsdG9uIiBrPSIxMDE2LjA1IiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA057uE77ya6KeS5bqmID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9ImFuZ2xlIiBOYW1lPSJhbmdsZSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA0MDEiIFVuaXQ9InJhZCIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA0MDIiIFVuaXQ9ImRlZyIgaz0iMC4wMTc0NTMyOTI1MTk5NDMzIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNDAzIiBVbml0PSJncmFkIiBrPSIwLjAxNTcwNzk2MzI2Nzk0OSIgRGlnaXQ9IjYiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwwNee7hO+8mumdouenryA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJhcmVhIiBOYW1lPSJhcmVhIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDUwMSIgVW5pdD0ibcKyIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDUwMiIgVW5pdD0ia23CsiIgaz0iMWU2IiBEaWdpdD0iMCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNTAzIiBVbml0PSJjbcKyIiBrPSIwLjAwMDEiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA1MDQiIFVuaXQ9ImZ0wrIiIGs9IjAuMDkyOTAzMDQiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA1MDUiIFVuaXQ9ImluwrIiIGs9IjAuMDAwNjQ1MTYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA1MDYiIFVuaXQ9ImFjcmUiIGs9IjQwNDYuODU2NDIyNCIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDUwNyIgVW5pdD0iaGEiIGs9IjEwMDAwIiBEaWdpdD0iMCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNTA4IiBVbml0PSJ5ZMKyIiBrPSIwLjgzNjEyNzM2IiBEaWdpdD0iNCIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA257uE77ya5L2T56evID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZvbHVtZSIgTmFtZT0idm9sdW1lIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwMSIgVW5pdD0ibcKzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwMiIgVW5pdD0iTCIgaz0iMC4wMDEiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDMiIFVuaXQ9Im1MIiBrPSIxZS0wNiIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwNCIgVW5pdD0iY23CsyIgaz0iMWUtMDYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDUiIFVuaXQ9ImNjIiBrPSIxZS0wNiIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwNiIgVW5pdD0iYmJsIiBrPSIwLjE1ODk4NzI5NDkyOCIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwNyIgVW5pdD0iZ2FsKFVTKSIgaz0iMC4wMDM3ODU0MTE3ODQiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDgiIFVuaXQ9ImdhbChVSykiIGs9IjAuMDA0NTQ2MDkiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDkiIFVuaXQ9ImZ0wrMiIGs9IjAuMDI4MzE2ODQ2NTkyIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNjEwIiBVbml0PSJpbsKzIiBrPSIxLjYzODcwNjRlLTA1IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNjExIiBVbml0PSJxdCIgaz0iMC4wMDA5NDYzNTI5NDYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MTIiIFVuaXQ9InB0IiBrPSIwLjAwMDQ3MzE3NjQ3MyIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYxMyIgVW5pdD0iZ2kiIGs9IjAuMDAwMTE4Mjk0MTE4IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNjE0IiBVbml0PSJhY3JlLmZ0IiBrPSIxMjMzLjQ4MTgzNzU0NzUyIiBEaWdpdD0iMyIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA357uE77ya6YCf5bqmID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZlbG9jaXR5IiBOYW1lPSJ2ZWxvY2l0eSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA3MDEiIFVuaXQ9Im0vcyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA3MDIiIFVuaXQ9ImttL2giIGs9IjAuMjc3Nzc3Nzc4IiBEaWdpdD0iNSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNzAzIiBVbml0PSJmdC9zIiBrPSIwLjMwNDgiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA3MDQiIFVuaXQ9Im1pbGUvaCIgaz0iMC40NDcwNCIgRGlnaXQ9IjUiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwwOOe7hO+8mua4qeW6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ0ZW1wZXJhdHVyZSIgTmFtZT0idGVtcGVyYXR1cmUiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwODAxIiBVbml0PSJLIiBrPSIxIiBiPSIwIiBEaWdpdD0iMiIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDgwMiIgVW5pdD0i4oSDIiBrPSIxIiBiPSIyNzMuMTUiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA4MDMiIFVuaXQ9ImRlZ0MiIGs9IjEiIGI9IjI3My4xNSIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDgwNCIgVW5pdD0iZGVnRiIgaz0iMC41NTU1NTU1NTU1NTU1NTYiIGI9IjI1NS4zNzIyMjIyMjIyMjIiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA4MDUiIFVuaXQ9IsKwRiIgaz0iMC41NTU1NTU1NTU1NTU1NTYiIGI9IjI1NS4zNzIyMjIyMjIyMjIiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA4MDYiIFVuaXQ9IlIiIGs9IjAuNTU1NTU1NTU1NTU1NTU2IiBiPSIwIiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA557uE77ya5rip5beuID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRlbXBlcmF0dXJlX2RlbHRhIiBOYW1lPSJ0ZW1wZXJhdHVyZV9kZWx0YSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA5MDEiIFVuaXQ9IksiIGs9IjEiIERpZ2l0PSIyIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwOTAyIiBVbml0PSLihIMiIGs9IjEiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA5MDMiIFVuaXQ9ImRlZ0MiIGs9IjEiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA5MDQiIFVuaXQ9ImRlZ0YiIGs9IjAuNTU1NTU1NTU1NTU1NTU2IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwOTA1IiBVbml0PSLCsEYiIGs9IjAuNTU1NTU1NTU1NTU1NTU2IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwOTA2IiBVbml0PSJSIiBrPSIwLjU1NTU1NTU1NTU1NTU1NiIgRGlnaXQ9IjIiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxMOe7hO+8muWcsOa4qeair+W6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJnZW90aGVybWFsZ3JhZGllbnQiIE5hbWU9Imdlb3RoZXJtYWxncmFkaWVudCI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDEiIFVuaXQ9IksvbSIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDIiIFVuaXQ9IuKEgy9rbSIgaz0iMC4wMDEiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDMiIFVuaXQ9ImRlZy9rbSIgaz0iMC4wMDEiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDQiIFVuaXQ9IsKwRi9mdCIgaz0iMS44MTgxODE4MTgxODE4MiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTAwNSIgVW5pdD0iRi9mdCIgaz0iMS44MTgxODE4MTgxODE4MiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTAwNiIgVW5pdD0iwrBGLzEwMGZ0IiBrPSIwLjAxODE4MTgxODE4MTgxODIiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDciIFVuaXQ9IkYvbWlsZSIgaz0iMC4wMzQ0ODI3NTg2MjA2ODk3IiBEaWdpdD0iMyIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDEx57uE77ya5Y6L5YqbID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InByZXNzdXJlIiBOYW1lPSJwcmVzc3VyZSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTExMDEiIFVuaXQ9IlBhIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwMiIgVW5pdD0ia1BhIiBrPSIxMDAwIiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTAzIiBVbml0PSJNUGEiIGs9IjFlNiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwNCIgVW5pdD0iYmFyIiBrPSIxMDAwMDAiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTExMDUiIFVuaXQ9Im1iYXIiIGs9IjEwMCIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwNiIgVW5pdD0icHNpIiBrPSI2ODk0Ljc1NzI5IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTA3IiBVbml0PSJhdG0iIGs9IjEwMTMyNSIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwOCIgVW5pdD0iYXQiIGs9Ijk4MDY2LjUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTExMDkiIFVuaXQ9ImtnZi9jbcKyIiBrPSI5ODA2Ni41IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTEwIiBVbml0PSJtbUhnIiBrPSIxMzMuMzIyMzY4IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTExIiBVbml0PSJUb3JyIiBrPSIxMzMuMzIyMzY4IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTEyIiBVbml0PSJtSDJPIiBrPSI5ODA2LjY1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTEzIiBVbml0PSJtbUgyTyIgaz0iOS44MDY2NSIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTExNCIgVW5pdD0iZHluL2NtwrIiIGs9IjAuMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxMue7hO+8muWvhuW6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJkZW5zaXR5IiBOYW1lPSJkZW5zaXR5Ij4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTIwMSIgVW5pdD0ia2cvbcKzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTIwMiIgVW5pdD0iZy9jbcKzIiBrPSIxMDAwIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjAzIiBVbml0PSJnL2NjIiBrPSIxMDAwIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA0IiBVbml0PSJsYi9mdMKzIiBrPSIxNi4wMTg0NjM0IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA1IiBVbml0PSJsYi9nYWwoVVMpIiBrPSIxMTkuODI2NDI3IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA2IiBVbml0PSJsYi9nYWwoVUspIiBrPSI5OS43NzY0IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA3IiBVbml0PSJsYi9iYmwiIGs9IjIuODUzIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA4IiBVbml0PSJnL2Z0wrMiIGs9IjAuMDM1MzE0NyIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTIwOSIgVW5pdD0iZy9jZiIgaz0iMC4wMzUzMTQ3IiBEaWdpdD0iMyIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDEz57uE77ya5Yqo5Yqb57KY5bqmID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZpc2Nvc2l0eSIgTmFtZT0idmlzY29zaXR5X2R5bmFtaWMiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMzAxIiBVbml0PSJQYcK3cyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEzMDIiIFVuaXQ9Im1QYcK3cyIgaz0iMC4wMDEiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEzMDMiIFVuaXQ9ImNQIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTMwNCIgVW5pdD0iUCIgaz0iMC4xIiBEaWdpdD0iNCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMzA1IiBVbml0PSJrZ2bCt3MvbcKyIiBrPSI5LjgwNjY1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMzA2IiBVbml0PSJsYmbCt3MvZnTCsiIgaz0iNDcuODgwMyIgRGlnaXQ9IjMiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxNOe7hO+8mui/kOWKqOeymOW6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ2aXNjb3NpdHlfa2luZW1hdGljIiBOYW1lPSJ2aXNjb3NpdHlfa2luZW1hdGljIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTQwMSIgVW5pdD0ibcKyL3MiIGs9IjEiIERpZ2l0PSI2IiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDAyIiBVbml0PSJtbcKyL3MiIGs9IjFlLTA2IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDAzIiBVbml0PSJjU3QiIGs9IjFlLTA2IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDA0IiBVbml0PSJTdCIgaz0iMC4wMDAxIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDA1IiBVbml0PSJjbcKyL3MiIGs9IjAuMDAwMSIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTQwNiIgVW5pdD0iZnTCsi9zIiBrPSIwLjA5MjkwMzA0IiBEaWdpdD0iNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDE157uE77ya5riX6YCP546HID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InBlcm1lYWJpbGl0eSIgTmFtZT0icGVybWVhYmlsaXR5Ij4NCg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNTAxIiBVbml0PSJEIiBrPSIxIiBEaWdpdD0iNCIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTUwMiIgVW5pdD0ibUQiIGs9IjAuMDAxIiBEaWdpdD0iNCIgLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTUwMyIgVW5pdD0iMS9jbcKyIiBrPSI5LjgxZSswNyIgRGlnaXQ9IjIiLz4NCg0KDQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMTbnu4TvvJrog73ph48gPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iZW5lcmd5IiBOYW1lPSJlbmVyZ3kiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNjAxIiBVbml0PSJKIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTYwMiIgVW5pdD0ia0oiIGs9IjEwMDAiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDMiIFVuaXQ9Ik1KIiBrPSIxZTYiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDQiIFVuaXQ9ImNhbCIgaz0iNC4xODQiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDUiIFVuaXQ9ImtjYWwiIGs9IjQxODQiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDYiIFVuaXQ9IkJ0dSIgaz0iMTA1NS4wNTU4NTI2MiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTYwNyIgVW5pdD0iQlRVIiBrPSIxMDU1LjA1NTg1MjYyIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNjA4IiBVbml0PSJrV8K3aCIgaz0iMy42ZTYiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDkiIFVuaXQ9ImZ0wrdsYmYiIGs9IjEuMzU1ODE3OTQ4IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNjEwIiBVbml0PSJrZ2bCt20iIGs9IjkuODA2NjUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MTEiIFVuaXQ9ImhwwrdoIiBrPSIyLjY4NDUyZTYiIERpZ2l0PSIzIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMTfnu4TvvJrlip/njocgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icG93ZXIiIE5hbWU9InBvd2VyIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTcwMSIgVW5pdD0iVyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE3MDIiIFVuaXQ9ImtXIiBrPSIxMDAwIiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNzAzIiBVbml0PSJNVyIgaz0iMWU2IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNzA0IiBVbml0PSJocCIgaz0iNzQ1LjY5OTg3MTU4MjI3IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNzA1IiBVbml0PSJCdHUvaCIgaz0iMC4yOTMwNzEwNyIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTcwNiIgVW5pdD0iY2FsL3MiIGs9IjQuMTg2OCIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTcwNyIgVW5pdD0ia2dmwrdtL3MiIGs9IjkuODA2NjUiIERpZ2l0PSIzIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMTjnu4TvvJrkvZPnp6/mtYHph48gPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iZmxvd19yYXRlX3ZvbHVtZSIgTmFtZT0iZmxvd19yYXRlX3ZvbHVtZSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE4MDEiIFVuaXQ9Im3Csy9kIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwMiIgVW5pdD0ibcKzL3MiIGs9Ijg2NDAwIiBEaWdpdD0iNiIgUmVtYXJrPSIxIG3Csy9zID0gODY0MDAgbcKzL2QiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwMyIgVW5pdD0ibcKzL2EiIGs9IjAuMDAyNzM5NzI2MDI3Mzk3MjYiIERpZ2l0PSI2IiBSZW1hcms9IjEgbcKzL2EgPSAxLzM2NSBtwrMvZCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxODA0IiBVbml0PSJzdGIvZCIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iMSBzdGIvZCDiiYggMSBtwrMvZCAo5bel56iL6L+R5Ly8KSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxODA1IiBVbml0PSJiYmwvZCIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iMSBiYmwvZCDiiYggMSBtwrMvZCAo5bel56iL6L+R5Ly8KSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxODA2IiBVbml0PSJmdMKzL3MiIGs9IjI0NDYuNTc1IiBEaWdpdD0iNiIgUmVtYXJrPSIxIGZ0wrMvcyA9IDI0NDYuNTc1IG3Csy9kIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE4MDciIFVuaXQ9ImZ0wrMvZCIgaz0iMC4wMjgzMTY4NDY1OTIiIERpZ2l0PSI2IiBSZW1hcms9IjEgZnTCsy9kID0gMC4wMjgzMTY4NDY1OTIgbcKzL2QiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwOCIgVW5pdD0iTU1zY2YvZCIgaz0iMjgzMTYuODQ2NTkyIiBEaWdpdD0iNCIgUmVtYXJrPSIxIE1Nc2NmL2QgPSAyODMxNi44NDY1OTIgbcKzL2QgKOeQhuaDs+awlOS9kykiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwOSIgVW5pdD0iTXNjZi9kIiBrPSIyOC4zMTY4NDY1OTIiIERpZ2l0PSI2IiBSZW1hcms9IjEgTXNjZi9kID0gMjguMzE2ODQ2NTkyIG3Csy9kICjnkIbmg7PmsJTkvZMpIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE4MTAiIFVuaXQ9IjEw4oG0Km3Csy9kIiBrPSIxMDAwMCIgRGlnaXQ9IjQiIFJlbWFyaz0iMSDkuIfmlrkv5aSpID0gMTAwMDAgbcKzL2QiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxOee7hO+8muWOi+e8qeezu+aVsCA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJjb21wcmVzc2liaWxpdHkiIE5hbWU9ImNvbXByZXNzaWJpbGl0eSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE5MDEiIFVuaXQ9IjEvTVBhIiBrPSIxIiBEaWdpdD0iNiIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTkwMiIgVW5pdD0iMS9QYSIgaz0iMWU2IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxOTAzIiBVbml0PSIxL3BzaSIgaz0iMTQ1LjAzNzczOCIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTkwNCIgVW5pdD0iMS9hdG0iIGs9IjkuODY5MjMyNjY3MTYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE5MDUiIFVuaXQ9IjEvYmFyIiBrPSIxMCIgRGlnaXQ9IjYiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwyMOe7hO+8mua1k+W6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJjb25jZW50cmF0aW9uIiBOYW1lPSJjb25jZW50cmF0aW9uIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwMSIgVW5pdD0ia2cvbcKzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwMiIgVW5pdD0iZy9MIiBrPSIxIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMDAzIiBVbml0PSJtZy9MIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwNCIgVW5pdD0izrxnL21MIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwNSIgVW5pdD0icHBtIiBrPSIwLjAwMSIgRGlnaXQ9IjQiIFJlbWFyaz0iYXNzdW1pbmcgMSBwcG0gPSAxIG1nL2tnIGluIHdhdGVyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIwMDYiIFVuaXQ9IktwcG0iIGs9IjEiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIwMDciIFVuaXQ9Im1vbC9twrMiIGs9IjEiIERpZ2l0PSIzIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMjHnu4TvvJrnmb7liIbmr5QgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icGVyY2VudCIgTmFtZT0icGVyY2VudCI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIxMDEiIFVuaXQ9IiUiIGs9IjEiIERpZ2l0PSIyIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMTAyIiBVbml0PSJwdSIgaz0iMSIgRGlnaXQ9IjIiIFJlbWFyaz0icGVyIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjEwMyIgVW5pdD0iZnJhY3Rpb24iIGs9IjEwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjEwNCIgVW5pdD0idi92IiBrPSIxMDAiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIxMDUiIFVuaXQ9Im3Csy9twrMiIGs9IjEwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwyMue7hO+8muaFouW6pu+8iOWjsOazou+8iSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJzbG93bmVzcyIgTmFtZT0ic2xvd25lc3MiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMjAxIiBVbml0PSJzL20iIGs9IjEiIERpZ2l0PSIzIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMjAyIiBVbml0PSJ1cy9tIiBrPSIxZS0wNiIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjIwMyIgVW5pdD0idXMvZnQiIGs9IjMuMjgwODM5ODk1MDEzMTJlLTA2IiBEaWdpdD0iNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDIz57uE77ya5pS+5bCE5oCnID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InJhZGlvYWN0aXZpdHkiIE5hbWU9InJhZGlvYWN0aXZpdHkiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMzAxIiBVbml0PSJBUEkiIGs9IjEiIERpZ2l0PSIxIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMzAyIiBVbml0PSJnQVBJIiBrPSIxIiBEaWdpdD0iMSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDI057uE77ya55S15Y6LID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZvbHRhZ2UiIE5hbWU9InZvbHRhZ2UiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNDAxIiBVbml0PSJWIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjQwMiIgVW5pdD0ibVYiIGs9IjAuMDAxIiBEaWdpdD0iNCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNDAzIiBVbml0PSJrViIgaz0iMTAwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwyNee7hO+8muWKmyA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJmb3JjZSIgTmFtZT0iZm9yY2UiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNTAxIiBVbml0PSJOIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjUwMiIgVW5pdD0ia04iIGs9IjEwMDAiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI1MDMiIFVuaXQ9ImxiZiIgaz0iNC40NDgyMjE2MTUyNjA1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNTA0IiBVbml0PSJrZ2YiIGs9IjkuODA2NjUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI1MDUiIFVuaXQ9ImR5biIgaz0iMWUtMDUiIERpZ2l0PSI2Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMjbnu4TvvJrpopHnjocgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iZnJlcXVlbmN5IiBOYW1lPSJmcmVxdWVuY3kiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNjAxIiBVbml0PSJIeiIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI2MDIiIFVuaXQ9ImtIeiIgaz0iMTAwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjYwMyIgVW5pdD0iTUh6IiBrPSIxZTYiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI2MDQiIFVuaXQ9IkdIeiIgaz0iMWU5IiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDI357uE77ya54Ot5a+8546HID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRoZXJtYWxfY29uZHVjdGl2aXR5IiBOYW1lPSJ0aGVybWFsX2NvbmR1Y3Rpdml0eSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI3MDEiIFVuaXQ9IlcvKG3Ct0spIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjcwMiIgVW5pdD0iVy8obcK34oSDKSIgaz0iMSIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjcwMyIgVW5pdD0iQnR1LyhowrdmdMK3wrBGKSIgaz0iMS43MzA3MzUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI3MDQiIFVuaXQ9ImNhbC8oY23Ct3PCt+KEgykiIGs9IjQxOC40IiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDI457uE77ya5q+U54Ot5a65ID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InNwZWNpZmljX2hlYXQiIE5hbWU9InNwZWNpZmljX2hlYXQiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyODAxIiBVbml0PSJKLyhrZ8K3SykiIGs9IjEiIERpZ2l0PSIzIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyODAyIiBVbml0PSJKLyhnwrdLKSIgaz0iMTAwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjgwMyIgVW5pdD0iY2FsLyhnwrfihIMpIiBrPSI0MTg0IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyODA0IiBVbml0PSJCdHUvKGxiwrfCsEYpIiBrPSI0MTg2LjgiIERpZ2l0PSIyIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMjnnu4TvvJrmkanlsJTotKjph48gPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0ibW9sYXJfbWFzcyIgTmFtZT0ibW9sYXJfbWFzcyI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI5MDEiIFVuaXQ9ImtnL21vbCIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI5MDIiIFVuaXQ9ImcvbW9sIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjkwMyIgVW5pdD0ibGIvbGJtb2wiIGs9IjAuNDUzNTkyMzciIERpZ2l0PSI0Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMzDnu4TvvJpVbmtub3duMSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJtb2xhcl9tYXNzIiBOYW1lPSJtb2xhcl9tYXNzIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzAwMSIgVW5pdD0ia2cvbW9sIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzAwMiIgVW5pdD0iZy9tb2wiIGs9IjAuMDAxIiBEaWdpdD0iNCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMDAzIiBVbml0PSJsYi9sYm1vbCIgaz0iMC40NTM1OTIzNyIgRGlnaXQ9IjQiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMzHnu4TvvJpVbmtub3duMSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ3cyIgTmFtZT0i55uQ5bqmIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzEwMSIgVW5pdD0ibWcvTCIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMTAyIiBVbml0PSLOvGcvbUwiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzEwMyIgVW5pdD0iZy9MIiBrPSIxMDAwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTMxMDQiIFVuaXQ9ImtnL21eMyIgaz0iMC4wMDEiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzEwNSIgVW5pdD0icHBtIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTMxMDYiIFVuaXQ9IktwcG0iIGs9IjEwMDAiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwzMue7hO+8mlVua25vd24xID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZpc2Nvc2l0eSIgTmFtZT0idmlzY29zaXR5Ij4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwMSIgVW5pdD0iUGEucyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMjAyIiBVbml0PSJtUGEucyIgaz0iMC4wMDEiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwMyIgVW5pdD0iUCIgaz0iMC4xIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTMyMDQiIFVuaXQ9ImNQIiBrPSIwLjAwMSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMjA1IiBVbml0PSJiZi5zL2Z0XjIiIGs9IjQ3Ljg4MDMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwNiIgVW5pdD0ia2dmLnMvbV4zIiBrPSI5LjgwNjY1Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMzPnu4TvvJrkupXnrZLlgqjpm4bns7vmlbAgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iVG9EbzMiIE5hbWU9IlRvRG8zIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzMwMSIgVW5pdD0ibV4zL01QYSIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgPC9UeXBlT2Y+DQo8L1Jvb3Q+DQo= \ No newline at end of file diff --git a/Bin/XmlFiles/ModelParaDefinesNM_cn.xml b/Bin/XmlFiles/ModelParaDefinesNM_cn.xml index 8788ebc..95751c5 100644 --- a/Bin/XmlFiles/ModelParaDefinesNM_cn.xml +++ b/Bin/XmlFiles/ModelParaDefinesNM_cn.xml @@ -17,7 +17,7 @@ - + @@ -95,7 +95,7 @@ - + diff --git a/Bin/XmlFiles/ModelParaDefinesNM_en.xml b/Bin/XmlFiles/ModelParaDefinesNM_en.xml index 02be24f..38be5f8 100644 --- a/Bin/XmlFiles/ModelParaDefinesNM_en.xml +++ b/Bin/XmlFiles/ModelParaDefinesNM_en.xml @@ -18,7 +18,7 @@ - + @@ -96,7 +96,7 @@ - + diff --git a/Include/nmNum/nmCalculation/nmCalculationUtils.h b/Include/nmNum/nmCalculation/nmCalculationUtils.h index 76a5faa..3688f57 100644 --- a/Include/nmNum/nmCalculation/nmCalculationUtils.h +++ b/Include/nmNum/nmCalculation/nmCalculationUtils.h @@ -19,6 +19,13 @@ class NMCALCULATION_EXPORT nmCalculationUtils { static bool writeFile(const QStringList& content, const QString &filePath); static QStringList readFile(const QString & filePath); + /** + * @brief 将数据层使用的毫达西转换为PEBI求解器使用的达西。 + * @param dPermeabilityMilliDarcy 渗透率,单位为mD。 + * @return 渗透率,单位为D。 + */ + static double milliDarcyToDarcy(double dPermeabilityMilliDarcy); + // 调用求解器Kriging接口,对targetPoints中的坐标依次进行属性插值. // measurementPoints与measurementValues按下标一一对应. // 成功时outputValues与targetPoints数量相同且顺序一致;失败时清空outputValues. diff --git a/Include/nmNum/nmData/nmDataAttribute.h b/Include/nmNum/nmData/nmDataAttribute.h index b4eb34a..8afdd70 100644 --- a/Include/nmNum/nmData/nmDataAttribute.h +++ b/Include/nmNum/nmData/nmDataAttribute.h @@ -1,4 +1,4 @@ -#ifndef NMDATAATTRIBUTE_H +#ifndef NMDATAATTRIBUTE_H #define NMDATAATTRIBUTE_H #include @@ -15,7 +15,7 @@ enum UnitType { UNIT_TYPE_LENGTH, // 长度:m, cm, mm, in, ft, km等 UNIT_TYPE_CONDUCTIVITY, // 导流能力:md.m, md.ft, m^3 UNIT_TYPE_PRESSURE, // 压力:MPa, psia, Pa, kPa, bar等 - UNIT_TYPE_PERMEABILITY, // 渗透率:md, Darcy, m^2, cm^2等 + UNIT_TYPE_PERMEABILITY, // 渗透率:mD, D, m^2, cm^2等 UNIT_TYPE_ANGLE, // 角度:o (degree), radian UNIT_TYPE_FLOW_RATE_RECIPROCAL, // 流量倒数:1/B/D, 1/m^3/D等 UNIT_TYPE_COMPRESSIBILITY, // 压缩系数:m^3/MPa, bbl/psi等 diff --git a/Include/nmNum/nmData/nmDataBinaryTools.h b/Include/nmNum/nmData/nmDataBinaryTools.h index d6abef6..9db16c6 100644 --- a/Include/nmNum/nmData/nmDataBinaryTools.h +++ b/Include/nmNum/nmData/nmDataBinaryTools.h @@ -1,4 +1,4 @@ -#ifndef NMDATABINARYTOOLS_H +#ifndef NMDATABINARYTOOLS_H #define NMDATABINARYTOOLS_H #include @@ -152,7 +152,7 @@ public: double dt_Max; // 最大时间间隔 // 注意:k, phi, h是每个网格单元一个值,数量太大不保存基准值 // Python采样时根据 Base.k_ref 给所有单元赋相同值 - double k_ref; // 渗透率参考值(用于采样) + double k_ref; // 渗透率参考值,写入场景文件前已转换为D double phi_ref; // 孔隙度参考值(用于采样) double h_ref; // 厚度参考值(用于采样) } Base; diff --git a/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp b/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp index 7951652..212d211 100644 --- a/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp +++ b/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp @@ -1,4 +1,4 @@ -#include "nmCalculationDllPebiSolverTask.h" +#include "nmCalculationDllPebiSolverTask.h" #include "singlePhaseSolver.h" #include "zxLogInstance.h" #include "nmDataAnalyzeManager.h" @@ -149,8 +149,11 @@ bool applyPropertyInterpolation( solverValues->resize(interpolationValues.size()); for(int valueIndex = 0; valueIndex < interpolationValues.size(); ++valueIndex) { - // 插值数据已经使用求解器基准单位,结果可直接按网格顺序写入. - (*solverValues)[valueIndex] = interpolationValues[valueIndex]; + // 属性插值数据层以mD保存;渗透率在写入PEBI数组时转换为D。 + (*solverValues)[valueIndex] = dataSet.property == "k" + ? nmCalculationUtils::milliDarcyToDarcy( + interpolationValues[valueIndex]) + : interpolationValues[valueIndex]; } *propertyApplied = true; } @@ -586,7 +589,11 @@ bool nmCalculationDllPebiSolverTask::execPebiMode() p0.Base.Swi = pReservoirData->getSwi().getValue().toDouble(); // 初始含水饱和度 // 根据网格单元数设置每个单元的参数 size_t cellCount = pGridInstance->getGridOutput2().Trinodexy.size(); - p0.Base.k = dVec1(cellCount, pReservoirData->getPermeability().getValue().toDouble()); + // 数据层以mD保存渗透率,PEBI输入数组要求使用D。 + const double dPermeabilityDarcy = + nmCalculationUtils::milliDarcyToDarcy( + pReservoirData->getPermeability().getValue().toDouble()); + p0.Base.k = dVec1(cellCount, dPermeabilityDarcy); p0.Base.phi = dVec1(cellCount, pReservoirData->getPorosity().getValue().toDouble()); p0.Base.h = dVec1(cellCount, pReservoirData->getThickness().getValue().toDouble()); } diff --git a/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp b/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp index 979accd..c61ad8b 100644 --- a/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp +++ b/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp @@ -1,4 +1,4 @@ -#include "nmCalculationPebiGrid.h" +#include "nmCalculationPebiGrid.h" #include #include #include @@ -1069,7 +1069,9 @@ bool nmCalculationPebiGrid::generateOutputPara() scene.Base.Swi = pReservoirData->getSwi().getValue().toDouble(); // 保存参考值(用于Python采样) - scene.Base.k_ref = pReservoirData->getPermeability().getValue().toDouble(); + // 训练场景最终会直接填入PEBI输入结构,写文件前转换为求解器使用的D。 + scene.Base.k_ref = nmCalculationUtils::milliDarcyToDarcy( + pReservoirData->getPermeability().getValue().toDouble()); scene.Base.phi_ref = pReservoirData->getPorosity().getValue().toDouble(); scene.Base.h_ref = pReservoirData->getThickness().getValue().toDouble(); } diff --git a/Src/nmNum/nmCalculation/nmCalculationUtils.cpp b/Src/nmNum/nmCalculation/nmCalculationUtils.cpp index 5aca5ac..e45a18a 100644 --- a/Src/nmNum/nmCalculation/nmCalculationUtils.cpp +++ b/Src/nmNum/nmCalculation/nmCalculationUtils.cpp @@ -37,6 +37,12 @@ void setKrigingError(QString* errorMessage, const QString& message) nmCalculationUtils::nmCalculationUtils() { } +double nmCalculationUtils::milliDarcyToDarcy(double dPermeabilityMilliDarcy) +{ + // PEBI输入结构使用D,数据层统一使用mD,因此仅在求解器边界换算。 + return dPermeabilityMilliDarcy / 1000.0; +} + bool nmCalculationUtils::copyFileToDir(QString filePath, QString destDir) { // 如果文件不存在,则退出 if(!QFile::exists(filePath)) { diff --git a/Src/nmNum/nmData/nmDataAttribute.cpp b/Src/nmNum/nmData/nmDataAttribute.cpp index afd14f3..28dae7a 100644 --- a/Src/nmNum/nmData/nmDataAttribute.cpp +++ b/Src/nmNum/nmData/nmDataAttribute.cpp @@ -1,4 +1,4 @@ -#include "nmDataAttribute.h" +#include "nmDataAttribute.h" #include @@ -413,7 +413,8 @@ UnitType nmDataAttribute::detectUnitType(const QString& unit) { } // 渗透率单位 - if (unit == "md" || unit == "Darcy" || unit == "m^2" || unit == "cm^2" || unit == "um^2") { + if (unit == "mD" || unit == "D" || unit == "md" || unit == "Darcy" || + unit == "m^2" || unit == "cm^2" || unit == "um^2") { return UNIT_TYPE_PERMEABILITY; } @@ -578,9 +579,9 @@ double nmDataAttribute::convertPermeabilityUnit(double value, const QString& fro // 统一转换为Darcy double valueInDarcy = value; - if (fromUnit == "md") { - valueInDarcy = value / 1000.0; // 1 Darcy = 1000 md - } else if (fromUnit == "Darcy") { + if (fromUnit == "mD" || fromUnit == "md") { + valueInDarcy = value / 1000.0; // 1 D = 1000 mD + } else if (fromUnit == "D" || fromUnit == "Darcy") { valueInDarcy = value; } else if (fromUnit == "m^2") { valueInDarcy = value * 9.869233e-13; // 1 m^2 = 9.869233e-13 Darcy @@ -593,9 +594,9 @@ double nmDataAttribute::convertPermeabilityUnit(double value, const QString& fro } // 从Darcy转换为目标单位 - if (toUnit == "Darcy") { + if (toUnit == "D" || toUnit == "Darcy") { return valueInDarcy; - } else if (toUnit == "md") { + } else if (toUnit == "mD" || toUnit == "md") { return valueInDarcy * 1000.0; } else if (toUnit == "m^2") { return valueInDarcy / 9.869233e-13; diff --git a/Src/nmNum/nmData/nmDataAutomaticFitting.cpp b/Src/nmNum/nmData/nmDataAutomaticFitting.cpp index 3af9c33..5c5530e 100644 --- a/Src/nmNum/nmData/nmDataAutomaticFitting.cpp +++ b/Src/nmNum/nmData/nmDataAutomaticFitting.cpp @@ -13,7 +13,7 @@ nmDataAutomaticFitting::nmDataAutomaticFitting() m_swiSelected = false; // 默认不选中 // 初始化参数最大值 - m_permeabilityMax = nmDataAttribute("Permeability Max", 10.0, "D"); + m_permeabilityMax = nmDataAttribute("Permeability Max", 10000.0, "mD"); m_skinMax = nmDataAttribute("Skin Max", 10.0, ""); // 100 m_wellboreStorageMax = nmDataAttribute("Wellbore Storage Max", 2.0, "m^3/MPa"); m_porosityMax = nmDataAttribute("Porosity Max", 0.5, ""); // 50% @@ -23,7 +23,7 @@ nmDataAutomaticFitting::nmDataAutomaticFitting() m_swiMax = nmDataAttribute("Swi Max", 1.0, ""); // 初始化参数最小值 - m_permeabilityMin = nmDataAttribute("Permeability Min", 0.001, "D"); + m_permeabilityMin = nmDataAttribute("Permeability Min", 1.0, "mD"); m_skinMin = nmDataAttribute("Skin Min", -10.0, ""); // 允许负表皮 m_wellboreStorageMin = nmDataAttribute("Wellbore Storage Min", 1e-4, "m^3/MPa"); m_porosityMin = nmDataAttribute("Porosity Min", 0.01, ""); // 1% @@ -164,8 +164,8 @@ void nmDataAutomaticFitting::FromJsonValue(const rapidjson::Value& jsonValue) // 反序列化参数最大值 if (jsonValue.HasMember("PermeabilityMax") && jsonValue["PermeabilityMax"].IsObject()) { m_permeabilityMax.FromJsonValue(jsonValue["PermeabilityMax"]); - // 自动拟合上下限与求解器使用同一基准单位,不按旧JSON单位文本换算。 - m_permeabilityMax.setUnit("D"); + // 自动拟合上下限统一按数据层基准单位mD解释,不兼容旧JSON的D数值。 + m_permeabilityMax.setUnit("mD"); } if (jsonValue.HasMember("SkinMax") && jsonValue["SkinMax"].IsObject()) { m_skinMax.FromJsonValue(jsonValue["SkinMax"]); @@ -192,7 +192,7 @@ void nmDataAutomaticFitting::FromJsonValue(const rapidjson::Value& jsonValue) // 反序列化参数最小值 if (jsonValue.HasMember("PermeabilityMin") && jsonValue["PermeabilityMin"].IsObject()) { m_permeabilityMin.FromJsonValue(jsonValue["PermeabilityMin"]); - m_permeabilityMin.setUnit("D"); + m_permeabilityMin.setUnit("mD"); } if (jsonValue.HasMember("SkinMin") && jsonValue["SkinMin"].IsObject()) { m_skinMin.FromJsonValue(jsonValue["SkinMin"]); diff --git a/Src/nmNum/nmData/nmDataDiagnostic.cpp b/Src/nmNum/nmData/nmDataDiagnostic.cpp index 973186c..ca34818 100644 --- a/Src/nmNum/nmData/nmDataDiagnostic.cpp +++ b/Src/nmNum/nmData/nmDataDiagnostic.cpp @@ -1,4 +1,4 @@ -#include "nmDataDiagnostic.h" +#include "nmDataDiagnostic.h" #include "nmDataWellBase.h" #include "nmDataReservoir.h" #include @@ -15,7 +15,7 @@ nmDataDiagnostic::nmDataDiagnostic() { m_diagnosticSkin = nmDataAttribute("Skin", 0.0, ""); m_diagnosticWellboreStorage = nmDataAttribute("Wellbore storage", 0.01, "m^3/MPa", UNIT_TYPE_COMPRESSIBILITY, QStringList(), QStringList() << "bbl/psi" << "m^3/bar" << "m^3/kPa" << "m^3/Pa" << "m^3.cm^2/kg" << "m^2" << "m^3/MPa"); - m_diagnosticPermeability = nmDataAttribute("Permeability", 0.025, "md", UNIT_TYPE_PERMEABILITY, QStringList(), QStringList() << "md" << "Darcy" << "m^2" << "cm^2" << "um^2"); + m_diagnosticPermeability = nmDataAttribute("Permeability", 25.0, "mD", UNIT_TYPE_PERMEABILITY, QStringList(), QStringList() << "mD" << "D" << "m^2" << "cm^2" << "um^2"); m_diagnosticTransmissibility = nmDataAttribute("Transmissibility", 1000.0, "md.m", UNIT_TYPE_CONDUCTIVITY, QStringList(), QStringList()<< "md.ft" << "md.m" << "m^3"); } @@ -258,7 +258,7 @@ void nmDataDiagnostic::calculateTransmissibility(const QVector>& DEBUG_OUT(QString("=== Transmissibility Analysis Result ===")); DEBUG_OUT(QString("Selected method: %1").arg(selectedAnalysis->description)); - DEBUG_OUT(QString("Transmissibility (kh): %1 md*m").arg(khValue, 0, 'f', 6)); + DEBUG_OUT(QString("Transmissibility (kh): %1 mD*m").arg(khValue, 0, 'f', 6)); DEBUG_OUT(QString("Analysis time: %1 hr").arg(selectedAnalysis->avgTime, 0, 'f', 4)); DEBUG_OUT(QString("Derivative value used: %1 MPa").arg(selectedAnalysis->avgPressure, 0, 'f', 6)); } else { @@ -292,9 +292,9 @@ void nmDataDiagnostic::calculatePermeability(nmDataWellBase* pWell, nmDataReserv m_diagnosticPermeability.setValue(kValue); DEBUG_OUT(QString("=== Permeability Analysis Result ===")); - DEBUG_OUT(QString("Transmissibility (kh): %1 md*m").arg(khValue, 0, 'f', 6)); + DEBUG_OUT(QString("Transmissibility (kh): %1 mD*m").arg(khValue, 0, 'f', 6)); DEBUG_OUT(QString("Reservoir thickness (h): %1 m").arg(thickness, 0, 'f', 2)); - DEBUG_OUT(QString("Permeability (k): %1 md").arg(kValue, 0, 'f', 6)); + DEBUG_OUT(QString("Permeability (k): %1 mD").arg(kValue, 0, 'f', 6)); } //void nmDataDiagnostic::calculateSkin(const QVector>& rawData, diff --git a/Src/nmNum/nmData/nmDataReservoir.cpp b/Src/nmNum/nmData/nmDataReservoir.cpp index 0122f55..73f25b0 100644 --- a/Src/nmNum/nmData/nmDataReservoir.cpp +++ b/Src/nmNum/nmData/nmDataReservoir.cpp @@ -4,8 +4,8 @@ nmDataReservoir::nmDataReservoir() { // 基础属性 m_initialPressure = nmDataAttribute("Initial Pressure",40.0, "MPa", UNIT_TYPE_PRESSURE, QStringList(), QStringList() << "psia" << "Pa" << "kPa" << "atm" << "bara" << "kg/cm^2" << "m" << "psig" << "bar" << "MPa" << "kPag"); - // 求解器直接读取该数值,内部基准单位固定为D;显示换算由框架单位绑定器负责。 - m_permeability = nmDataAttribute("Permeability", 0.025, "D"); + // 数据层基准单位固定为mD;进入PEBI求解器前再统一转换为D。 + m_permeability = nmDataAttribute("Permeability", 25.0, "mD"); m_thickness = nmDataAttribute("Thickness", 10.0, "m", UNIT_TYPE_LENGTH, QStringList(), QStringList() << "ft" << "m" << "cm" << "mm" << "in" << "0.1 in" << "mile" << "km"); m_porosity = nmDataAttribute("Porosity", 0.1, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList()); m_kxKy = nmDataAttribute("Kx/Ky", 1.0, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList()); @@ -41,7 +41,7 @@ nmDataReservoir::nmDataReservoir() { void nmDataReservoir::resetToDefaults() { - m_permeability.setValue(0.025); + m_permeability.setValue(25.0); m_transmissibility.setValue(1000.0); } @@ -148,8 +148,8 @@ void nmDataReservoir::FromJsonValue(const rapidjson::Value& jsonValue) } if (jsonValue.HasMember("Permeability") && jsonValue["Permeability"].IsObject()) { m_permeability.FromJsonValue(jsonValue["Permeability"]); - // JSON中的单位文本不参与兼容换算,读取后的内部单位始终按求解器标准固定为D。 - m_permeability.setUnit("D"); + // JSON中的单位文本不参与兼容换算,读取后的数据层单位始终固定为mD。 + m_permeability.setUnit("mD"); } if (jsonValue.HasMember("Thickness") && jsonValue["Thickness"].IsObject()) { m_thickness.FromJsonValue(jsonValue["Thickness"]); @@ -244,7 +244,7 @@ bool nmDataReservoir::_parseData(VecVariant vec, int& n) { m_reservoirType = nmDataAttribute("Reservoir Type", vec[n++].toString(), ""); m_Bo = nmDataAttribute("Bo", vec[n++].toString(), ""); m_Miuo = nmDataAttribute("Miuo", vec[n++].toString(), "mPa.s"); - m_permeability = nmDataAttribute("Permeability", vec[n++].toString(), "D"); + m_permeability = nmDataAttribute("Permeability", vec[n++].toString(), "mD"); m_thickness = nmDataAttribute("Thickness", vec[n++].toString(), "m"); m_porosity = nmDataAttribute("Porosity", vec[n++].toString(), ""); m_Ct = nmDataAttribute("Ct", vec[n++].toString(), "1/MPa"); @@ -284,8 +284,8 @@ void nmDataReservoir::onDeserialize(ZxSerializer* ser) { ser->read("ReservoirType", tempValue); m_reservoirType = nmDataAttribute("Reservoir Type", tempValue, ""); ser->read("Bo", tempValue); m_Bo = nmDataAttribute("Bo", tempValue, ""); ser->read("Miuo", tempValue); m_Miuo = nmDataAttribute("Miuo", tempValue, "mPa.s"); - // 序列化格式只保存数值,读取时明确按求解器基准单位D解释。 - ser->read("Permeability", tempValue); m_permeability = nmDataAttribute("Permeability", tempValue, "D"); + // 序列化格式只保存数值,读取时明确按数据层基准单位mD解释。 + ser->read("Permeability", tempValue); m_permeability = nmDataAttribute("Permeability", tempValue, "mD"); ser->read("Thickness", tempValue); m_thickness = nmDataAttribute("Thickness", tempValue, "m"); ser->read("Porosity", tempValue); m_porosity = nmDataAttribute("Porosity", tempValue, ""); ser->read("Ct", tempValue); m_Ct = nmDataAttribute("Ct", tempValue, "1/MPa"); diff --git a/Src/nmNum/nmSubWxs/nmWxAutomaticFitting.cpp b/Src/nmNum/nmSubWxs/nmWxAutomaticFitting.cpp index 3d31d8d..fce2230 100644 --- a/Src/nmNum/nmSubWxs/nmWxAutomaticFitting.cpp +++ b/Src/nmNum/nmSubWxs/nmWxAutomaticFitting.cpp @@ -242,9 +242,9 @@ nmWxAutomaticFitting::nmWxAutomaticFitting(QWidget *parent) solverModelType == SMT_Water_ConstPvt || solverModelType == SMT_Water_VariablePvt; if(isOilOrWaterSinglePhase) { - reservoirData.getPermeability().setValue(2.5e-2); - automaticFittingData.getPermeabilityMin().setValue(1.0e-3); - automaticFittingData.getPermeabilityMax().setValue(10.0); + reservoirData.getPermeability().setValue(25.0); + automaticFittingData.getPermeabilityMin().setValue(1.0); + automaticFittingData.getPermeabilityMax().setValue(10000.0); automaticFittingData.getSkinMin().setValue(-10.0); automaticFittingData.getSkinMax().setValue(10.0); automaticFittingData.getWellboreStorageMin().setValue(1.0e-4); @@ -271,13 +271,13 @@ nmWxAutomaticFitting::nmWxAutomaticFitting(QWidget *parent) // 气单相变化 PVT 使用 T5 数据集对应的初始值和拟合范围。 if(solverModelType == SMT_Gas_VariablePvt) { - reservoirData.getPermeability().setValue(5.5e-6); + reservoirData.getPermeability().setValue(5.5e-3); reservoirData.getPorosity().setValue(3.5e-2); reservoirData.getThickness().setValue(8.0); reservoirData.getCf().setValue(3.0e-4); - automaticFittingData.getPermeabilityMin().setValue(4.5e-6); - automaticFittingData.getPermeabilityMax().setValue(6.2e-6); + automaticFittingData.getPermeabilityMin().setValue(4.5e-3); + automaticFittingData.getPermeabilityMax().setValue(6.2e-3); automaticFittingData.getSkinMin().setValue(0.0); automaticFittingData.getSkinMax().setValue(4.5); automaticFittingData.getWellboreStorageMin().setValue(5.0e-5); @@ -408,7 +408,7 @@ void nmWxAutomaticFitting::setupParameterTable() m_parameterTable->setItem(0, 2, new QTableWidgetItem(QString::number(automaticFittingData.getPermeabilityMin().getValue().toDouble()))); m_parameterTable->setItem(0, 3, new QTableWidgetItem(QString::number(reservoirData.getPermeability().getValue().toDouble()))); m_parameterTable->setItem(0, 4, new QTableWidgetItem(QString::number(automaticFittingData.getPermeabilityMax().getValue().toDouble()))); - m_parameterTable->setItem(0, 5, new QTableWidgetItem(tr("D"))); + m_parameterTable->setItem(0, 5, new QTableWidgetItem(tr("mD"))); // 表皮系数 (Skin) m_parameterTable->setItem(1, 0, new QTableWidgetItem("2")); diff --git a/Src/nmNum/nmSubWxs/nmWxPropertyInterpolationDlg.cpp b/Src/nmNum/nmSubWxs/nmWxPropertyInterpolationDlg.cpp index 7c8ccf2..494016d 100644 --- a/Src/nmNum/nmSubWxs/nmWxPropertyInterpolationDlg.cpp +++ b/Src/nmNum/nmSubWxs/nmWxPropertyInterpolationDlg.cpp @@ -1,4 +1,4 @@ -#include "nmWxPropertyInterpolationDlg.h" +#include "nmWxPropertyInterpolationDlg.h" #include #include @@ -47,9 +47,9 @@ namespace // 表格第0行保留给单位,实际测点从第1行开始. const int POINT_UNIT_ROW = 0; const int FIRST_POINT_ROW = 1; -// 坐标和厚度以m保存,渗透率以D保存但默认使用mD显示. +// 坐标和厚度以m保存,渗透率统一以mD保存和显示。 const char* LENGTH_BASE_UNIT = "m"; -const char* PERMEABILITY_BASE_UNIT = "D"; +const char* PERMEABILITY_BASE_UNIT = "mD"; const char* PERMEABILITY_DISPLAY_UNIT = "mD"; // 使用独立翻译上下文,便于统一维护对话框文本. @@ -92,9 +92,7 @@ QString defaultPropertyDisplayUnit(const QString& property) QString unitGroupLookupUnit(const QString& unit) { - // D与时间单位d仅大小写不同,使用唯一的mD定位渗透率单位组. - return unit == PERMEABILITY_BASE_UNIT ? - QString(PERMEABILITY_DISPLAY_UNIT) : unit; + return unit; } bool convertUnitValue(double sourceValue, diff --git a/Src/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.cpp b/Src/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.cpp index d71d944..baee7d4 100644 --- a/Src/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.cpp +++ b/Src/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.cpp @@ -4,7 +4,6 @@ #include "nmReservoirPropertiesSession.h" #include "nmReservoirParameterPage.h" #include "iUnitGroup.h" -#include "iUnitHelper.h" #include "iUnitWxBinder.h" #include "mModuleDefines.h" #include "ZxBaseUtil.h" @@ -310,47 +309,9 @@ bool nmWxReservoirPropertiesEditor::bindUnitField( QComboBox* pUnitComboBox, const QString& sBaseParameterId) { - // 第一步:仍由框架绑定器读取参数定义、范围和常规单位组。 - if (!bindUnitPairWxs(pLineEdit, pUnitComboBox, - sBaseParameterId, false)) - { - return false; - } - - // 第二步:单位帮助器对单位名执行了不区分大小写的匹配,D可能先命中 - // 时间组中的d(天)。渗透率以mD这个无歧义单位定位正确单位组, - // 但基准单位仍明确保持为求解器使用的D。 - if (sBaseParameterId == QString::fromLatin1("K")) - { - iUnitGroup* pPermeabilityGroup = - iUnitHelper::getUnitGroupByUnit( - QString::fromLatin1("mD")); - zxBindWxPair* pBindPair = m_pUnitBinder != nullptr - ? m_pUnitBinder->getWxPairOf(pLineEdit) : nullptr; - if (pPermeabilityGroup == nullptr || pBindPair == nullptr || - pPermeabilityGroup->m_sType.compare( - QString::fromLatin1("permeability"), - Qt::CaseInsensitive) != 0 || - pPermeabilityGroup->indexOf( - QString::fromLatin1("D")) < 0) - { - return false; - } - - // 第三步:替换错误单位组并重建单位选项。后续数值设置、切换、 - // 范围校验和基准值读取继续全部通过框架绑定器完成。 - pBindPair->isUpdating = true; - pBindPair->pUnitGroup = pPermeabilityGroup; - pBindPair->sBaseUnit = QString::fromLatin1("D"); - pUnitComboBox->clear(); - pUnitComboBox->addItems(pPermeabilityGroup->getAllUnitNames()); - int nBaseUnitIndex = pUnitComboBox->findText( - QString::fromLatin1("D"), - Qt::MatchExactly | Qt::MatchCaseSensitive); - pUnitComboBox->setCurrentIndex(nBaseUnitIndex); - pBindPair->isUpdating = false; - } - return true; + // 参数XML已统一使用无歧义的mD作为渗透率基准单位,所有字段直接复用框架绑定器。 + return bindUnitPairWxs(pLineEdit, pUnitComboBox, + sBaseParameterId, false); } void nmWxReservoirPropertiesEditor::setUnitBaseValue( From 226b942bbf0241a10323083a7e9ee56eea60805a Mon Sep 17 00:00:00 2001 From: lh <2334563547@qq.com> Date: Fri, 14 Aug 2026 14:46:36 +0800 Subject: [PATCH 03/10] =?UTF-8?q?refactor(nmNum):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=82=A8=E5=B1=82=E5=8F=82=E6=95=B0=E5=AF=B9=E8=B1=A1=E5=88=87?= =?UTF-8?q?=E6=8D=A2=E5=B8=83=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 使用原生分组框承载对象切换下拉框 - 统一对象显示标签并移除重复页面标题 - 保持原有切换、校验和提交逻辑不变 --- Bin/Config/Lang/cn/nmNum_cn.qm | Bin 113262 -> 112435 bytes Bin/Config/Lang/cn/nmNum_cn.ts | 14 +-- .../nmNum/nmSubWxs/nmReservoirParameterPage.h | 13 +-- .../nmSubWxs/nmReservoirParameterPage.cpp | 85 +++++------------- 4 files changed, 26 insertions(+), 86 deletions(-) diff --git a/Bin/Config/Lang/cn/nmNum_cn.qm b/Bin/Config/Lang/cn/nmNum_cn.qm index 3092a7f82694ec20f4b0c0073dd0dd867a5ee791..fb8dbc0f9b5d0d6bc3593263aea801d6324fc8e3 100644 GIT binary patch delta 9836 zcmX|{d0dR^`^T?)o@Lf%6pD~NN%kTUhl+|qWEU!tog!J9ibTbcA!R4o_k9-?LWOME zNyonL$HDJ2bAMmIKfK=0{q)Stynw15K%v(avd!oshgqcsHINx2fkWoCRkj1Gy%4u_pvsx@??FF1}!JNK-ID3X#IGBxo z!Ea2O${F{Gb8ZM{vNdPQ3a}^9G7aYu^A})z$vhD}`_w$K5k$q<6Dfk&s4&wP=4kBU zgW*MDJ+Ps&9X1_*mp>BS#p6m>q6f}IE%n4C15vk)#C#(-XJb0%@q)@kzAm_*$vJuk zxQiH@&ne+>&12PZ⪻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 nmReservoirParameterPage - Reservoir parameters储层参数 - Well parameters井参数 - Fault parameters断层参数 - Fracture parameters裂缝参数 - Composite region parameters复合区参数 - Region mark parameters区域标记参数 - Select well:选择井: - Select fault:选择断层: - Select fracture:选择裂缝: - Select composite region:选择复合区: - Select region mark:选择区域标记: - Select object:选择对象: + Object display对象显示 + Display:显示: No editable objects in this category.此分类中没有可编辑对象。 diff --git a/Include/nmNum/nmSubWxs/nmReservoirParameterPage.h b/Include/nmNum/nmSubWxs/nmReservoirParameterPage.h index 10b80f8..db3cc1e 100644 --- a/Include/nmNum/nmSubWxs/nmReservoirParameterPage.h +++ b/Include/nmNum/nmSubWxs/nmReservoirParameterPage.h @@ -12,6 +12,7 @@ class nmReservoirParameterField; class nmReservoirPropertiesSession; class QComboBox; class QGridLayout; +class QGroupBox; class QLabel; class QVBoxLayout; @@ -76,15 +77,9 @@ private slots: void slotEnumIndexChanged(int nIndex); private: - /** @brief 创建页标题、对象选择器和单层分组区域。 */ + /** @brief 创建对象显示控制区和单层参数分组区域。 */ void createUi(); - /** @brief 根据当前分类返回标题。 */ - QString categoryTitle() const; - - /** @brief 根据当前分类返回对象选择标签。 */ - QString objectSelectorLabel() const; - /** @brief 构建指定对象的全部分组和字段。 */ bool buildObject(int nObjectIndex, QString& sError); @@ -115,8 +110,8 @@ private: bool m_bUpdatingObject; ///< 阻止对象下拉框回滚重入。 bool m_bBuildingFields; ///< 阻止加载数据时触发业务信号。 - QLabel* m_pTitleLabel; ///< 页面标题。 - QLabel* m_pObjectLabel; ///< 对象选择标签。 + QGroupBox* m_pObjectDisplayGroup; ///< 对象显示控制分组。 + QLabel* m_pObjectLabel; ///< 对象显示标签。 QComboBox* m_pObjectComboBox; ///< 多对象选择下拉框。 QWidget* m_pGroupsWidget; ///< 无边框的分组布局载体。 QGridLayout* m_pGroupsLayout; ///< 两列分组布局。 diff --git a/Src/nmNum/nmSubWxs/nmReservoirParameterPage.cpp b/Src/nmNum/nmSubWxs/nmReservoirParameterPage.cpp index 51565fd..3a0f630 100644 --- a/Src/nmNum/nmSubWxs/nmReservoirParameterPage.cpp +++ b/Src/nmNum/nmSubWxs/nmReservoirParameterPage.cpp @@ -23,7 +23,7 @@ nmReservoirParameterPage::nmReservoirParameterPage( m_nCurrentObjectIndex(-1), m_bUpdatingObject(false), m_bBuildingFields(false), - m_pTitleLabel(nullptr), + m_pObjectDisplayGroup(nullptr), m_pObjectLabel(nullptr), m_pObjectComboBox(nullptr), m_pGroupsWidget(nullptr), @@ -45,35 +45,31 @@ nmReservoirParameterPage::~nmReservoirParameterPage() void nmReservoirParameterPage::createUi() { - // 第一步:创建原型中的单层内容头,储层页自动隐藏对象选择器。 + // 第一步:创建单行对象显示控制区,储层页自动隐藏该分组。 m_pMainLayout = new QVBoxLayout(this); m_pMainLayout->setContentsMargins(8, 6, 8, 8); m_pMainLayout->setSpacing(8); - QWidget* pHeaderWidget = new QWidget(this); - QHBoxLayout* pHeaderLayout = new QHBoxLayout(pHeaderWidget); - pHeaderLayout->setContentsMargins(8, 4, 8, 4); - pHeaderLayout->setSpacing(9); + m_pObjectDisplayGroup = new QGroupBox(tr("Object display"), this); + m_pObjectDisplayGroup->setSizePolicy( + QSizePolicy::Expanding, QSizePolicy::Fixed); + QHBoxLayout* pObjectLayout = new QHBoxLayout(m_pObjectDisplayGroup); + pObjectLayout->setContentsMargins(8, 15, 8, 8); + pObjectLayout->setSpacing(9); - m_pTitleLabel = new QLabel(categoryTitle(), pHeaderWidget); - pHeaderLayout->addWidget(m_pTitleLabel, 1); - - m_pObjectLabel = new QLabel(objectSelectorLabel(), pHeaderWidget); - m_pObjectComboBox = new QComboBox(pHeaderWidget); + m_pObjectLabel = new QLabel(tr("Display:"), m_pObjectDisplayGroup); + m_pObjectLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter); + m_pObjectComboBox = new QComboBox(m_pObjectDisplayGroup); m_pObjectComboBox->setMinimumWidth(260); + m_pObjectComboBox->setMaximumWidth(420); m_pObjectComboBox->setMinimumHeight(27); - pHeaderLayout->addWidget(m_pObjectLabel); - pHeaderLayout->addWidget(m_pObjectComboBox); - // 储层页只有一个固定对象,顶部分类按钮已经说明当前页面, - // 不再重复显示无操作价值的页标题;其他页面保留对象选择区。 - if (m_eCategory == NM_RESERVOIR_PAGE_RESERVOIR) - { - pHeaderWidget->hide(); - } - else - { - m_pMainLayout->addWidget(pHeaderWidget); - } + pObjectLayout->addStretch(1); + pObjectLayout->addWidget(m_pObjectLabel); + pObjectLayout->addWidget(m_pObjectComboBox); + pObjectLayout->addStretch(1); + m_pMainLayout->addWidget(m_pObjectDisplayGroup); + m_pObjectDisplayGroup->setVisible( + m_eCategory != NM_RESERVOIR_PAGE_RESERVOIR); // 第二步:分组载体没有边框,仅用于实现原型中的两列网格。 m_pGroupsWidget = new QWidget(this); @@ -90,46 +86,6 @@ void nmReservoirParameterPage::createUi() this, SLOT(slotObjectChanged(int))); } -QString nmReservoirParameterPage::categoryTitle() const -{ - switch (m_eCategory) - { - case NM_RESERVOIR_PAGE_RESERVOIR: - return tr("Reservoir parameters"); - case NM_RESERVOIR_PAGE_WELL: - return tr("Well parameters"); - case NM_RESERVOIR_PAGE_FAULT: - return tr("Fault parameters"); - case NM_RESERVOIR_PAGE_FRACTURE: - return tr("Fracture parameters"); - case NM_RESERVOIR_PAGE_COMPOSITE_REGION: - return tr("Composite region parameters"); - case NM_RESERVOIR_PAGE_REGION_MARK: - return tr("Region mark parameters"); - default: - return QString(); - } -} - -QString nmReservoirParameterPage::objectSelectorLabel() const -{ - switch (m_eCategory) - { - case NM_RESERVOIR_PAGE_WELL: - return tr("Select well:"); - case NM_RESERVOIR_PAGE_FAULT: - return tr("Select fault:"); - case NM_RESERVOIR_PAGE_FRACTURE: - return tr("Select fracture:"); - case NM_RESERVOIR_PAGE_COMPOSITE_REGION: - return tr("Select composite region:"); - case NM_RESERVOIR_PAGE_REGION_MARK: - return tr("Select region mark:"); - default: - return tr("Select object:"); - } -} - bool nmReservoirParameterPage::reloadObjects(QString& sError) { // 第一步:重新取得会话对象描述,并把稳定对象code放入UserRole。 @@ -148,8 +104,7 @@ bool nmReservoirParameterPage::reloadObjects(QString& sError) m_bUpdatingObject = false; bool bShowSelector = m_eCategory != NM_RESERVOIR_PAGE_RESERVOIR; - m_pObjectLabel->setVisible(bShowSelector); - m_pObjectComboBox->setVisible(bShowSelector); + m_pObjectDisplayGroup->setVisible(bShowSelector); // 第二步:构建首个对象;空分类显示无额外面板的空状态。 return buildObject(m_listObjectInfos.isEmpty() ? -1 : 0, sError); From c11454e4a759de3466503e88aac57300e3c1eded Mon Sep 17 00:00:00 2001 From: lh <2334563547@qq.com> Date: Fri, 14 Aug 2026 16:25:00 +0800 Subject: [PATCH 04/10] =?UTF-8?q?fix(nmNum):=20=E4=BF=AE=E5=A4=8D=E5=8E=8B?= =?UTF-8?q?=E8=A3=82=E4=BA=95=E5=8F=82=E6=95=B0=E5=8D=95=E4=BD=8D=E7=BB=91?= =?UTF-8?q?=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将排水角度和裂缝角度单位统一为 deg - 补充 mD.m 流动能力单位组 - 修复裂缝角度和导流能力数值显示为空的问题 --- Bin/Config/Common/ModelParaDefinesNM_cn.dat | 2 +- Bin/Config/Common/ModelParaDefinesNM_en.dat | 2 +- Bin/Config/Common/UnitDefault_cn.dat | 2 +- Bin/XmlFiles/ModelParaDefinesNM_cn.xml | 4 ++-- Bin/XmlFiles/ModelParaDefinesNM_en.xml | 4 ++-- Bin/XmlFiles/UnitDefault_cn.xml | 8 ++++++++ 6 files changed, 15 insertions(+), 7 deletions(-) diff --git a/Bin/Config/Common/ModelParaDefinesNM_cn.dat b/Bin/Config/Common/ModelParaDefinesNM_cn.dat index 7ead93c..f5f319c 100644 --- a/Bin/Config/Common/ModelParaDefinesNM_cn.dat +++ b/Bin/Config/Common/ModelParaDefinesNM_cn.dat @@ -1 +1 @@ -PD94bWwgdmVycup_mpac2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSoqKioqKioqKioqKiwzyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gICAg5pys5paH5qGj55qE55uu55qE5piv5bu656uLV1RBSeaVsOWAvOinoyhOTSnmqKHlnZfnmoTlj4LmlbDlrprkuYkgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIOS7heWMheWQq1BFQknmsYLop6PlmajmiYDpnIDnmoTlgqjlsYLjgIHkupXlkozlh6DkvZXlr7nosaHlj4LmlbAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgRGF0ZTogMjAyNjA2MTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPCEtLQ0KICAgIOWPguaVsOiMg+WbtO+8mlBFQknmsYLop6PlmajmiYDpnIDnmoTlgqjlsYLjgIHkupXlkozlh6DkvZXlr7nosaHlj4LmlbANCiAgICDlr7nlupQgSFhfTldUTV9NT0RFTF9JTlBVVCDnu5PmnoTkvZPlrZfmrrUNCiAgICDpgJrov4cgX3BhcmFIZWxwZXItPmxvYWRQYXJhRGVmaW5lcygpIOWKoOi9ve+8jHNLZXkg5qCH6K+G5Li6IHNfTm1fU2VyaWUNCi0tPg0KDQo8Um9vdD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IuWCqOWxguWPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9ImgiICAgQWxpYXM9IuWCqOWxguWOmuW6piIgICAgICAgVW5pdD0ibSIgICAgIERlZmF1bHQ9IjEwIiAgICBNYXg9IjEwMDAwIiAgTWluPSIxZS0wNSIgIERpZ2l0PSI2IiAgRGVzYz0icmVzZXJ2b2lyIHRoaWNrbmVzcyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUGkiICBBbGlhcz0i5Yid5aeL5Y6L5YqbIiAgICAgICBVbml0PSJNUGEiICAgRGVmYXVsdD0iNDAiICAgIE1heD0iNTAwIiAgICBNaW49IjAuMSIgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIGZvcm1hdGlvbiBwcmVzc3VyZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iSyIgICBBbGlhcz0i5riX6YCP546HIiAgICAgICAgIFVuaXQ9Im1EIiAgICBEZWZhdWx0PSIyNSIgICAgTWF4PSIxMDAwMCIgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InBlcm1lYWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0icGhpIiBBbGlhcz0i5a2U6ZqZ5bqmIiAgICAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxIiAgICAgIE1pbj0iMWUtMDUiICBEaWdpdD0iNiIgIERlc2M9InBvcm9zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCbyIgIEFsaWFzPSLmsrnkvZPnp6/ns7vmlbAiICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMS4yIiAgIE1heD0iMTAiICAgICBNaW49IjFlLTA2IiAgRGlnaXQ9IjYiICBEZXNjPSJvaWwgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9Ik1pdW8iIEFsaWFzPSLmsrnnm7jpu4/luqYiICAgICAgVW5pdD0ibVBhLnMiIERlZmF1bHQ9IjAuNSIgICBNYXg9IjEwMDAwIiAgTWluPSIxZS0wNiIgIERpZ2l0PSI2IiAgRGVzYz0ib2lsIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iS3hLeSIgQWxpYXM9IuawtOW5s+a4l+mAj+eOh+avlCIgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIxIiAgICAgTWF4PSIxMDAwIiAgIE1pbj0iMWUtMDYiICBEaWdpdD0iNiIgIERlc2M9Imhvcml6b250YWwgcGVybWVhYmlsaXR5IHJhdGlvIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJDdGkiIEFsaWFzPSLnu7zlkIjljovnvKnns7vmlbAiICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAxIiBNYXg9IjEwIiAgICAgTWluPSIxZS0zMCIgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0idG90YWwgY29tcHJlc3NpYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJDZiIgIEFsaWFzPSLlsqnnn7PljovnvKnns7vmlbAiICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAwMSIgTWF4PSIxMCIgICAgTWluPSIxZS0zMCIgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icm9jayBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlNvaSIgQWxpYXM9IuWIneWni+WQq+ayuemlseWSjOW6piIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuOCIgICBNYXg9IjEiICAgICAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0iaW5pdGlhbCBvaWwgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iU3dpIiBBbGlhcz0i5Yid5aeL5ZCr5rC06aWx5ZKM5bqmIiBVbml0PSIiICAgICAgRGVmYXVsdD0iMC4yIiAgIE1heD0iMSIgICAgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIHdhdGVyIHNhdHVyYXRpb24iIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i5LqV5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19YIiAgICBBbGlhcz0iWOWdkOaghyIgICAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgICAgIE1heD0iMTAwMDAiICBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiICBEZXNjPSJ3ZWxsIFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19ZIiAgICBBbGlhcz0iWeWdkOaghyIgICAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgICAgIE1heD0iMTAwMDAiICBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiICBEZXNjPSJ3ZWxsIFkgY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19SdyIgICBBbGlhcz0i5LqV562S5Y2K5b6EIiAgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxMCIgICAgIE1pbj0iMC4wMDEiICBEaWdpdD0iNiIgIERlc2M9IndlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19Ta2luIiBBbGlhcz0i6KGo55qu57O75pWwIiAgICBVbml0PSIiICAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwIiAgIE1pbj0iLTEwMCIgICBEaWdpdD0iNiIgIERlc2M9InNraW4gZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0MiICAgIEFsaWFzPSLkupXnrZLlgqjpm4bns7vmlbAiIFVuaXQ9Im1eMy9NUGEiIERlZmF1bHQ9IjAiIE1heD0iMTAwMCIgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJ3ZWxsYm9yZSBzdG9yYWdlIGNvZWZmaWNpZW50IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1dlbGxMZW5ndGgiICAgICAgICAgQWxpYXM9IuawtOW5s+autemVv+W6piIgICBVbml0PSJtIiAgICBEZWZhdWx0PSIyMDAiICBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iNiIgRGVzYz0iaG9yaXpvbnRhbCB3ZWxsIGxlbmd0aCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19EcmFpbkFuZ2xlIiAgICAgICAgIEFsaWFzPSLmjpLmsLTop5LluqYiICAgICBVbml0PSLCsCIgICAgRGVmYXVsdD0iMCIgICAgTWF4PSIzNjAiICAgTWluPSItMzYwIiAgRGlnaXQ9IjYiIERlc2M9Imhvcml6b250YWwgd2VsbCBkcmFpbiBhbmdsZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19OdW1iZXJPZkZyYWN0dXJlcyIgIEFsaWFzPSLoo4LnvJ3mlbDph48iICAgICBVbml0PSIiICAgICBEZWZhdWx0PSIxNSIgICBNYXg9IjEwMDAiICBNaW49IjIiICAgICBEaWdpdD0iMCIgRGVzYz0ibnVtYmVyIG9mIGZyYWN0dXJlcyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19GcmFjdHVyZUhhbGZMZW5ndGgiIEFsaWFzPSLoo4LnvJ3ljYrplb8iICAgICBVbml0PSJtIiAgICBEZWZhdWx0PSI1MCIgICBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgaGFsZi1sZW5ndGgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfRnJhY3R1cmVBbmdsZSIgICAgICBBbGlhcz0i6KOC57yd6KeS5bqmIiAgICAgVW5pdD0iwrAiICAgIERlZmF1bHQ9IjkwIiAgIE1heD0iMzYwIiAgIE1pbj0iLTM2MCIgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBhbmdsZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19EZmMiICAgICAgICAgICAgICAgIEFsaWFzPSLoo4LnvJ3lr7zmtYHog73lipsiIFVuaXQ9Im1ELm0iIERlZmF1bHQ9IjEwMDAiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBjb25kdWN0aXZpdHkiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i54us56uL6KOC57yd5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9YMCIgQWxpYXM9Iui1t+eCuVgwIiAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgc3RhcnQgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX1kwIiBBbGlhcz0i6LW354K5WTAiICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBzdGFydCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWDEiIEFsaWFzPSLnu4jngrlYMSIgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGVuZCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWTEiIEFsaWFzPSLnu4jngrlZMSIgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGVuZCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfRkMiIEFsaWFzPSLlr7zmtYHog73lipsiIFVuaXQ9Im1ELm0iIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgY29uZHVjdGl2aXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX0RXIiBBbGlhcz0i6KOC57yd5a695bqm5Y+C5pWwIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIHdpZHRoIHBhcmFtZXRlciIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLmlq3lsYLlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9YMCIgQWxpYXM9Iui1t+eCuVgwIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IHN0YXJ0IFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWTAiIEFsaWFzPSLotbfngrlZMCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBzdGFydCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1gxIiBBbGlhcz0i57uI54K5WDEiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZmF1bHQgZW5kIFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWTEiIEFsaWFzPSLnu4jngrlZMSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBlbmQgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9MZWFrYWdlIiBBbGlhcz0i5rOE5ryP57O75pWwIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IGxlYWthZ2UgY29lZmZpY2llbnQiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i55+p5b2i6L6555WM5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWE1pbiIgQWxpYXM9IuW3pui+ueeVjFgiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1pbmltdW0gWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWU1pbiIgQWxpYXM9IuS4i+i+ueeVjFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1pbmltdW0gWSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWE1heCIgQWxpYXM9IuWPs+i+ueeVjFgiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1heGltdW0gWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWU1heCIgQWxpYXM9IuS4iui+ueeVjFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1heGltdW0gWSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLlnIblvaLovrnnlYzlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCQ19DZW50ZXJYIiBBbGlhcz0i5ZyG5b+DWCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJjaXJjbGUgYm91bmRhcnkgY2VudGVyIFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJDX0NlbnRlclkiIEFsaWFzPSLlnIblv4NZIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImNpcmNsZSBib3VuZGFyeSBjZW50ZXIgWSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQkNfUmFkaXVzIiAgQWxpYXM9IuWNiuW+hCIgIFVuaXQ9Im0iIERlZmF1bHQ9IjEiIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiICBEaWdpdD0iNiIgRGVzYz0iY2lyY2xlIGJvdW5kYXJ5IHJhZGl1cyIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLlpJrovrnlvaLovrnnlYzngrnlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUF9YIiBBbGlhcz0iWOWdkOaghyIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJwb2x5Z29uIGJvdW5kYXJ5IHZlcnRleCBYIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUF9ZIiBBbGlhcz0iWeWdkOaghyIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJwb2x5Z29uIGJvdW5kYXJ5IHZlcnRleCBZIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IuWMuuWfn+WPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJfTGVha2FnZSIgQWxpYXM9IuazhOmcsuezu+aVsCIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJyZWdpb24gbGVha2FnZSBjb2VmZmljaWVudCIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLmoIforrDljLrln5/lj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSTV9Db21XIiAgICAgICBBbGlhcz0i5YKo6IO95q+UIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMSIgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiIERlc2M9InN0b3JhZ2UgcmF0aW8iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX0NvbUtyIiAgICAgIEFsaWFzPSLmtYHluqbmr5QiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxMDAwIiBNaW49IjAuMDAxIiBEaWdpdD0iNiIgRGVzYz0ibW9iaWxpdHkgcmF0aW8iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX05ldFRvR3Jvc3MiIEFsaWFzPSLlh4Dmr5vmr5QiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxIiAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgRGVzYz0ibmV0LXRvLWdyb3NzIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8IS0tIOe7k+aenOmdouadv+WPguaVsOWPqueUsSByZWJ1aWxkUmVzdWx0UGFyYXMoKSDpgInmi6nvvIzkuI3kvJrlh7rnjrDlnKjlt6bkvqfpnaLmnb/kuK3jgIIgLS0+DQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i57uT5p6c5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfUnciICAgQWxpYXM9IuS6leW+hCIgICAgICAgICBVbml0PSJtIiAgICAgIERlZmF1bHQ9IjAuMSIgICAgTWF4PSIxMCIgICAgTWluPSIwLjAwMSIgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfRGZjIiAgQWxpYXM9Iuijgue8neWvvOa1geiDveWKmyIgVW5pdD0ibUQubSIgICBEZWZhdWx0PSIxMDAwIiAgIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBmcmFjdHVyZSBjb25kdWN0aXZpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9XX1NraW4iIEFsaWFzPSLooajnmq7ns7vmlbAiICAgICBVbml0PSIiICAgICAgIERlZmF1bHQ9IjAiICAgICAgTWF4PSIxMDAwIiAgTWluPSItMTAwIiAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHNraW4gZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfV19DIiAgICBBbGlhcz0i5LqV562S5YKo6ZuG57O75pWwIiBVbml0PSJtXjMvTVBhIiBEZWZhdWx0PSIwIiAgICAgIE1heD0iMTAwMCIgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3ZWxsYm9yZSBzdG9yYWdlIGNvZWZmaWNpZW50IiAvPg0KDQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9QaSIgIEFsaWFzPSLliJ3lp4vlnLDlsYLljovlipsiICAgVW5pdD0iTVBhIiAgIERlZmF1bHQ9IjQwIiAgICAgTWF4PSI1MDAiICAgTWluPSIwLjEiICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBmb3JtYXRpb24gcHJlc3N1cmUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9LIiAgIEFsaWFzPSLmuJfpgI/njociICAgICAgICAgVW5pdD0ibUQiICAgIERlZmF1bHQ9IjI1IiAgICAgTWF4PSIxMDAwMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgcGVybWVhYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfaCIgICBBbGlhcz0i5YKo5bGC5Y6a5bqmIiAgICAgICBVbml0PSJtIiAgICAgRGVmYXVsdD0iMTAiICAgICBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCByZXNlcnZvaXIgdGhpY2tuZXNzIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfcGhpIiBBbGlhcz0i5a2U6ZqZ5bqmIiAgICAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjEiICAgIE1heD0iMSIgICAgIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHBvcm9zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ3RpIiBBbGlhcz0i57u85ZCI5Y6L57yp57O75pWwIiAgIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwLjAwMSIgIE1heD0iMTAiICAgIE1pbj0iMWUtMzAiIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IHRvdGFsIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0NmIiAgQWxpYXM9IuWyqeefs+WOi+e8qeezu+aVsCIgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDAxIiBNYXg9IjEwIiAgICBNaW49IjFlLTMwIiBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCByb2NrIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1NvaSIgQWxpYXM9IuWIneWni+WQq+ayuemlseWSjOW6piIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuOCIgICAgTWF4PSIxIiAgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBvaWwgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1NnaSIgQWxpYXM9IuWIneWni+WQq+awlOmlseWSjOW6piIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAiICAgICAgTWF4PSIxIiAgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBnYXMgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1N3aSIgQWxpYXM9IuWIneWni+WQq+awtOmlseWSjOW6piIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuMiIgICAgTWF4PSIxIiAgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCB3YXRlciBzYXR1cmF0aW9uIiAvPg0KDQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9CbyIgICBBbGlhcz0i5rK55L2T56ev57O75pWwIiBVbml0PSIiICAgICAgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1byIgQWxpYXM9IuayueebuOm7j+W6piIgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0NvIiAgIEFsaWFzPSLmsrnljovnvKnns7vmlbAiIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IG9pbCBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9CdyIgICBBbGlhcz0i5rC05L2T56ev57O75pWwIiBVbml0PSJtMy9tMyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgd2F0ZXIgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9NaXV3IiBBbGlhcz0i5rC055u46buP5bqmIiAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjFlLTMwIiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3YXRlciB2aXNjb3NpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DdyIgICBBbGlhcz0i5rC05Y6L57yp57O75pWwIiBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCB3YXRlciBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9CZyIgICBBbGlhcz0i5rCU5L2T56ev57O75pWwIiBVbml0PSJtMy9tMyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgZ2FzIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1ZyIgQWxpYXM9IuawlOebuOm7j+W6piIgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgZ2FzIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0NnIiAgIEFsaWFzPSLmsJTljovnvKnns7vmlbAiIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IGdhcyBjb21wcmVzc2liaWxpdHkiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQo8L1Jvb3Q+DQo= \ No newline at end of file +PD94bWwgdmVycup_mpac2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSoqKioqKioqKioqKiwzyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gICAg5pys5paH5qGj55qE55uu55qE5piv5bu656uLV1RBSeaVsOWAvOinoyhOTSnmqKHlnZfnmoTlj4LmlbDlrprkuYkgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIOS7heWMheWQq1BFQknmsYLop6PlmajmiYDpnIDnmoTlgqjlsYLjgIHkupXlkozlh6DkvZXlr7nosaHlj4LmlbAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgRGF0ZTogMjAyNjA2MTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPCEtLQ0KICAgIOWPguaVsOiMg+WbtO+8mlBFQknmsYLop6PlmajmiYDpnIDnmoTlgqjlsYLjgIHkupXlkozlh6DkvZXlr7nosaHlj4LmlbANCiAgICDlr7nlupQgSFhfTldUTV9NT0RFTF9JTlBVVCDnu5PmnoTkvZPlrZfmrrUNCiAgICDpgJrov4cgX3BhcmFIZWxwZXItPmxvYWRQYXJhRGVmaW5lcygpIOWKoOi9ve+8jHNLZXkg5qCH6K+G5Li6IHNfTm1fU2VyaWUNCi0tPg0KDQo8Um9vdD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IuWCqOWxguWPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9ImgiICAgQWxpYXM9IuWCqOWxguWOmuW6piIgICAgICAgVW5pdD0ibSIgICAgIERlZmF1bHQ9IjEwIiAgICBNYXg9IjEwMDAwIiAgTWluPSIxZS0wNSIgIERpZ2l0PSI2IiAgRGVzYz0icmVzZXJ2b2lyIHRoaWNrbmVzcyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUGkiICBBbGlhcz0i5Yid5aeL5Y6L5YqbIiAgICAgICBVbml0PSJNUGEiICAgRGVmYXVsdD0iNDAiICAgIE1heD0iNTAwIiAgICBNaW49IjAuMSIgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIGZvcm1hdGlvbiBwcmVzc3VyZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iSyIgICBBbGlhcz0i5riX6YCP546HIiAgICAgICAgIFVuaXQ9Im1EIiAgICBEZWZhdWx0PSIyNSIgICAgTWF4PSIxMDAwMCIgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InBlcm1lYWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0icGhpIiBBbGlhcz0i5a2U6ZqZ5bqmIiAgICAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxIiAgICAgIE1pbj0iMWUtMDUiICBEaWdpdD0iNiIgIERlc2M9InBvcm9zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCbyIgIEFsaWFzPSLmsrnkvZPnp6/ns7vmlbAiICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMS4yIiAgIE1heD0iMTAiICAgICBNaW49IjFlLTA2IiAgRGlnaXQ9IjYiICBEZXNjPSJvaWwgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9Ik1pdW8iIEFsaWFzPSLmsrnnm7jpu4/luqYiICAgICAgVW5pdD0ibVBhLnMiIERlZmF1bHQ9IjAuNSIgICBNYXg9IjEwMDAwIiAgTWluPSIxZS0wNiIgIERpZ2l0PSI2IiAgRGVzYz0ib2lsIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iS3hLeSIgQWxpYXM9IuawtOW5s+a4l+mAj+eOh+avlCIgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIxIiAgICAgTWF4PSIxMDAwIiAgIE1pbj0iMWUtMDYiICBEaWdpdD0iNiIgIERlc2M9Imhvcml6b250YWwgcGVybWVhYmlsaXR5IHJhdGlvIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJDdGkiIEFsaWFzPSLnu7zlkIjljovnvKnns7vmlbAiICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAxIiBNYXg9IjEwIiAgICAgTWluPSIxZS0zMCIgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0idG90YWwgY29tcHJlc3NpYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJDZiIgIEFsaWFzPSLlsqnnn7PljovnvKnns7vmlbAiICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAwMSIgTWF4PSIxMCIgICAgTWluPSIxZS0zMCIgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icm9jayBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlNvaSIgQWxpYXM9IuWIneWni+WQq+ayuemlseWSjOW6piIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuOCIgICBNYXg9IjEiICAgICAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0iaW5pdGlhbCBvaWwgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iU3dpIiBBbGlhcz0i5Yid5aeL5ZCr5rC06aWx5ZKM5bqmIiBVbml0PSIiICAgICAgRGVmYXVsdD0iMC4yIiAgIE1heD0iMSIgICAgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIHdhdGVyIHNhdHVyYXRpb24iIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i5LqV5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19YIiAgICBBbGlhcz0iWOWdkOaghyIgICAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgICAgIE1heD0iMTAwMDAiICBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiICBEZXNjPSJ3ZWxsIFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19ZIiAgICBBbGlhcz0iWeWdkOaghyIgICAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgICAgIE1heD0iMTAwMDAiICBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiICBEZXNjPSJ3ZWxsIFkgY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19SdyIgICBBbGlhcz0i5LqV562S5Y2K5b6EIiAgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxMCIgICAgIE1pbj0iMC4wMDEiICBEaWdpdD0iNiIgIERlc2M9IndlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19Ta2luIiBBbGlhcz0i6KGo55qu57O75pWwIiAgICBVbml0PSIiICAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwIiAgIE1pbj0iLTEwMCIgICBEaWdpdD0iNiIgIERlc2M9InNraW4gZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0MiICAgIEFsaWFzPSLkupXnrZLlgqjpm4bns7vmlbAiIFVuaXQ9Im1eMy9NUGEiIERlZmF1bHQ9IjAiIE1heD0iMTAwMCIgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJ3ZWxsYm9yZSBzdG9yYWdlIGNvZWZmaWNpZW50IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1dlbGxMZW5ndGgiICAgICAgICAgQWxpYXM9IuawtOW5s+autemVv+W6piIgICBVbml0PSJtIiAgICBEZWZhdWx0PSIyMDAiICBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iNiIgRGVzYz0iaG9yaXpvbnRhbCB3ZWxsIGxlbmd0aCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19EcmFpbkFuZ2xlIiAgICAgICAgIEFsaWFzPSLmjpLmsLTop5LluqYiICAgICBVbml0PSJkZWciICBEZWZhdWx0PSIwIiAgICBNYXg9IjM2MCIgICBNaW49Ii0zNjAiICBEaWdpdD0iNiIgRGVzYz0iaG9yaXpvbnRhbCB3ZWxsIGRyYWluIGFuZ2xlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX051bWJlck9mRnJhY3R1cmVzIiAgQWxpYXM9Iuijgue8neaVsOmHjyIgICAgIFVuaXQ9IiIgICAgIERlZmF1bHQ9IjE1IiAgIE1heD0iMTAwMCIgIE1pbj0iMiIgICAgIERpZ2l0PSIwIiBEZXNjPSJudW1iZXIgb2YgZnJhY3R1cmVzIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0ZyYWN0dXJlSGFsZkxlbmd0aCIgQWxpYXM9Iuijgue8neWNiumVvyIgICAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjUwIiAgIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBoYWxmLWxlbmd0aCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19GcmFjdHVyZUFuZ2xlIiAgICAgIEFsaWFzPSLoo4LnvJ3op5LluqYiICAgICBVbml0PSJkZWciICBEZWZhdWx0PSI5MCIgICBNYXg9IjM2MCIgICBNaW49Ii0zNjAiICBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgYW5nbGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfRGZjIiAgICAgICAgICAgICAgICBBbGlhcz0i6KOC57yd5a+85rWB6IO95YqbIiBVbml0PSJtRC5tIiBEZWZhdWx0PSIxMDAwIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgY29uZHVjdGl2aXR5IiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IueLrOeri+ijgue8neWPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWDAiIEFsaWFzPSLotbfngrlYMCIgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIHN0YXJ0IFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9ZMCIgQWxpYXM9Iui1t+eCuVkwIiAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgc3RhcnQgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX1gxIiBBbGlhcz0i57uI54K5WDEiICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBlbmQgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX1kxIiBBbGlhcz0i57uI54K5WTEiICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBlbmQgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX0ZDIiBBbGlhcz0i5a+85rWB6IO95YqbIiBVbml0PSJtRC5tIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICAgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGNvbmR1Y3Rpdml0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9EVyIgQWxpYXM9Iuijgue8neWuveW6puWPguaVsCIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSB3aWR0aCBwYXJhbWV0ZXIiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i5pat5bGC5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWDAiIEFsaWFzPSLotbfngrlYMCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBzdGFydCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1kwIiBBbGlhcz0i6LW354K5WTAiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZmF1bHQgc3RhcnQgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9YMSIgQWxpYXM9Iue7iOeCuVgxIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IGVuZCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1kxIiBBbGlhcz0i57uI54K5WTEiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZmF1bHQgZW5kIFkgY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfTGVha2FnZSIgQWxpYXM9IuazhOa8j+ezu+aVsCIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBsZWFrYWdlIGNvZWZmaWNpZW50IiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IuefqeW9oui+ueeVjOWPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJSX1hNaW4iIEFsaWFzPSLlt6bovrnnlYxYIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InJlY3RhbmdsZSBib3VuZGFyeSBtaW5pbXVtIFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJSX1lNaW4iIEFsaWFzPSLkuIvovrnnlYxZIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InJlY3RhbmdsZSBib3VuZGFyeSBtaW5pbXVtIFkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJSX1hNYXgiIEFsaWFzPSLlj7PovrnnlYxYIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InJlY3RhbmdsZSBib3VuZGFyeSBtYXhpbXVtIFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJSX1lNYXgiIEFsaWFzPSLkuIrovrnnlYxZIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InJlY3RhbmdsZSBib3VuZGFyeSBtYXhpbXVtIFkiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i5ZyG5b2i6L6555WM5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQkNfQ2VudGVyWCIgQWxpYXM9IuWchuW/g1giIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iY2lyY2xlIGJvdW5kYXJ5IGNlbnRlciBYIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCQ19DZW50ZXJZIiBBbGlhcz0i5ZyG5b+DWSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJjaXJjbGUgYm91bmRhcnkgY2VudGVyIFkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJDX1JhZGl1cyIgIEFsaWFzPSLljYrlvoQiICBVbml0PSJtIiBEZWZhdWx0PSIxIiBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiAgRGlnaXQ9IjYiIERlc2M9ImNpcmNsZSBib3VuZGFyeSByYWRpdXMiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i5aSa6L655b2i6L6555WM54K55Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlBfWCIgQWxpYXM9IljlnZDmoIciIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icG9seWdvbiBib3VuZGFyeSB2ZXJ0ZXggWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlBfWSIgQWxpYXM9IlnlnZDmoIciIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icG9seWdvbiBib3VuZGFyeSB2ZXJ0ZXggWSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLljLrln5/lj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSX0xlYWthZ2UiIEFsaWFzPSLms4TpnLLns7vmlbAiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiBEaWdpdD0iNiIgRGVzYz0icmVnaW9uIGxlYWthZ2UgY29lZmZpY2llbnQiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i5qCH6K6w5Yy65Z+f5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUk1fQ29tVyIgICAgICAgQWxpYXM9IuWCqOiDveavlCIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjEiICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiBEZXNjPSJzdG9yYWdlIHJhdGlvIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSTV9Db21LciIgICAgICBBbGlhcz0i5rWB5bqm5q+UIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMTAwMCIgTWluPSIwLjAwMSIgRGlnaXQ9IjYiIERlc2M9Im1vYmlsaXR5IHJhdGlvIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSTV9OZXRUb0dyb3NzIiBBbGlhcz0i5YeA5q+b5q+UIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMSIgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiIERlc2M9Im5ldC10by1ncm9zcyIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPCEtLSDnu5PmnpzpnaLmnb/lj4LmlbDlj6rnlLEgcmVidWlsZFJlc3VsdFBhcmFzKCkg6YCJ5oup77yM5LiN5Lya5Ye6546w5Zyo5bem5L6n6Z2i5p2/5Lit44CCIC0tPg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9Iue7k+aenOWPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9XX1J3IiAgIEFsaWFzPSLkupXlvoQiICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwLjEiICAgIE1heD0iMTAiICAgIE1pbj0iMC4wMDEiICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3ZWxsYm9yZSByYWRpdXMiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9XX0RmYyIgIEFsaWFzPSLoo4LnvJ3lr7zmtYHog73lipsiIFVuaXQ9Im1ELm0iICAgRGVmYXVsdD0iMTAwMCIgICBNYXg9IjFlKzMwIiBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgZnJhY3R1cmUgY29uZHVjdGl2aXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfV19Ta2luIiBBbGlhcz0i6KGo55qu57O75pWwIiAgICAgVW5pdD0iIiAgICAgICBEZWZhdWx0PSIwIiAgICAgIE1heD0iMTAwMCIgIE1pbj0iLTEwMCIgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBza2luIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfQyIgICAgQWxpYXM9IuS6leetkuWCqOmbhuezu+aVsCIgVW5pdD0ibV4zL01QYSIgRGVmYXVsdD0iMCIgICAgICBNYXg9IjEwMDAiICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgd2VsbGJvcmUgc3RvcmFnZSBjb2VmZmljaWVudCIgLz4NCg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfUGkiICBBbGlhcz0i5Yid5aeL5Zyw5bGC5Y6L5YqbIiAgIFVuaXQ9Ik1QYSIgICBEZWZhdWx0PSI0MCIgICAgIE1heD0iNTAwIiAgIE1pbj0iMC4xIiAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGluaXRpYWwgZm9ybWF0aW9uIHByZXNzdXJlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfSyIgICBBbGlhcz0i5riX6YCP546HIiAgICAgICAgIFVuaXQ9Im1EIiAgICBEZWZhdWx0PSIyNSIgICAgIE1heD0iMTAwMDAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHBlcm1lYWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X2giICAgQWxpYXM9IuWCqOWxguWOmuW6piIgICAgICAgVW5pdD0ibSIgICAgIERlZmF1bHQ9IjEwIiAgICAgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgcmVzZXJ2b2lyIHRoaWNrbmVzcyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X3BoaSIgQWxpYXM9IuWtlOmameW6piIgICAgICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMC4xIiAgICBNYXg9IjEiICAgICBNaW49IjFlLTA1IiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBwb3Jvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0N0aSIgQWxpYXM9Iue7vOWQiOWOi+e8qeezu+aVsCIgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDEiICBNYXg9IjEwIiAgICBNaW49IjFlLTMwIiBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCB0b3RhbCBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DZiIgIEFsaWFzPSLlsqnnn7PljovnvKnns7vmlbAiICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAwMSIgTWF4PSIxMCIgICAgTWluPSIxZS0zMCIgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgcm9jayBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9Tb2kiIEFsaWFzPSLliJ3lp4vlkKvmsrnppbHlkozluqYiIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjgiICAgIE1heD0iMSIgICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGluaXRpYWwgb2lsIHNhdHVyYXRpb24iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9TZ2kiIEFsaWFzPSLliJ3lp4vlkKvmsJTppbHlkozluqYiIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwIiAgICAgIE1heD0iMSIgICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGluaXRpYWwgZ2FzIHNhdHVyYXRpb24iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9Td2kiIEFsaWFzPSLliJ3lp4vlkKvmsLTppbHlkozluqYiIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjIiICAgIE1heD0iMSIgICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGluaXRpYWwgd2F0ZXIgc2F0dXJhdGlvbiIgLz4NCg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQm8iICAgQWxpYXM9IuayueS9k+enr+ezu+aVsCIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IG9pbCBmb3JtYXRpb24gdm9sdW1lIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X01pdW8iIEFsaWFzPSLmsrnnm7jpu4/luqYiICAgVW5pdD0ibVBhLnMiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMWUtMzAiIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IG9pbCB2aXNjb3NpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DbyIgICBBbGlhcz0i5rK55Y6L57yp57O75pWwIiBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCBvaWwgY29tcHJlc3NpYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQnciICAgQWxpYXM9IuawtOS9k+enr+ezu+aVsCIgVW5pdD0ibTMvbTMiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdhdGVyIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1dyIgQWxpYXM9IuawtOebuOm7j+W6piIgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgd2F0ZXIgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ3ciICAgQWxpYXM9IuawtOWOi+e8qeezu+aVsCIgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgd2F0ZXIgY29tcHJlc3NpYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQmciICAgQWxpYXM9IuawlOS9k+enr+ezu+aVsCIgVW5pdD0ibTMvbTMiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGdhcyBmb3JtYXRpb24gdm9sdW1lIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X01pdWciIEFsaWFzPSLmsJTnm7jpu4/luqYiICAgVW5pdD0ibVBhLnMiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMWUtMzAiIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGdhcyB2aXNjb3NpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DZyIgICBBbGlhcz0i5rCU5Y6L57yp57O75pWwIiBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCBnYXMgY29tcHJlc3NpYmlsaXR5IiAvPg0KICA8L1BhcmFHcm91cD4NCg0KPC9Sb290Pg0K \ No newline at end of file diff --git a/Bin/Config/Common/ModelParaDefinesNM_en.dat b/Bin/Config/Common/ModelParaDefinesNM_en.dat index 00e84c3..09deb56 100644 --- a/Bin/Config/Common/ModelParaDefinesNM_en.dat +++ b/Bin/Config/Common/ModelParaDefinesNM_en.dat @@ -1 +1 @@ -PD94bWwgdmVycup_mpac2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSoqKioqKioqKioqKiwzyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gICAgVGhpcyBmaWxlIGRlZmluZXMgcGFyYW1ldGVycyBmb3IgdGhlIFdUQUkgTnVtZXJpY2FsIChOTSkgICAgLS0+DQo8IS0tICAgIG1vZHVsZS4gT25seSByZXNlcnZvaXIsIHdlbGwsIGFuZCBnZW9tZXRyeSBwYXJhbWV0ZXJzICAgICAgICAtLT4NCjwhLS0gICAgcmVxdWlyZWQgYnkgdGhlIFBFQkkgc29sdmVyIGFyZSBpbmNsdWRlZC4gICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI2MDYxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi0tPg0KDQo8IS0tDQogICAgUGFyYW1ldGVyIHNjb3BlOiByZXNlcnZvaXIsIHdlbGwsIGFuZCBnZW9tZXRyeSBwYXJhbWV0ZXJzIHJlcXVpcmVkIGJ5IHRoZSBQRUJJIHNvbHZlcg0KICAgIENvcnJlc3BvbmRzIHRvIEhYX05XVE1fTU9ERUxfSU5QVVQgc3RydWN0IGZpZWxkcw0KICAgIExvYWRlZCB2aWEgX3BhcmFIZWxwZXItPmxvYWRQYXJhRGVmaW5lcygpLCBzS2V5ID0gc19ObV9TZXJpZQ0KLS0+DQoNCjxSb290Pg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVzZXJ2b2lyIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJoIiAgIEFsaWFzPSJSZXNlcnZvaXIgVGhpY2tuZXNzIiAgICAgICAgIFVuaXQ9Im0iICAgICBEZWZhdWx0PSIxMCIgICAgTWF4PSIxMDAwMCIgIE1pbj0iMWUtMDUiICBEaWdpdD0iMyIgIERlc2M9InJlc2Vydm9pciB0aGlja25lc3MiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlBpIiAgQWxpYXM9IkluaXRpYWwgUHJlc3N1cmUiICAgICAgICAgICAgVW5pdD0iTVBhIiAgIERlZmF1bHQ9IjQwIiAgICBNYXg9IjUwMCIgICAgTWluPSIwLjEiICAgIERpZ2l0PSI1IiAgRGVzYz0iaW5pdGlhbCBmb3JtYXRpb24gcHJlc3N1cmUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IksiICAgQWxpYXM9IlBlcm1lYWJpbGl0eSIgICAgICAgICAgICAgICAgVW5pdD0ibUQiICAgIERlZmF1bHQ9IjI1IiAgICBNYXg9IjEwMDAwIiAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0icGVybWVhYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJwaGkiIEFsaWFzPSJQb3Jvc2l0eSIgICAgICAgICAgICAgICAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxIiAgICAgIE1pbj0iMWUtMDUiICBEaWdpdD0iNCIgIERlc2M9InBvcm9zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCbyIgIEFsaWFzPSJPaWwgRm9ybWF0aW9uIFZvbHVtZSBGYWN0b3IiIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIxLjIiICAgTWF4PSIxMCIgICAgIE1pbj0iMWUtMDYiICBEaWdpdD0iNiIgIERlc2M9Im9pbCBmb3JtYXRpb24gdm9sdW1lIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iTWl1byIgQWxpYXM9Ik9pbCBWaXNjb3NpdHkiICAgICAgICAgICAgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMC41IiAgIE1heD0iMTAwMDAiICBNaW49IjFlLTA2IiAgRGlnaXQ9IjYiICBEZXNjPSJvaWwgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJLeEt5IiBBbGlhcz0iSG9yaXpvbnRhbCBQZXJtZWFiaWxpdHkgUmF0aW8iIFVuaXQ9IiIgICBEZWZhdWx0PSIxIiAgICAgTWF4PSIxMDAwIiAgIE1pbj0iMWUtMDYiICBEaWdpdD0iNiIgIERlc2M9Imhvcml6b250YWwgcGVybWVhYmlsaXR5IHJhdGlvIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJDdGkiIEFsaWFzPSJUb3RhbCBDb21wcmVzc2liaWxpdHkiICAgICAgIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwLjAwMSIgTWF4PSIxMCIgICAgIE1pbj0iMWUtMzAiICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InRvdGFsIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQ2YiICBBbGlhcz0iUm9jayBDb21wcmVzc2liaWxpdHkiICAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDAxIiBNYXg9IjEwIiAgICBNaW49IjFlLTMwIiAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyb2NrIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iU29pIiBBbGlhcz0iSW5pdGlhbCBPaWwgU2F0dXJhdGlvbiIgICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMC44IiAgIE1heD0iMSIgICAgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIG9pbCBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJTd2kiIEFsaWFzPSJJbml0aWFsIFdhdGVyIFNhdHVyYXRpb24iICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjIiICAgTWF4PSIxIiAgICAgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9ImluaXRpYWwgd2F0ZXIgc2F0dXJhdGlvbiIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJXZWxsIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1giICAgIEFsaWFzPSJYIENvb3JkaW5hdGUiICAgICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1kiICAgIEFsaWFzPSJZIENvb3JkaW5hdGUiICAgICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1J3IiAgIEFsaWFzPSJXZWxsYm9yZSBSYWRpdXMiICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxMCIgICAgIE1pbj0iMC4wMDEiICBEaWdpdD0iNiIgIERlc2M9IndlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19Ta2luIiBBbGlhcz0iU2tpbiBGYWN0b3IiICAgICAgICAgICAgIFVuaXQ9IiIgICAgICAgRGVmYXVsdD0iMCIgICAgIE1heD0iMTAwMCIgICBNaW49Ii0xMDAiICAgRGlnaXQ9IjYiICBEZXNjPSJza2luIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19DIiAgICBBbGlhcz0iV2VsbGJvcmUgU3RvcmFnZSBDb2VmZiIgIFVuaXQ9Im1eMy9NUGEiIERlZmF1bHQ9IjAiICAgICBNYXg9IjEwMDAiICAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0id2VsbGJvcmUgc3RvcmFnZSBjb2VmZmljaWVudCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19XZWxsTGVuZ3RoIiAgICAgICAgIEFsaWFzPSJIb3Jpem9udGFsIFdlbGwgTGVuZ3RoIiBVbml0PSJtIiAgICBEZWZhdWx0PSIyMDAiICBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iNiIgRGVzYz0iaG9yaXpvbnRhbCB3ZWxsIGxlbmd0aCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19EcmFpbkFuZ2xlIiAgICAgICAgIEFsaWFzPSJEcmFpbiBBbmdsZSIgICAgICAgICAgICBVbml0PSLCsCIgICAgRGVmYXVsdD0iMCIgICAgTWF4PSIzNjAiICAgTWluPSItMzYwIiAgRGlnaXQ9IjYiIERlc2M9Imhvcml6b250YWwgd2VsbCBkcmFpbiBhbmdsZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19OdW1iZXJPZkZyYWN0dXJlcyIgIEFsaWFzPSJOdW1iZXIgb2YgRnJhY3R1cmVzIiAgICBVbml0PSIiICAgICBEZWZhdWx0PSIxNSIgICBNYXg9IjEwMDAiICBNaW49IjIiICAgICBEaWdpdD0iMCIgRGVzYz0ibnVtYmVyIG9mIGZyYWN0dXJlcyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19GcmFjdHVyZUhhbGZMZW5ndGgiIEFsaWFzPSJGcmFjdHVyZSBIYWxmLUxlbmd0aCIgICBVbml0PSJtIiAgICBEZWZhdWx0PSI1MCIgICBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgaGFsZi1sZW5ndGgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfRnJhY3R1cmVBbmdsZSIgICAgICBBbGlhcz0iRnJhY3R1cmUgQW5nbGUiICAgICAgICAgVW5pdD0iwrAiICAgIERlZmF1bHQ9IjkwIiAgIE1heD0iMzYwIiAgIE1pbj0iLTM2MCIgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBhbmdsZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19EZmMiICAgICAgICAgICAgICAgIEFsaWFzPSJGcmFjdHVyZSBDb25kdWN0aXZpdHkiICBVbml0PSJtRC5tIiBEZWZhdWx0PSIxMDAwIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgY29uZHVjdGl2aXR5IiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IkluZGVwZW5kZW50IEZyYWN0dXJlIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX1gwIiBBbGlhcz0iU3RhcnQgWDAiICAgICAgICAgICAgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIHN0YXJ0IFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9ZMCIgQWxpYXM9IlN0YXJ0IFkwIiAgICAgICAgICAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBzdGFydCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWDEiIEFsaWFzPSJFbmQgWDEiICAgICAgICAgICAgICAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgZW5kIFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9ZMSIgQWxpYXM9IkVuZCBZMSIgICAgICAgICAgICAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBlbmQgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX0ZDIiBBbGlhcz0iRnJhY3R1cmUgQ29uZHVjdGl2aXR5IiBVbml0PSJtRC5tIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICAgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGNvbmR1Y3Rpdml0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9EVyIgQWxpYXM9IkZyYWN0dXJlIFdpZHRoIFBhcmFtZXRlciIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSB3aWR0aCBwYXJhbWV0ZXIiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iRmF1bHQgUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1gwIiBBbGlhcz0iU3RhcnQgWDAiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZmF1bHQgc3RhcnQgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9ZMCIgQWxpYXM9IlN0YXJ0IFkwIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IHN0YXJ0IFkgY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWDEiIEFsaWFzPSJFbmQgWDEiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZmF1bHQgZW5kIFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWTEiIEFsaWFzPSJFbmQgWTEiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZmF1bHQgZW5kIFkgY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfTGVha2FnZSIgQWxpYXM9IkxlYWthZ2UgQ29lZmZpY2llbnQiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiBEaWdpdD0iNiIgRGVzYz0iZmF1bHQgbGVha2FnZSBjb2VmZmljaWVudCIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJSZWN0YW5nbGUgQm91bmRhcnkgUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJSX1hNaW4iIEFsaWFzPSJMZWZ0IEJvdW5kYXJ5IFgiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1pbmltdW0gWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWU1pbiIgQWxpYXM9IkJvdHRvbSBCb3VuZGFyeSBZIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InJlY3RhbmdsZSBib3VuZGFyeSBtaW5pbXVtIFkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJSX1hNYXgiIEFsaWFzPSJSaWdodCBCb3VuZGFyeSBYIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InJlY3RhbmdsZSBib3VuZGFyeSBtYXhpbXVtIFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJSX1lNYXgiIEFsaWFzPSJUb3AgQm91bmRhcnkgWSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJyZWN0YW5nbGUgYm91bmRhcnkgbWF4aW11bSBZIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IkNpcmNsZSBCb3VuZGFyeSBQYXJhbWV0ZXJzIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQkNfQ2VudGVyWCIgQWxpYXM9IkNlbnRlciBYIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImNpcmNsZSBib3VuZGFyeSBjZW50ZXIgWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQkNfQ2VudGVyWSIgQWxpYXM9IkNlbnRlciBZIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImNpcmNsZSBib3VuZGFyeSBjZW50ZXIgWSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQkNfUmFkaXVzIiAgQWxpYXM9IlJhZGl1cyIgICBVbml0PSJtIiBEZWZhdWx0PSIxIiBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiAgRGlnaXQ9IjYiIERlc2M9ImNpcmNsZSBib3VuZGFyeSByYWRpdXMiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUG9seWdvbiBCb3VuZGFyeSBWZXJ0ZXggUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJQX1giIEFsaWFzPSJYIENvb3JkaW5hdGUiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icG9seWdvbiBib3VuZGFyeSB2ZXJ0ZXggWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlBfWSIgQWxpYXM9IlkgQ29vcmRpbmF0ZSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJwb2x5Z29uIGJvdW5kYXJ5IHZlcnRleCBZIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IlJlZ2lvbiBQYXJhbWV0ZXJzIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUl9MZWFrYWdlIiBBbGlhcz0iTGVha2FnZSBDb2VmZmljaWVudCIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJyZWdpb24gbGVha2FnZSBjb2VmZmljaWVudCIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJSZWdpb24gTWFyayBQYXJhbWV0ZXJzIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUk1fQ29tVyIgICAgICAgQWxpYXM9IlN0b3JhZ2UgUmF0aW8iIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxIiAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgRGVzYz0ic3RvcmFnZSByYXRpbyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUk1fQ29tS3IiICAgICAgQWxpYXM9Ik1vYmlsaXR5IFJhdGlvIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMTAwMCIgTWluPSIwLjAwMSIgRGlnaXQ9IjYiIERlc2M9Im1vYmlsaXR5IHJhdGlvIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSTV9OZXRUb0dyb3NzIiBBbGlhcz0iTmV0LXRvLUdyb3NzIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMSIgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiIERlc2M9Im5ldC10by1ncm9zcyIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPCEtLSBSZXN1bHQgcGFyYW1ldGVycyBhcmUgc2VsZWN0ZWQgb25seSBieSByZWJ1aWxkUmVzdWx0UGFyYXMoKS4gLS0+DQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVzdWx0IFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfV19SdyIgICBBbGlhcz0iV2VsbCBSYWRpdXMiICAgICAgICAgICAgIFVuaXQ9Im0iICAgICAgRGVmYXVsdD0iMC4xIiAgICBNYXg9IjEwIiAgICBNaW49IjAuMDAxIiAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgd2VsbGJvcmUgcmFkaXVzIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfV19EZmMiICBBbGlhcz0iRnJhY3R1cmUgQ29uZHVjdGl2aXR5IiAgVW5pdD0ibUQubSIgICBEZWZhdWx0PSIxMDAwIiAgIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBmcmFjdHVyZSBjb25kdWN0aXZpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9XX1NraW4iIEFsaWFzPSJTa2luIEZhY3RvciIgICAgICAgICAgICBVbml0PSIiICAgICAgIERlZmF1bHQ9IjAiICAgICAgTWF4PSIxMDAwIiAgTWluPSItMTAwIiAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHNraW4gZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfV19DIiAgICBBbGlhcz0iV2VsbGJvcmUgU3RvcmFnZSBDb2VmZiIgVW5pdD0ibV4zL01QYSIgRGVmYXVsdD0iMCIgICAgICBNYXg9IjEwMDAiICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgd2VsbGJvcmUgc3RvcmFnZSBjb2VmZmljaWVudCIgLz4NCg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfUGkiICBBbGlhcz0iSW5pdGlhbCBGb3JtYXRpb24gUHJlc3N1cmUiIFVuaXQ9Ik1QYSIgICBEZWZhdWx0PSI0MCIgICAgIE1heD0iNTAwIiAgIE1pbj0iMC4xIiAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGluaXRpYWwgZm9ybWF0aW9uIHByZXNzdXJlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfSyIgICBBbGlhcz0iUGVybWVhYmlsaXR5IiAgICAgICAgICAgICAgIFVuaXQ9Im1EIiAgICBEZWZhdWx0PSIyNSIgICAgIE1heD0iMTAwMDAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHBlcm1lYWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X2giICAgQWxpYXM9IlJlc2Vydm9pciBUaGlja25lc3MiICAgICAgICBVbml0PSJtIiAgICAgRGVmYXVsdD0iMTAiICAgICBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCByZXNlcnZvaXIgdGhpY2tuZXNzIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfcGhpIiBBbGlhcz0iUG9yb3NpdHkiICAgICAgICAgICAgICAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjEiICAgIE1heD0iMSIgICAgIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHBvcm9zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ3RpIiBBbGlhcz0iVG90YWwgQ29tcHJlc3NpYmlsaXR5IiAgICAgIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwLjAwMSIgIE1heD0iMTAiICAgIE1pbj0iMWUtMzAiIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IHRvdGFsIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0NmIiAgQWxpYXM9IlJvY2sgQ29tcHJlc3NpYmlsaXR5IiAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDAxIiBNYXg9IjEwIiAgICBNaW49IjFlLTMwIiBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCByb2NrIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1NvaSIgQWxpYXM9IkluaXRpYWwgT2lsIFNhdHVyYXRpb24iICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMC44IiAgICBNYXg9IjEiICAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIG9pbCBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfU2dpIiBBbGlhcz0iSW5pdGlhbCBHYXMgU2F0dXJhdGlvbiIgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwIiAgICAgIE1heD0iMSIgICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGluaXRpYWwgZ2FzIHNhdHVyYXRpb24iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9Td2kiIEFsaWFzPSJJbml0aWFsIFdhdGVyIFNhdHVyYXRpb24iICAgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuMiIgICAgTWF4PSIxIiAgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCB3YXRlciBzYXR1cmF0aW9uIiAvPg0KDQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9CbyIgICBBbGlhcz0iT2lsIEZvcm1hdGlvbiBWb2x1bWUgRmFjdG9yIiAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBvaWwgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9NaXVvIiBBbGlhcz0iT2lsIFZpc2Nvc2l0eSIgICAgICAgICAgICAgICAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjFlLTMwIiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBvaWwgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ28iICAgQWxpYXM9Ik9pbCBDb21wcmVzc2liaWxpdHkiICAgICAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCBvaWwgY29tcHJlc3NpYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQnciICAgQWxpYXM9IldhdGVyIEZvcm1hdGlvbiBWb2x1bWUgRmFjdG9yIiBVbml0PSJtMy9tMyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgd2F0ZXIgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9NaXV3IiBBbGlhcz0iV2F0ZXIgVmlzY29zaXR5IiAgICAgICAgICAgICAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjFlLTMwIiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3YXRlciB2aXNjb3NpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DdyIgICBBbGlhcz0iV2F0ZXIgQ29tcHJlc3NpYmlsaXR5IiAgICAgICAgIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IHdhdGVyIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0JnIiAgIEFsaWFzPSJHYXMgRm9ybWF0aW9uIFZvbHVtZSBGYWN0b3IiICAgVW5pdD0ibTMvbTMiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGdhcyBmb3JtYXRpb24gdm9sdW1lIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X01pdWciIEFsaWFzPSJHYXMgVmlzY29zaXR5IiAgICAgICAgICAgICAgICAgVW5pdD0ibVBhLnMiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMWUtMzAiIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGdhcyB2aXNjb3NpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DZyIgICBBbGlhcz0iR2FzIENvbXByZXNzaWJpbGl0eSIgICAgICAgICAgIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IGdhcyBjb21wcmVzc2liaWxpdHkiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQo8L1Jvb3Q+DQo= \ No newline at end of file +PD94bWwgdmVycup_mpac2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSoqKioqKioqKioqKiwzyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gICAgVGhpcyBmaWxlIGRlZmluZXMgcGFyYW1ldGVycyBmb3IgdGhlIFdUQUkgTnVtZXJpY2FsIChOTSkgICAgLS0+DQo8IS0tICAgIG1vZHVsZS4gT25seSByZXNlcnZvaXIsIHdlbGwsIGFuZCBnZW9tZXRyeSBwYXJhbWV0ZXJzICAgICAgICAtLT4NCjwhLS0gICAgcmVxdWlyZWQgYnkgdGhlIFBFQkkgc29sdmVyIGFyZSBpbmNsdWRlZC4gICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI2MDYxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi0tPg0KDQo8IS0tDQogICAgUGFyYW1ldGVyIHNjb3BlOiByZXNlcnZvaXIsIHdlbGwsIGFuZCBnZW9tZXRyeSBwYXJhbWV0ZXJzIHJlcXVpcmVkIGJ5IHRoZSBQRUJJIHNvbHZlcg0KICAgIENvcnJlc3BvbmRzIHRvIEhYX05XVE1fTU9ERUxfSU5QVVQgc3RydWN0IGZpZWxkcw0KICAgIExvYWRlZCB2aWEgX3BhcmFIZWxwZXItPmxvYWRQYXJhRGVmaW5lcygpLCBzS2V5ID0gc19ObV9TZXJpZQ0KLS0+DQoNCjxSb290Pg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVzZXJ2b2lyIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJoIiAgIEFsaWFzPSJSZXNlcnZvaXIgVGhpY2tuZXNzIiAgICAgICAgIFVuaXQ9Im0iICAgICBEZWZhdWx0PSIxMCIgICAgTWF4PSIxMDAwMCIgIE1pbj0iMWUtMDUiICBEaWdpdD0iMyIgIERlc2M9InJlc2Vydm9pciB0aGlja25lc3MiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlBpIiAgQWxpYXM9IkluaXRpYWwgUHJlc3N1cmUiICAgICAgICAgICAgVW5pdD0iTVBhIiAgIERlZmF1bHQ9IjQwIiAgICBNYXg9IjUwMCIgICAgTWluPSIwLjEiICAgIERpZ2l0PSI1IiAgRGVzYz0iaW5pdGlhbCBmb3JtYXRpb24gcHJlc3N1cmUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IksiICAgQWxpYXM9IlBlcm1lYWJpbGl0eSIgICAgICAgICAgICAgICAgVW5pdD0ibUQiICAgIERlZmF1bHQ9IjI1IiAgICBNYXg9IjEwMDAwIiAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0icGVybWVhYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJwaGkiIEFsaWFzPSJQb3Jvc2l0eSIgICAgICAgICAgICAgICAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxIiAgICAgIE1pbj0iMWUtMDUiICBEaWdpdD0iNCIgIERlc2M9InBvcm9zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCbyIgIEFsaWFzPSJPaWwgRm9ybWF0aW9uIFZvbHVtZSBGYWN0b3IiIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIxLjIiICAgTWF4PSIxMCIgICAgIE1pbj0iMWUtMDYiICBEaWdpdD0iNiIgIERlc2M9Im9pbCBmb3JtYXRpb24gdm9sdW1lIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iTWl1byIgQWxpYXM9Ik9pbCBWaXNjb3NpdHkiICAgICAgICAgICAgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMC41IiAgIE1heD0iMTAwMDAiICBNaW49IjFlLTA2IiAgRGlnaXQ9IjYiICBEZXNjPSJvaWwgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJLeEt5IiBBbGlhcz0iSG9yaXpvbnRhbCBQZXJtZWFiaWxpdHkgUmF0aW8iIFVuaXQ9IiIgICBEZWZhdWx0PSIxIiAgICAgTWF4PSIxMDAwIiAgIE1pbj0iMWUtMDYiICBEaWdpdD0iNiIgIERlc2M9Imhvcml6b250YWwgcGVybWVhYmlsaXR5IHJhdGlvIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJDdGkiIEFsaWFzPSJUb3RhbCBDb21wcmVzc2liaWxpdHkiICAgICAgIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwLjAwMSIgTWF4PSIxMCIgICAgIE1pbj0iMWUtMzAiICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InRvdGFsIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQ2YiICBBbGlhcz0iUm9jayBDb21wcmVzc2liaWxpdHkiICAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDAxIiBNYXg9IjEwIiAgICBNaW49IjFlLTMwIiAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyb2NrIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iU29pIiBBbGlhcz0iSW5pdGlhbCBPaWwgU2F0dXJhdGlvbiIgICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMC44IiAgIE1heD0iMSIgICAgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIG9pbCBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJTd2kiIEFsaWFzPSJJbml0aWFsIFdhdGVyIFNhdHVyYXRpb24iICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjIiICAgTWF4PSIxIiAgICAgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9ImluaXRpYWwgd2F0ZXIgc2F0dXJhdGlvbiIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJXZWxsIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1giICAgIEFsaWFzPSJYIENvb3JkaW5hdGUiICAgICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1kiICAgIEFsaWFzPSJZIENvb3JkaW5hdGUiICAgICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1J3IiAgIEFsaWFzPSJXZWxsYm9yZSBSYWRpdXMiICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxMCIgICAgIE1pbj0iMC4wMDEiICBEaWdpdD0iNiIgIERlc2M9IndlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19Ta2luIiBBbGlhcz0iU2tpbiBGYWN0b3IiICAgICAgICAgICAgIFVuaXQ9IiIgICAgICAgRGVmYXVsdD0iMCIgICAgIE1heD0iMTAwMCIgICBNaW49Ii0xMDAiICAgRGlnaXQ9IjYiICBEZXNjPSJza2luIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19DIiAgICBBbGlhcz0iV2VsbGJvcmUgU3RvcmFnZSBDb2VmZiIgIFVuaXQ9Im1eMy9NUGEiIERlZmF1bHQ9IjAiICAgICBNYXg9IjEwMDAiICAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0id2VsbGJvcmUgc3RvcmFnZSBjb2VmZmljaWVudCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19XZWxsTGVuZ3RoIiAgICAgICAgIEFsaWFzPSJIb3Jpem9udGFsIFdlbGwgTGVuZ3RoIiBVbml0PSJtIiAgICBEZWZhdWx0PSIyMDAiICBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iNiIgRGVzYz0iaG9yaXpvbnRhbCB3ZWxsIGxlbmd0aCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19EcmFpbkFuZ2xlIiAgICAgICAgIEFsaWFzPSJEcmFpbiBBbmdsZSIgICAgICAgICAgICBVbml0PSJkZWciICBEZWZhdWx0PSIwIiAgICBNYXg9IjM2MCIgICBNaW49Ii0zNjAiICBEaWdpdD0iNiIgRGVzYz0iaG9yaXpvbnRhbCB3ZWxsIGRyYWluIGFuZ2xlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX051bWJlck9mRnJhY3R1cmVzIiAgQWxpYXM9Ik51bWJlciBvZiBGcmFjdHVyZXMiICAgIFVuaXQ9IiIgICAgIERlZmF1bHQ9IjE1IiAgIE1heD0iMTAwMCIgIE1pbj0iMiIgICAgIERpZ2l0PSIwIiBEZXNjPSJudW1iZXIgb2YgZnJhY3R1cmVzIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0ZyYWN0dXJlSGFsZkxlbmd0aCIgQWxpYXM9IkZyYWN0dXJlIEhhbGYtTGVuZ3RoIiAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjUwIiAgIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBoYWxmLWxlbmd0aCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19GcmFjdHVyZUFuZ2xlIiAgICAgIEFsaWFzPSJGcmFjdHVyZSBBbmdsZSIgICAgICAgICBVbml0PSJkZWciICBEZWZhdWx0PSI5MCIgICBNYXg9IjM2MCIgICBNaW49Ii0zNjAiICBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgYW5nbGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfRGZjIiAgICAgICAgICAgICAgICBBbGlhcz0iRnJhY3R1cmUgQ29uZHVjdGl2aXR5IiAgVW5pdD0ibUQubSIgRGVmYXVsdD0iMTAwMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGNvbmR1Y3Rpdml0eSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJJbmRlcGVuZGVudCBGcmFjdHVyZSBQYXJhbWV0ZXJzIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9YMCIgQWxpYXM9IlN0YXJ0IFgwIiAgICAgICAgICAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBzdGFydCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWTAiIEFsaWFzPSJTdGFydCBZMCIgICAgICAgICAgICAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgc3RhcnQgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX1gxIiBBbGlhcz0iRW5kIFgxIiAgICAgICAgICAgICAgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGVuZCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWTEiIEFsaWFzPSJFbmQgWTEiICAgICAgICAgICAgICAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgZW5kIFkgY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9GQyIgQWxpYXM9IkZyYWN0dXJlIENvbmR1Y3Rpdml0eSIgVW5pdD0ibUQubSIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBjb25kdWN0aXZpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfRFciIEFsaWFzPSJGcmFjdHVyZSBXaWR0aCBQYXJhbWV0ZXIiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgd2lkdGggcGFyYW1ldGVyIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IkZhdWx0IFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9YMCIgQWxpYXM9IlN0YXJ0IFgwIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IHN0YXJ0IFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWTAiIEFsaWFzPSJTdGFydCBZMCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBzdGFydCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1gxIiBBbGlhcz0iRW5kIFgxIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IGVuZCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1kxIiBBbGlhcz0iRW5kIFkxIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IGVuZCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX0xlYWthZ2UiIEFsaWFzPSJMZWFrYWdlIENvZWZmaWNpZW50IiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IGxlYWthZ2UgY29lZmZpY2llbnQiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVjdGFuZ2xlIEJvdW5kYXJ5IFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUl9YTWluIiBBbGlhcz0iTGVmdCBCb3VuZGFyeSBYIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InJlY3RhbmdsZSBib3VuZGFyeSBtaW5pbXVtIFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJSX1lNaW4iIEFsaWFzPSJCb3R0b20gQm91bmRhcnkgWSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJyZWN0YW5nbGUgYm91bmRhcnkgbWluaW11bSBZIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUl9YTWF4IiBBbGlhcz0iUmlnaHQgQm91bmRhcnkgWCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJyZWN0YW5nbGUgYm91bmRhcnkgbWF4aW11bSBYIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUl9ZTWF4IiBBbGlhcz0iVG9wIEJvdW5kYXJ5IFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1heGltdW0gWSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJDaXJjbGUgQm91bmRhcnkgUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJDX0NlbnRlclgiIEFsaWFzPSJDZW50ZXIgWCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJjaXJjbGUgYm91bmRhcnkgY2VudGVyIFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJDX0NlbnRlclkiIEFsaWFzPSJDZW50ZXIgWSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJjaXJjbGUgYm91bmRhcnkgY2VudGVyIFkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJDX1JhZGl1cyIgIEFsaWFzPSJSYWRpdXMiICAgVW5pdD0ibSIgRGVmYXVsdD0iMSIgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgIERpZ2l0PSI2IiBEZXNjPSJjaXJjbGUgYm91bmRhcnkgcmFkaXVzIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IlBvbHlnb24gQm91bmRhcnkgVmVydGV4IFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUF9YIiBBbGlhcz0iWCBDb29yZGluYXRlIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InBvbHlnb24gYm91bmRhcnkgdmVydGV4IFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJQX1kiIEFsaWFzPSJZIENvb3JkaW5hdGUiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icG9seWdvbiBib3VuZGFyeSB2ZXJ0ZXggWSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJSZWdpb24gUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJfTGVha2FnZSIgQWxpYXM9IkxlYWthZ2UgQ29lZmZpY2llbnQiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiBEaWdpdD0iNiIgRGVzYz0icmVnaW9uIGxlYWthZ2UgY29lZmZpY2llbnQiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVnaW9uIE1hcmsgUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX0NvbVciICAgICAgIEFsaWFzPSJTdG9yYWdlIFJhdGlvIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMSIgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiIERlc2M9InN0b3JhZ2UgcmF0aW8iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX0NvbUtyIiAgICAgIEFsaWFzPSJNb2JpbGl0eSBSYXRpbyIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjEwMDAiIE1pbj0iMC4wMDEiIERpZ2l0PSI2IiBEZXNjPSJtb2JpbGl0eSByYXRpbyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUk1fTmV0VG9Hcm9zcyIgQWxpYXM9Ik5ldC10by1Hcm9zcyIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjEiICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiBEZXNjPSJuZXQtdG8tZ3Jvc3MiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDwhLS0gUmVzdWx0IHBhcmFtZXRlcnMgYXJlIHNlbGVjdGVkIG9ubHkgYnkgcmVidWlsZFJlc3VsdFBhcmFzKCkuIC0tPg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IlJlc3VsdCBQYXJhbWV0ZXJzIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfUnciICAgQWxpYXM9IldlbGwgUmFkaXVzIiAgICAgICAgICAgICBVbml0PSJtIiAgICAgIERlZmF1bHQ9IjAuMSIgICAgTWF4PSIxMCIgICAgTWluPSIwLjAwMSIgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfRGZjIiAgQWxpYXM9IkZyYWN0dXJlIENvbmR1Y3Rpdml0eSIgIFVuaXQ9Im1ELm0iICAgRGVmYXVsdD0iMTAwMCIgICBNYXg9IjFlKzMwIiBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgZnJhY3R1cmUgY29uZHVjdGl2aXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfV19Ta2luIiBBbGlhcz0iU2tpbiBGYWN0b3IiICAgICAgICAgICAgVW5pdD0iIiAgICAgICBEZWZhdWx0PSIwIiAgICAgIE1heD0iMTAwMCIgIE1pbj0iLTEwMCIgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBza2luIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfQyIgICAgQWxpYXM9IldlbGxib3JlIFN0b3JhZ2UgQ29lZmYiIFVuaXQ9Im1eMy9NUGEiIERlZmF1bHQ9IjAiICAgICAgTWF4PSIxMDAwIiAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdlbGxib3JlIHN0b3JhZ2UgY29lZmZpY2llbnQiIC8+DQoNCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1BpIiAgQWxpYXM9IkluaXRpYWwgRm9ybWF0aW9uIFByZXNzdXJlIiBVbml0PSJNUGEiICAgRGVmYXVsdD0iNDAiICAgICBNYXg9IjUwMCIgICBNaW49IjAuMSIgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIGZvcm1hdGlvbiBwcmVzc3VyZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0siICAgQWxpYXM9IlBlcm1lYWJpbGl0eSIgICAgICAgICAgICAgICBVbml0PSJtRCIgICAgRGVmYXVsdD0iMjUiICAgICBNYXg9IjEwMDAwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBwZXJtZWFiaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9oIiAgIEFsaWFzPSJSZXNlcnZvaXIgVGhpY2tuZXNzIiAgICAgICAgVW5pdD0ibSIgICAgIERlZmF1bHQ9IjEwIiAgICAgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgcmVzZXJ2b2lyIHRoaWNrbmVzcyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X3BoaSIgQWxpYXM9IlBvcm9zaXR5IiAgICAgICAgICAgICAgICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMC4xIiAgICBNYXg9IjEiICAgICBNaW49IjFlLTA1IiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBwb3Jvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0N0aSIgQWxpYXM9IlRvdGFsIENvbXByZXNzaWJpbGl0eSIgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDEiICBNYXg9IjEwIiAgICBNaW49IjFlLTMwIiBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCB0b3RhbCBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DZiIgIEFsaWFzPSJSb2NrIENvbXByZXNzaWJpbGl0eSIgICAgICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAwMSIgTWF4PSIxMCIgICAgTWluPSIxZS0zMCIgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgcm9jayBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9Tb2kiIEFsaWFzPSJJbml0aWFsIE9pbCBTYXR1cmF0aW9uIiAgICAgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuOCIgICAgTWF4PSIxIiAgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBvaWwgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1NnaSIgQWxpYXM9IkluaXRpYWwgR2FzIFNhdHVyYXRpb24iICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMCIgICAgICBNYXg9IjEiICAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIGdhcyBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfU3dpIiBBbGlhcz0iSW5pdGlhbCBXYXRlciBTYXR1cmF0aW9uIiAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjIiICAgIE1heD0iMSIgICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGluaXRpYWwgd2F0ZXIgc2F0dXJhdGlvbiIgLz4NCg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQm8iICAgQWxpYXM9Ik9pbCBGb3JtYXRpb24gVm9sdW1lIEZhY3RvciIgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1byIgQWxpYXM9Ik9pbCBWaXNjb3NpdHkiICAgICAgICAgICAgICAgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0NvIiAgIEFsaWFzPSJPaWwgQ29tcHJlc3NpYmlsaXR5IiAgICAgICAgICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgb2lsIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0J3IiAgIEFsaWFzPSJXYXRlciBGb3JtYXRpb24gVm9sdW1lIEZhY3RvciIgVW5pdD0ibTMvbTMiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdhdGVyIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1dyIgQWxpYXM9IldhdGVyIFZpc2Nvc2l0eSIgICAgICAgICAgICAgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgd2F0ZXIgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ3ciICAgQWxpYXM9IldhdGVyIENvbXByZXNzaWJpbGl0eSIgICAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCB3YXRlciBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9CZyIgICBBbGlhcz0iR2FzIEZvcm1hdGlvbiBWb2x1bWUgRmFjdG9yIiAgIFVuaXQ9Im0zL20zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBnYXMgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9NaXVnIiBBbGlhcz0iR2FzIFZpc2Nvc2l0eSIgICAgICAgICAgICAgICAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjFlLTMwIiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBnYXMgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ2ciICAgQWxpYXM9IkdhcyBDb21wcmVzc2liaWxpdHkiICAgICAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCBnYXMgY29tcHJlc3NpYmlsaXR5IiAvPg0KICA8L1BhcmFHcm91cD4NCg0KPC9Sb290Pg0K \ No newline at end of file diff --git a/Bin/Config/Common/UnitDefault_cn.dat b/Bin/Config/Common/UnitDefault_cn.dat index b97a271..49e38fe 100644 --- a/Bin/Config/Common/UnitDefault_cn.dat +++ b/Bin/Config/Common/UnitDefault_cn.dat @@ -1 +1 @@ -77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxSb290Pg0KICAgIDxUeXwzyBlT2Y+DQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMDHnu4TvvJrplb/luqYgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0ibGVuZ3RoIiBOYW1lPSJsZW5ndGgiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMTAxIiBVbml0PSJtIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDEwMiIgVW5pdD0ia20iIGs9IjEwMDAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDMiIFVuaXQ9ImNtIiBrPSIwLjAxIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMTA0IiBVbml0PSJtbSIgaz0iMC4wMDEiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDUiIFVuaXQ9ImluIiBrPSIwLjAyNTQiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDYiIFVuaXQ9ImZ0IiBrPSIwLjMwNDgiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDciIFVuaXQ9InlkIiBrPSIwLjkxNDQiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDgiIFVuaXQ9Im1pIiBrPSIxNjA5LjM0IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMTA5IiBVbml0PSJubWlsZSIgaz0iMTg1MiIgRGlnaXQ9IjAiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDExMCIgVW5pdD0ibm0iIGs9IjFlLTA5IiBEaWdpdD0iNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDAy57uE77ya5pe26Ze0ID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRpbWUiIE5hbWU9InRpbWUiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMjAxIiBVbml0PSJzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDIwMiIgVW5pdD0ibXMiIGs9IjAuMDAxIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMjAzIiBVbml0PSJ1cyIgaz0iMWUtMDYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAyMDQiIFVuaXQ9Im1pbiIgaz0iNjAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAyMDUiIFVuaXQ9ImgiIGs9IjM2MDAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAyMDYiIFVuaXQ9ImQiIGs9Ijg2NDAwIiBEaWdpdD0iMCIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDAz57uE77ya6LSo6YePID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9Im1hc3MiIE5hbWU9Im1hc3MiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzAxIiBVbml0PSJrZyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAzMDIiIFVuaXQ9ImciIGs9IjAuMDAxIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzAzIiBVbml0PSJ0b24iIGs9IjEwMDAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAzMDQiIFVuaXQ9ImxiIiBrPSIwLjQ1MzU5MjM3IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzA1IiBVbml0PSJveiIgaz0iMC4wMjgzNDk1IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzA2IiBVbml0PSJzdG9uIiBrPSI5MDcuMTg1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzA3IiBVbml0PSJsdG9uIiBrPSIxMDE2LjA1IiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA057uE77ya6KeS5bqmID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9ImFuZ2xlIiBOYW1lPSJhbmdsZSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA0MDEiIFVuaXQ9InJhZCIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA0MDIiIFVuaXQ9ImRlZyIgaz0iMC4wMTc0NTMyOTI1MTk5NDMzIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNDAzIiBVbml0PSJncmFkIiBrPSIwLjAxNTcwNzk2MzI2Nzk0OSIgRGlnaXQ9IjYiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwwNee7hO+8mumdouenryA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJhcmVhIiBOYW1lPSJhcmVhIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDUwMSIgVW5pdD0ibcKyIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDUwMiIgVW5pdD0ia23CsiIgaz0iMWU2IiBEaWdpdD0iMCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNTAzIiBVbml0PSJjbcKyIiBrPSIwLjAwMDEiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA1MDQiIFVuaXQ9ImZ0wrIiIGs9IjAuMDkyOTAzMDQiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA1MDUiIFVuaXQ9ImluwrIiIGs9IjAuMDAwNjQ1MTYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA1MDYiIFVuaXQ9ImFjcmUiIGs9IjQwNDYuODU2NDIyNCIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDUwNyIgVW5pdD0iaGEiIGs9IjEwMDAwIiBEaWdpdD0iMCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNTA4IiBVbml0PSJ5ZMKyIiBrPSIwLjgzNjEyNzM2IiBEaWdpdD0iNCIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA257uE77ya5L2T56evID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZvbHVtZSIgTmFtZT0idm9sdW1lIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwMSIgVW5pdD0ibcKzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwMiIgVW5pdD0iTCIgaz0iMC4wMDEiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDMiIFVuaXQ9Im1MIiBrPSIxZS0wNiIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwNCIgVW5pdD0iY23CsyIgaz0iMWUtMDYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDUiIFVuaXQ9ImNjIiBrPSIxZS0wNiIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwNiIgVW5pdD0iYmJsIiBrPSIwLjE1ODk4NzI5NDkyOCIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwNyIgVW5pdD0iZ2FsKFVTKSIgaz0iMC4wMDM3ODU0MTE3ODQiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDgiIFVuaXQ9ImdhbChVSykiIGs9IjAuMDA0NTQ2MDkiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDkiIFVuaXQ9ImZ0wrMiIGs9IjAuMDI4MzE2ODQ2NTkyIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNjEwIiBVbml0PSJpbsKzIiBrPSIxLjYzODcwNjRlLTA1IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNjExIiBVbml0PSJxdCIgaz0iMC4wMDA5NDYzNTI5NDYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MTIiIFVuaXQ9InB0IiBrPSIwLjAwMDQ3MzE3NjQ3MyIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYxMyIgVW5pdD0iZ2kiIGs9IjAuMDAwMTE4Mjk0MTE4IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNjE0IiBVbml0PSJhY3JlLmZ0IiBrPSIxMjMzLjQ4MTgzNzU0NzUyIiBEaWdpdD0iMyIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA357uE77ya6YCf5bqmID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZlbG9jaXR5IiBOYW1lPSJ2ZWxvY2l0eSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA3MDEiIFVuaXQ9Im0vcyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA3MDIiIFVuaXQ9ImttL2giIGs9IjAuMjc3Nzc3Nzc4IiBEaWdpdD0iNSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNzAzIiBVbml0PSJmdC9zIiBrPSIwLjMwNDgiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA3MDQiIFVuaXQ9Im1pbGUvaCIgaz0iMC40NDcwNCIgRGlnaXQ9IjUiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwwOOe7hO+8mua4qeW6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ0ZW1wZXJhdHVyZSIgTmFtZT0idGVtcGVyYXR1cmUiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwODAxIiBVbml0PSJLIiBrPSIxIiBiPSIwIiBEaWdpdD0iMiIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDgwMiIgVW5pdD0i4oSDIiBrPSIxIiBiPSIyNzMuMTUiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA4MDMiIFVuaXQ9ImRlZ0MiIGs9IjEiIGI9IjI3My4xNSIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDgwNCIgVW5pdD0iZGVnRiIgaz0iMC41NTU1NTU1NTU1NTU1NTYiIGI9IjI1NS4zNzIyMjIyMjIyMjIiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA4MDUiIFVuaXQ9IsKwRiIgaz0iMC41NTU1NTU1NTU1NTU1NTYiIGI9IjI1NS4zNzIyMjIyMjIyMjIiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA4MDYiIFVuaXQ9IlIiIGs9IjAuNTU1NTU1NTU1NTU1NTU2IiBiPSIwIiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA557uE77ya5rip5beuID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRlbXBlcmF0dXJlX2RlbHRhIiBOYW1lPSJ0ZW1wZXJhdHVyZV9kZWx0YSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA5MDEiIFVuaXQ9IksiIGs9IjEiIERpZ2l0PSIyIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwOTAyIiBVbml0PSLihIMiIGs9IjEiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA5MDMiIFVuaXQ9ImRlZ0MiIGs9IjEiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA5MDQiIFVuaXQ9ImRlZ0YiIGs9IjAuNTU1NTU1NTU1NTU1NTU2IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwOTA1IiBVbml0PSLCsEYiIGs9IjAuNTU1NTU1NTU1NTU1NTU2IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwOTA2IiBVbml0PSJSIiBrPSIwLjU1NTU1NTU1NTU1NTU1NiIgRGlnaXQ9IjIiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxMOe7hO+8muWcsOa4qeair+W6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJnZW90aGVybWFsZ3JhZGllbnQiIE5hbWU9Imdlb3RoZXJtYWxncmFkaWVudCI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDEiIFVuaXQ9IksvbSIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDIiIFVuaXQ9IuKEgy9rbSIgaz0iMC4wMDEiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDMiIFVuaXQ9ImRlZy9rbSIgaz0iMC4wMDEiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDQiIFVuaXQ9IsKwRi9mdCIgaz0iMS44MTgxODE4MTgxODE4MiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTAwNSIgVW5pdD0iRi9mdCIgaz0iMS44MTgxODE4MTgxODE4MiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTAwNiIgVW5pdD0iwrBGLzEwMGZ0IiBrPSIwLjAxODE4MTgxODE4MTgxODIiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDciIFVuaXQ9IkYvbWlsZSIgaz0iMC4wMzQ0ODI3NTg2MjA2ODk3IiBEaWdpdD0iMyIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDEx57uE77ya5Y6L5YqbID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InByZXNzdXJlIiBOYW1lPSJwcmVzc3VyZSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTExMDEiIFVuaXQ9IlBhIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwMiIgVW5pdD0ia1BhIiBrPSIxMDAwIiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTAzIiBVbml0PSJNUGEiIGs9IjFlNiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwNCIgVW5pdD0iYmFyIiBrPSIxMDAwMDAiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTExMDUiIFVuaXQ9Im1iYXIiIGs9IjEwMCIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwNiIgVW5pdD0icHNpIiBrPSI2ODk0Ljc1NzI5IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTA3IiBVbml0PSJhdG0iIGs9IjEwMTMyNSIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwOCIgVW5pdD0iYXQiIGs9Ijk4MDY2LjUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTExMDkiIFVuaXQ9ImtnZi9jbcKyIiBrPSI5ODA2Ni41IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTEwIiBVbml0PSJtbUhnIiBrPSIxMzMuMzIyMzY4IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTExIiBVbml0PSJUb3JyIiBrPSIxMzMuMzIyMzY4IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTEyIiBVbml0PSJtSDJPIiBrPSI5ODA2LjY1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTEzIiBVbml0PSJtbUgyTyIgaz0iOS44MDY2NSIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTExNCIgVW5pdD0iZHluL2NtwrIiIGs9IjAuMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxMue7hO+8muWvhuW6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJkZW5zaXR5IiBOYW1lPSJkZW5zaXR5Ij4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTIwMSIgVW5pdD0ia2cvbcKzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTIwMiIgVW5pdD0iZy9jbcKzIiBrPSIxMDAwIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjAzIiBVbml0PSJnL2NjIiBrPSIxMDAwIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA0IiBVbml0PSJsYi9mdMKzIiBrPSIxNi4wMTg0NjM0IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA1IiBVbml0PSJsYi9nYWwoVVMpIiBrPSIxMTkuODI2NDI3IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA2IiBVbml0PSJsYi9nYWwoVUspIiBrPSI5OS43NzY0IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA3IiBVbml0PSJsYi9iYmwiIGs9IjIuODUzIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA4IiBVbml0PSJnL2Z0wrMiIGs9IjAuMDM1MzE0NyIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTIwOSIgVW5pdD0iZy9jZiIgaz0iMC4wMzUzMTQ3IiBEaWdpdD0iMyIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDEz57uE77ya5Yqo5Yqb57KY5bqmID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZpc2Nvc2l0eSIgTmFtZT0idmlzY29zaXR5X2R5bmFtaWMiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMzAxIiBVbml0PSJQYcK3cyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEzMDIiIFVuaXQ9Im1QYcK3cyIgaz0iMC4wMDEiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEzMDMiIFVuaXQ9ImNQIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTMwNCIgVW5pdD0iUCIgaz0iMC4xIiBEaWdpdD0iNCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMzA1IiBVbml0PSJrZ2bCt3MvbcKyIiBrPSI5LjgwNjY1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMzA2IiBVbml0PSJsYmbCt3MvZnTCsiIgaz0iNDcuODgwMyIgRGlnaXQ9IjMiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxNOe7hO+8mui/kOWKqOeymOW6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ2aXNjb3NpdHlfa2luZW1hdGljIiBOYW1lPSJ2aXNjb3NpdHlfa2luZW1hdGljIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTQwMSIgVW5pdD0ibcKyL3MiIGs9IjEiIERpZ2l0PSI2IiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDAyIiBVbml0PSJtbcKyL3MiIGs9IjFlLTA2IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDAzIiBVbml0PSJjU3QiIGs9IjFlLTA2IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDA0IiBVbml0PSJTdCIgaz0iMC4wMDAxIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDA1IiBVbml0PSJjbcKyL3MiIGs9IjAuMDAwMSIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTQwNiIgVW5pdD0iZnTCsi9zIiBrPSIwLjA5MjkwMzA0IiBEaWdpdD0iNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDE157uE77ya5riX6YCP546HID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InBlcm1lYWJpbGl0eSIgTmFtZT0icGVybWVhYmlsaXR5Ij4NCg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNTAxIiBVbml0PSJEIiBrPSIxIiBEaWdpdD0iNCIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTUwMiIgVW5pdD0ibUQiIGs9IjAuMDAxIiBEaWdpdD0iNCIgLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTUwMyIgVW5pdD0iMS9jbcKyIiBrPSI5LjgxZSswNyIgRGlnaXQ9IjIiLz4NCg0KDQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMTbnu4TvvJrog73ph48gPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iZW5lcmd5IiBOYW1lPSJlbmVyZ3kiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNjAxIiBVbml0PSJKIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTYwMiIgVW5pdD0ia0oiIGs9IjEwMDAiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDMiIFVuaXQ9Ik1KIiBrPSIxZTYiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDQiIFVuaXQ9ImNhbCIgaz0iNC4xODQiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDUiIFVuaXQ9ImtjYWwiIGs9IjQxODQiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDYiIFVuaXQ9IkJ0dSIgaz0iMTA1NS4wNTU4NTI2MiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTYwNyIgVW5pdD0iQlRVIiBrPSIxMDU1LjA1NTg1MjYyIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNjA4IiBVbml0PSJrV8K3aCIgaz0iMy42ZTYiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDkiIFVuaXQ9ImZ0wrdsYmYiIGs9IjEuMzU1ODE3OTQ4IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNjEwIiBVbml0PSJrZ2bCt20iIGs9IjkuODA2NjUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MTEiIFVuaXQ9ImhwwrdoIiBrPSIyLjY4NDUyZTYiIERpZ2l0PSIzIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMTfnu4TvvJrlip/njocgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icG93ZXIiIE5hbWU9InBvd2VyIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTcwMSIgVW5pdD0iVyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE3MDIiIFVuaXQ9ImtXIiBrPSIxMDAwIiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNzAzIiBVbml0PSJNVyIgaz0iMWU2IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNzA0IiBVbml0PSJocCIgaz0iNzQ1LjY5OTg3MTU4MjI3IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNzA1IiBVbml0PSJCdHUvaCIgaz0iMC4yOTMwNzEwNyIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTcwNiIgVW5pdD0iY2FsL3MiIGs9IjQuMTg2OCIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTcwNyIgVW5pdD0ia2dmwrdtL3MiIGs9IjkuODA2NjUiIERpZ2l0PSIzIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMTjnu4TvvJrkvZPnp6/mtYHph48gPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iZmxvd19yYXRlX3ZvbHVtZSIgTmFtZT0iZmxvd19yYXRlX3ZvbHVtZSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE4MDEiIFVuaXQ9Im3Csy9kIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwMiIgVW5pdD0ibcKzL3MiIGs9Ijg2NDAwIiBEaWdpdD0iNiIgUmVtYXJrPSIxIG3Csy9zID0gODY0MDAgbcKzL2QiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwMyIgVW5pdD0ibcKzL2EiIGs9IjAuMDAyNzM5NzI2MDI3Mzk3MjYiIERpZ2l0PSI2IiBSZW1hcms9IjEgbcKzL2EgPSAxLzM2NSBtwrMvZCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxODA0IiBVbml0PSJzdGIvZCIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iMSBzdGIvZCDiiYggMSBtwrMvZCAo5bel56iL6L+R5Ly8KSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxODA1IiBVbml0PSJiYmwvZCIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iMSBiYmwvZCDiiYggMSBtwrMvZCAo5bel56iL6L+R5Ly8KSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxODA2IiBVbml0PSJmdMKzL3MiIGs9IjI0NDYuNTc1IiBEaWdpdD0iNiIgUmVtYXJrPSIxIGZ0wrMvcyA9IDI0NDYuNTc1IG3Csy9kIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE4MDciIFVuaXQ9ImZ0wrMvZCIgaz0iMC4wMjgzMTY4NDY1OTIiIERpZ2l0PSI2IiBSZW1hcms9IjEgZnTCsy9kID0gMC4wMjgzMTY4NDY1OTIgbcKzL2QiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwOCIgVW5pdD0iTU1zY2YvZCIgaz0iMjgzMTYuODQ2NTkyIiBEaWdpdD0iNCIgUmVtYXJrPSIxIE1Nc2NmL2QgPSAyODMxNi44NDY1OTIgbcKzL2QgKOeQhuaDs+awlOS9kykiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwOSIgVW5pdD0iTXNjZi9kIiBrPSIyOC4zMTY4NDY1OTIiIERpZ2l0PSI2IiBSZW1hcms9IjEgTXNjZi9kID0gMjguMzE2ODQ2NTkyIG3Csy9kICjnkIbmg7PmsJTkvZMpIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE4MTAiIFVuaXQ9IjEw4oG0Km3Csy9kIiBrPSIxMDAwMCIgRGlnaXQ9IjQiIFJlbWFyaz0iMSDkuIfmlrkv5aSpID0gMTAwMDAgbcKzL2QiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxOee7hO+8muWOi+e8qeezu+aVsCA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJjb21wcmVzc2liaWxpdHkiIE5hbWU9ImNvbXByZXNzaWJpbGl0eSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE5MDEiIFVuaXQ9IjEvTVBhIiBrPSIxIiBEaWdpdD0iNiIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTkwMiIgVW5pdD0iMS9QYSIgaz0iMWU2IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxOTAzIiBVbml0PSIxL3BzaSIgaz0iMTQ1LjAzNzczOCIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTkwNCIgVW5pdD0iMS9hdG0iIGs9IjkuODY5MjMyNjY3MTYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE5MDUiIFVuaXQ9IjEvYmFyIiBrPSIxMCIgRGlnaXQ9IjYiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwyMOe7hO+8mua1k+W6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJjb25jZW50cmF0aW9uIiBOYW1lPSJjb25jZW50cmF0aW9uIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwMSIgVW5pdD0ia2cvbcKzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwMiIgVW5pdD0iZy9MIiBrPSIxIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMDAzIiBVbml0PSJtZy9MIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwNCIgVW5pdD0izrxnL21MIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwNSIgVW5pdD0icHBtIiBrPSIwLjAwMSIgRGlnaXQ9IjQiIFJlbWFyaz0iYXNzdW1pbmcgMSBwcG0gPSAxIG1nL2tnIGluIHdhdGVyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIwMDYiIFVuaXQ9IktwcG0iIGs9IjEiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIwMDciIFVuaXQ9Im1vbC9twrMiIGs9IjEiIERpZ2l0PSIzIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMjHnu4TvvJrnmb7liIbmr5QgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icGVyY2VudCIgTmFtZT0icGVyY2VudCI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIxMDEiIFVuaXQ9IiUiIGs9IjEiIERpZ2l0PSIyIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMTAyIiBVbml0PSJwdSIgaz0iMSIgRGlnaXQ9IjIiIFJlbWFyaz0icGVyIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjEwMyIgVW5pdD0iZnJhY3Rpb24iIGs9IjEwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjEwNCIgVW5pdD0idi92IiBrPSIxMDAiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIxMDUiIFVuaXQ9Im3Csy9twrMiIGs9IjEwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwyMue7hO+8muaFouW6pu+8iOWjsOazou+8iSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJzbG93bmVzcyIgTmFtZT0ic2xvd25lc3MiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMjAxIiBVbml0PSJzL20iIGs9IjEiIERpZ2l0PSIzIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMjAyIiBVbml0PSJ1cy9tIiBrPSIxZS0wNiIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjIwMyIgVW5pdD0idXMvZnQiIGs9IjMuMjgwODM5ODk1MDEzMTJlLTA2IiBEaWdpdD0iNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDIz57uE77ya5pS+5bCE5oCnID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InJhZGlvYWN0aXZpdHkiIE5hbWU9InJhZGlvYWN0aXZpdHkiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMzAxIiBVbml0PSJBUEkiIGs9IjEiIERpZ2l0PSIxIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMzAyIiBVbml0PSJnQVBJIiBrPSIxIiBEaWdpdD0iMSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDI057uE77ya55S15Y6LID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZvbHRhZ2UiIE5hbWU9InZvbHRhZ2UiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNDAxIiBVbml0PSJWIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjQwMiIgVW5pdD0ibVYiIGs9IjAuMDAxIiBEaWdpdD0iNCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNDAzIiBVbml0PSJrViIgaz0iMTAwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwyNee7hO+8muWKmyA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJmb3JjZSIgTmFtZT0iZm9yY2UiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNTAxIiBVbml0PSJOIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjUwMiIgVW5pdD0ia04iIGs9IjEwMDAiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI1MDMiIFVuaXQ9ImxiZiIgaz0iNC40NDgyMjE2MTUyNjA1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNTA0IiBVbml0PSJrZ2YiIGs9IjkuODA2NjUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI1MDUiIFVuaXQ9ImR5biIgaz0iMWUtMDUiIERpZ2l0PSI2Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMjbnu4TvvJrpopHnjocgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iZnJlcXVlbmN5IiBOYW1lPSJmcmVxdWVuY3kiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNjAxIiBVbml0PSJIeiIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI2MDIiIFVuaXQ9ImtIeiIgaz0iMTAwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjYwMyIgVW5pdD0iTUh6IiBrPSIxZTYiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI2MDQiIFVuaXQ9IkdIeiIgaz0iMWU5IiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDI357uE77ya54Ot5a+8546HID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRoZXJtYWxfY29uZHVjdGl2aXR5IiBOYW1lPSJ0aGVybWFsX2NvbmR1Y3Rpdml0eSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI3MDEiIFVuaXQ9IlcvKG3Ct0spIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjcwMiIgVW5pdD0iVy8obcK34oSDKSIgaz0iMSIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjcwMyIgVW5pdD0iQnR1LyhowrdmdMK3wrBGKSIgaz0iMS43MzA3MzUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI3MDQiIFVuaXQ9ImNhbC8oY23Ct3PCt+KEgykiIGs9IjQxOC40IiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDI457uE77ya5q+U54Ot5a65ID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InNwZWNpZmljX2hlYXQiIE5hbWU9InNwZWNpZmljX2hlYXQiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyODAxIiBVbml0PSJKLyhrZ8K3SykiIGs9IjEiIERpZ2l0PSIzIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyODAyIiBVbml0PSJKLyhnwrdLKSIgaz0iMTAwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjgwMyIgVW5pdD0iY2FsLyhnwrfihIMpIiBrPSI0MTg0IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyODA0IiBVbml0PSJCdHUvKGxiwrfCsEYpIiBrPSI0MTg2LjgiIERpZ2l0PSIyIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMjnnu4TvvJrmkanlsJTotKjph48gPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0ibW9sYXJfbWFzcyIgTmFtZT0ibW9sYXJfbWFzcyI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI5MDEiIFVuaXQ9ImtnL21vbCIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI5MDIiIFVuaXQ9ImcvbW9sIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjkwMyIgVW5pdD0ibGIvbGJtb2wiIGs9IjAuNDUzNTkyMzciIERpZ2l0PSI0Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMzDnu4TvvJpVbmtub3duMSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJtb2xhcl9tYXNzIiBOYW1lPSJtb2xhcl9tYXNzIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzAwMSIgVW5pdD0ia2cvbW9sIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzAwMiIgVW5pdD0iZy9tb2wiIGs9IjAuMDAxIiBEaWdpdD0iNCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMDAzIiBVbml0PSJsYi9sYm1vbCIgaz0iMC40NTM1OTIzNyIgRGlnaXQ9IjQiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMzHnu4TvvJpVbmtub3duMSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ3cyIgTmFtZT0i55uQ5bqmIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzEwMSIgVW5pdD0ibWcvTCIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMTAyIiBVbml0PSLOvGcvbUwiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzEwMyIgVW5pdD0iZy9MIiBrPSIxMDAwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTMxMDQiIFVuaXQ9ImtnL21eMyIgaz0iMC4wMDEiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzEwNSIgVW5pdD0icHBtIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTMxMDYiIFVuaXQ9IktwcG0iIGs9IjEwMDAiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwzMue7hO+8mlVua25vd24xID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZpc2Nvc2l0eSIgTmFtZT0idmlzY29zaXR5Ij4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwMSIgVW5pdD0iUGEucyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMjAyIiBVbml0PSJtUGEucyIgaz0iMC4wMDEiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwMyIgVW5pdD0iUCIgaz0iMC4xIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTMyMDQiIFVuaXQ9ImNQIiBrPSIwLjAwMSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMjA1IiBVbml0PSJiZi5zL2Z0XjIiIGs9IjQ3Ljg4MDMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwNiIgVW5pdD0ia2dmLnMvbV4zIiBrPSI5LjgwNjY1Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMzPnu4TvvJrkupXnrZLlgqjpm4bns7vmlbAgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iVG9EbzMiIE5hbWU9IlRvRG8zIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzMwMSIgVW5pdD0ibV4zL01QYSIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgPC9UeXBlT2Y+DQo8L1Jvb3Q+DQo= \ No newline at end of file +77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxSb290Pg0KICAgIDxUeXwzyBlT2Y+DQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMDHnu4TvvJrplb/luqYgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0ibGVuZ3RoIiBOYW1lPSJsZW5ndGgiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMTAxIiBVbml0PSJtIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDEwMiIgVW5pdD0ia20iIGs9IjEwMDAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDMiIFVuaXQ9ImNtIiBrPSIwLjAxIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMTA0IiBVbml0PSJtbSIgaz0iMC4wMDEiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDUiIFVuaXQ9ImluIiBrPSIwLjAyNTQiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDYiIFVuaXQ9ImZ0IiBrPSIwLjMwNDgiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDciIFVuaXQ9InlkIiBrPSIwLjkxNDQiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDgiIFVuaXQ9Im1pIiBrPSIxNjA5LjM0IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMTA5IiBVbml0PSJubWlsZSIgaz0iMTg1MiIgRGlnaXQ9IjAiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDExMCIgVW5pdD0ibm0iIGs9IjFlLTA5IiBEaWdpdD0iNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDAy57uE77ya5pe26Ze0ID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRpbWUiIE5hbWU9InRpbWUiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMjAxIiBVbml0PSJzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDIwMiIgVW5pdD0ibXMiIGs9IjAuMDAxIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMjAzIiBVbml0PSJ1cyIgaz0iMWUtMDYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAyMDQiIFVuaXQ9Im1pbiIgaz0iNjAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAyMDUiIFVuaXQ9ImgiIGs9IjM2MDAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAyMDYiIFVuaXQ9ImQiIGs9Ijg2NDAwIiBEaWdpdD0iMCIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDAz57uE77ya6LSo6YePID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9Im1hc3MiIE5hbWU9Im1hc3MiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzAxIiBVbml0PSJrZyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAzMDIiIFVuaXQ9ImciIGs9IjAuMDAxIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzAzIiBVbml0PSJ0b24iIGs9IjEwMDAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAzMDQiIFVuaXQ9ImxiIiBrPSIwLjQ1MzU5MjM3IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzA1IiBVbml0PSJveiIgaz0iMC4wMjgzNDk1IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzA2IiBVbml0PSJzdG9uIiBrPSI5MDcuMTg1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzA3IiBVbml0PSJsdG9uIiBrPSIxMDE2LjA1IiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA057uE77ya6KeS5bqmID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9ImFuZ2xlIiBOYW1lPSJhbmdsZSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA0MDEiIFVuaXQ9InJhZCIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA0MDIiIFVuaXQ9ImRlZyIgaz0iMC4wMTc0NTMyOTI1MTk5NDMzIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNDAzIiBVbml0PSJncmFkIiBrPSIwLjAxNTcwNzk2MzI2Nzk0OSIgRGlnaXQ9IjYiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwwNee7hO+8mumdouenryA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJhcmVhIiBOYW1lPSJhcmVhIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDUwMSIgVW5pdD0ibcKyIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDUwMiIgVW5pdD0ia23CsiIgaz0iMWU2IiBEaWdpdD0iMCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNTAzIiBVbml0PSJjbcKyIiBrPSIwLjAwMDEiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA1MDQiIFVuaXQ9ImZ0wrIiIGs9IjAuMDkyOTAzMDQiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA1MDUiIFVuaXQ9ImluwrIiIGs9IjAuMDAwNjQ1MTYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA1MDYiIFVuaXQ9ImFjcmUiIGs9IjQwNDYuODU2NDIyNCIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDUwNyIgVW5pdD0iaGEiIGs9IjEwMDAwIiBEaWdpdD0iMCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNTA4IiBVbml0PSJ5ZMKyIiBrPSIwLjgzNjEyNzM2IiBEaWdpdD0iNCIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA257uE77ya5L2T56evID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZvbHVtZSIgTmFtZT0idm9sdW1lIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwMSIgVW5pdD0ibcKzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwMiIgVW5pdD0iTCIgaz0iMC4wMDEiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDMiIFVuaXQ9Im1MIiBrPSIxZS0wNiIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwNCIgVW5pdD0iY23CsyIgaz0iMWUtMDYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDUiIFVuaXQ9ImNjIiBrPSIxZS0wNiIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwNiIgVW5pdD0iYmJsIiBrPSIwLjE1ODk4NzI5NDkyOCIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwNyIgVW5pdD0iZ2FsKFVTKSIgaz0iMC4wMDM3ODU0MTE3ODQiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDgiIFVuaXQ9ImdhbChVSykiIGs9IjAuMDA0NTQ2MDkiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDkiIFVuaXQ9ImZ0wrMiIGs9IjAuMDI4MzE2ODQ2NTkyIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNjEwIiBVbml0PSJpbsKzIiBrPSIxLjYzODcwNjRlLTA1IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNjExIiBVbml0PSJxdCIgaz0iMC4wMDA5NDYzNTI5NDYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MTIiIFVuaXQ9InB0IiBrPSIwLjAwMDQ3MzE3NjQ3MyIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYxMyIgVW5pdD0iZ2kiIGs9IjAuMDAwMTE4Mjk0MTE4IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNjE0IiBVbml0PSJhY3JlLmZ0IiBrPSIxMjMzLjQ4MTgzNzU0NzUyIiBEaWdpdD0iMyIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA357uE77ya6YCf5bqmID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZlbG9jaXR5IiBOYW1lPSJ2ZWxvY2l0eSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA3MDEiIFVuaXQ9Im0vcyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA3MDIiIFVuaXQ9ImttL2giIGs9IjAuMjc3Nzc3Nzc4IiBEaWdpdD0iNSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNzAzIiBVbml0PSJmdC9zIiBrPSIwLjMwNDgiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA3MDQiIFVuaXQ9Im1pbGUvaCIgaz0iMC40NDcwNCIgRGlnaXQ9IjUiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwwOOe7hO+8mua4qeW6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ0ZW1wZXJhdHVyZSIgTmFtZT0idGVtcGVyYXR1cmUiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwODAxIiBVbml0PSJLIiBrPSIxIiBiPSIwIiBEaWdpdD0iMiIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDgwMiIgVW5pdD0i4oSDIiBrPSIxIiBiPSIyNzMuMTUiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA4MDMiIFVuaXQ9ImRlZ0MiIGs9IjEiIGI9IjI3My4xNSIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDgwNCIgVW5pdD0iZGVnRiIgaz0iMC41NTU1NTU1NTU1NTU1NTYiIGI9IjI1NS4zNzIyMjIyMjIyMjIiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA4MDUiIFVuaXQ9IsKwRiIgaz0iMC41NTU1NTU1NTU1NTU1NTYiIGI9IjI1NS4zNzIyMjIyMjIyMjIiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA4MDYiIFVuaXQ9IlIiIGs9IjAuNTU1NTU1NTU1NTU1NTU2IiBiPSIwIiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA557uE77ya5rip5beuID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRlbXBlcmF0dXJlX2RlbHRhIiBOYW1lPSJ0ZW1wZXJhdHVyZV9kZWx0YSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA5MDEiIFVuaXQ9IksiIGs9IjEiIERpZ2l0PSIyIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwOTAyIiBVbml0PSLihIMiIGs9IjEiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA5MDMiIFVuaXQ9ImRlZ0MiIGs9IjEiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA5MDQiIFVuaXQ9ImRlZ0YiIGs9IjAuNTU1NTU1NTU1NTU1NTU2IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwOTA1IiBVbml0PSLCsEYiIGs9IjAuNTU1NTU1NTU1NTU1NTU2IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwOTA2IiBVbml0PSJSIiBrPSIwLjU1NTU1NTU1NTU1NTU1NiIgRGlnaXQ9IjIiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxMOe7hO+8muWcsOa4qeair+W6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJnZW90aGVybWFsZ3JhZGllbnQiIE5hbWU9Imdlb3RoZXJtYWxncmFkaWVudCI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDEiIFVuaXQ9IksvbSIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDIiIFVuaXQ9IuKEgy9rbSIgaz0iMC4wMDEiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDMiIFVuaXQ9ImRlZy9rbSIgaz0iMC4wMDEiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDQiIFVuaXQ9IsKwRi9mdCIgaz0iMS44MTgxODE4MTgxODE4MiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTAwNSIgVW5pdD0iRi9mdCIgaz0iMS44MTgxODE4MTgxODE4MiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTAwNiIgVW5pdD0iwrBGLzEwMGZ0IiBrPSIwLjAxODE4MTgxODE4MTgxODIiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDciIFVuaXQ9IkYvbWlsZSIgaz0iMC4wMzQ0ODI3NTg2MjA2ODk3IiBEaWdpdD0iMyIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDEx57uE77ya5Y6L5YqbID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InByZXNzdXJlIiBOYW1lPSJwcmVzc3VyZSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTExMDEiIFVuaXQ9IlBhIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwMiIgVW5pdD0ia1BhIiBrPSIxMDAwIiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTAzIiBVbml0PSJNUGEiIGs9IjFlNiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwNCIgVW5pdD0iYmFyIiBrPSIxMDAwMDAiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTExMDUiIFVuaXQ9Im1iYXIiIGs9IjEwMCIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwNiIgVW5pdD0icHNpIiBrPSI2ODk0Ljc1NzI5IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTA3IiBVbml0PSJhdG0iIGs9IjEwMTMyNSIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwOCIgVW5pdD0iYXQiIGs9Ijk4MDY2LjUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTExMDkiIFVuaXQ9ImtnZi9jbcKyIiBrPSI5ODA2Ni41IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTEwIiBVbml0PSJtbUhnIiBrPSIxMzMuMzIyMzY4IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTExIiBVbml0PSJUb3JyIiBrPSIxMzMuMzIyMzY4IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTEyIiBVbml0PSJtSDJPIiBrPSI5ODA2LjY1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTEzIiBVbml0PSJtbUgyTyIgaz0iOS44MDY2NSIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTExNCIgVW5pdD0iZHluL2NtwrIiIGs9IjAuMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxMue7hO+8muWvhuW6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJkZW5zaXR5IiBOYW1lPSJkZW5zaXR5Ij4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTIwMSIgVW5pdD0ia2cvbcKzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTIwMiIgVW5pdD0iZy9jbcKzIiBrPSIxMDAwIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjAzIiBVbml0PSJnL2NjIiBrPSIxMDAwIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA0IiBVbml0PSJsYi9mdMKzIiBrPSIxNi4wMTg0NjM0IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA1IiBVbml0PSJsYi9nYWwoVVMpIiBrPSIxMTkuODI2NDI3IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA2IiBVbml0PSJsYi9nYWwoVUspIiBrPSI5OS43NzY0IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA3IiBVbml0PSJsYi9iYmwiIGs9IjIuODUzIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA4IiBVbml0PSJnL2Z0wrMiIGs9IjAuMDM1MzE0NyIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTIwOSIgVW5pdD0iZy9jZiIgaz0iMC4wMzUzMTQ3IiBEaWdpdD0iMyIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDEz57uE77ya5Yqo5Yqb57KY5bqmID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZpc2Nvc2l0eSIgTmFtZT0idmlzY29zaXR5X2R5bmFtaWMiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMzAxIiBVbml0PSJQYcK3cyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEzMDIiIFVuaXQ9Im1QYcK3cyIgaz0iMC4wMDEiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEzMDMiIFVuaXQ9ImNQIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTMwNCIgVW5pdD0iUCIgaz0iMC4xIiBEaWdpdD0iNCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMzA1IiBVbml0PSJrZ2bCt3MvbcKyIiBrPSI5LjgwNjY1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMzA2IiBVbml0PSJsYmbCt3MvZnTCsiIgaz0iNDcuODgwMyIgRGlnaXQ9IjMiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxNOe7hO+8mui/kOWKqOeymOW6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ2aXNjb3NpdHlfa2luZW1hdGljIiBOYW1lPSJ2aXNjb3NpdHlfa2luZW1hdGljIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTQwMSIgVW5pdD0ibcKyL3MiIGs9IjEiIERpZ2l0PSI2IiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDAyIiBVbml0PSJtbcKyL3MiIGs9IjFlLTA2IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDAzIiBVbml0PSJjU3QiIGs9IjFlLTA2IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDA0IiBVbml0PSJTdCIgaz0iMC4wMDAxIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDA1IiBVbml0PSJjbcKyL3MiIGs9IjAuMDAwMSIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTQwNiIgVW5pdD0iZnTCsi9zIiBrPSIwLjA5MjkwMzA0IiBEaWdpdD0iNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDE157uE77ya5riX6YCP546HID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InBlcm1lYWJpbGl0eSIgTmFtZT0icGVybWVhYmlsaXR5Ij4NCg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNTAxIiBVbml0PSJEIiBrPSIxIiBEaWdpdD0iNCIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTUwMiIgVW5pdD0ibUQiIGs9IjAuMDAxIiBEaWdpdD0iNCIgLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTUwMyIgVW5pdD0iMS9jbcKyIiBrPSI5LjgxZSswNyIgRGlnaXQ9IjIiLz4NCg0KDQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMTbnu4TvvJrog73ph48gPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iZW5lcmd5IiBOYW1lPSJlbmVyZ3kiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNjAxIiBVbml0PSJKIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTYwMiIgVW5pdD0ia0oiIGs9IjEwMDAiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDMiIFVuaXQ9Ik1KIiBrPSIxZTYiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDQiIFVuaXQ9ImNhbCIgaz0iNC4xODQiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDUiIFVuaXQ9ImtjYWwiIGs9IjQxODQiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDYiIFVuaXQ9IkJ0dSIgaz0iMTA1NS4wNTU4NTI2MiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTYwNyIgVW5pdD0iQlRVIiBrPSIxMDU1LjA1NTg1MjYyIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNjA4IiBVbml0PSJrV8K3aCIgaz0iMy42ZTYiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDkiIFVuaXQ9ImZ0wrdsYmYiIGs9IjEuMzU1ODE3OTQ4IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNjEwIiBVbml0PSJrZ2bCt20iIGs9IjkuODA2NjUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MTEiIFVuaXQ9ImhwwrdoIiBrPSIyLjY4NDUyZTYiIERpZ2l0PSIzIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMTfnu4TvvJrlip/njocgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icG93ZXIiIE5hbWU9InBvd2VyIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTcwMSIgVW5pdD0iVyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE3MDIiIFVuaXQ9ImtXIiBrPSIxMDAwIiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNzAzIiBVbml0PSJNVyIgaz0iMWU2IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNzA0IiBVbml0PSJocCIgaz0iNzQ1LjY5OTg3MTU4MjI3IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNzA1IiBVbml0PSJCdHUvaCIgaz0iMC4yOTMwNzEwNyIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTcwNiIgVW5pdD0iY2FsL3MiIGs9IjQuMTg2OCIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTcwNyIgVW5pdD0ia2dmwrdtL3MiIGs9IjkuODA2NjUiIERpZ2l0PSIzIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMTjnu4TvvJrkvZPnp6/mtYHph48gPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iZmxvd19yYXRlX3ZvbHVtZSIgTmFtZT0iZmxvd19yYXRlX3ZvbHVtZSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE4MDEiIFVuaXQ9Im3Csy9kIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwMiIgVW5pdD0ibcKzL3MiIGs9Ijg2NDAwIiBEaWdpdD0iNiIgUmVtYXJrPSIxIG3Csy9zID0gODY0MDAgbcKzL2QiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwMyIgVW5pdD0ibcKzL2EiIGs9IjAuMDAyNzM5NzI2MDI3Mzk3MjYiIERpZ2l0PSI2IiBSZW1hcms9IjEgbcKzL2EgPSAxLzM2NSBtwrMvZCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxODA0IiBVbml0PSJzdGIvZCIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iMSBzdGIvZCDiiYggMSBtwrMvZCAo5bel56iL6L+R5Ly8KSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxODA1IiBVbml0PSJiYmwvZCIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iMSBiYmwvZCDiiYggMSBtwrMvZCAo5bel56iL6L+R5Ly8KSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxODA2IiBVbml0PSJmdMKzL3MiIGs9IjI0NDYuNTc1IiBEaWdpdD0iNiIgUmVtYXJrPSIxIGZ0wrMvcyA9IDI0NDYuNTc1IG3Csy9kIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE4MDciIFVuaXQ9ImZ0wrMvZCIgaz0iMC4wMjgzMTY4NDY1OTIiIERpZ2l0PSI2IiBSZW1hcms9IjEgZnTCsy9kID0gMC4wMjgzMTY4NDY1OTIgbcKzL2QiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwOCIgVW5pdD0iTU1zY2YvZCIgaz0iMjgzMTYuODQ2NTkyIiBEaWdpdD0iNCIgUmVtYXJrPSIxIE1Nc2NmL2QgPSAyODMxNi44NDY1OTIgbcKzL2QgKOeQhuaDs+awlOS9kykiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwOSIgVW5pdD0iTXNjZi9kIiBrPSIyOC4zMTY4NDY1OTIiIERpZ2l0PSI2IiBSZW1hcms9IjEgTXNjZi9kID0gMjguMzE2ODQ2NTkyIG3Csy9kICjnkIbmg7PmsJTkvZMpIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE4MTAiIFVuaXQ9IjEw4oG0Km3Csy9kIiBrPSIxMDAwMCIgRGlnaXQ9IjQiIFJlbWFyaz0iMSDkuIfmlrkv5aSpID0gMTAwMDAgbcKzL2QiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxOee7hO+8muWOi+e8qeezu+aVsCA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJjb21wcmVzc2liaWxpdHkiIE5hbWU9ImNvbXByZXNzaWJpbGl0eSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE5MDEiIFVuaXQ9IjEvTVBhIiBrPSIxIiBEaWdpdD0iNiIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTkwMiIgVW5pdD0iMS9QYSIgaz0iMWU2IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxOTAzIiBVbml0PSIxL3BzaSIgaz0iMTQ1LjAzNzczOCIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTkwNCIgVW5pdD0iMS9hdG0iIGs9IjkuODY5MjMyNjY3MTYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE5MDUiIFVuaXQ9IjEvYmFyIiBrPSIxMCIgRGlnaXQ9IjYiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwyMOe7hO+8mua1k+W6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJjb25jZW50cmF0aW9uIiBOYW1lPSJjb25jZW50cmF0aW9uIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwMSIgVW5pdD0ia2cvbcKzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwMiIgVW5pdD0iZy9MIiBrPSIxIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMDAzIiBVbml0PSJtZy9MIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwNCIgVW5pdD0izrxnL21MIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwNSIgVW5pdD0icHBtIiBrPSIwLjAwMSIgRGlnaXQ9IjQiIFJlbWFyaz0iYXNzdW1pbmcgMSBwcG0gPSAxIG1nL2tnIGluIHdhdGVyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIwMDYiIFVuaXQ9IktwcG0iIGs9IjEiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIwMDciIFVuaXQ9Im1vbC9twrMiIGs9IjEiIERpZ2l0PSIzIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMjHnu4TvvJrnmb7liIbmr5QgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icGVyY2VudCIgTmFtZT0icGVyY2VudCI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIxMDEiIFVuaXQ9IiUiIGs9IjEiIERpZ2l0PSIyIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMTAyIiBVbml0PSJwdSIgaz0iMSIgRGlnaXQ9IjIiIFJlbWFyaz0icGVyIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjEwMyIgVW5pdD0iZnJhY3Rpb24iIGs9IjEwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjEwNCIgVW5pdD0idi92IiBrPSIxMDAiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIxMDUiIFVuaXQ9Im3Csy9twrMiIGs9IjEwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwyMue7hO+8muaFouW6pu+8iOWjsOazou+8iSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJzbG93bmVzcyIgTmFtZT0ic2xvd25lc3MiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMjAxIiBVbml0PSJzL20iIGs9IjEiIERpZ2l0PSIzIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMjAyIiBVbml0PSJ1cy9tIiBrPSIxZS0wNiIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjIwMyIgVW5pdD0idXMvZnQiIGs9IjMuMjgwODM5ODk1MDEzMTJlLTA2IiBEaWdpdD0iNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDIz57uE77ya5pS+5bCE5oCnID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InJhZGlvYWN0aXZpdHkiIE5hbWU9InJhZGlvYWN0aXZpdHkiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMzAxIiBVbml0PSJBUEkiIGs9IjEiIERpZ2l0PSIxIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMzAyIiBVbml0PSJnQVBJIiBrPSIxIiBEaWdpdD0iMSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDI057uE77ya55S15Y6LID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZvbHRhZ2UiIE5hbWU9InZvbHRhZ2UiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNDAxIiBVbml0PSJWIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjQwMiIgVW5pdD0ibVYiIGs9IjAuMDAxIiBEaWdpdD0iNCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNDAzIiBVbml0PSJrViIgaz0iMTAwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwyNee7hO+8muWKmyA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJmb3JjZSIgTmFtZT0iZm9yY2UiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNTAxIiBVbml0PSJOIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjUwMiIgVW5pdD0ia04iIGs9IjEwMDAiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI1MDMiIFVuaXQ9ImxiZiIgaz0iNC40NDgyMjE2MTUyNjA1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNTA0IiBVbml0PSJrZ2YiIGs9IjkuODA2NjUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI1MDUiIFVuaXQ9ImR5biIgaz0iMWUtMDUiIERpZ2l0PSI2Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMjbnu4TvvJrpopHnjocgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iZnJlcXVlbmN5IiBOYW1lPSJmcmVxdWVuY3kiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNjAxIiBVbml0PSJIeiIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI2MDIiIFVuaXQ9ImtIeiIgaz0iMTAwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjYwMyIgVW5pdD0iTUh6IiBrPSIxZTYiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI2MDQiIFVuaXQ9IkdIeiIgaz0iMWU5IiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDI357uE77ya54Ot5a+8546HID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRoZXJtYWxfY29uZHVjdGl2aXR5IiBOYW1lPSJ0aGVybWFsX2NvbmR1Y3Rpdml0eSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI3MDEiIFVuaXQ9IlcvKG3Ct0spIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjcwMiIgVW5pdD0iVy8obcK34oSDKSIgaz0iMSIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjcwMyIgVW5pdD0iQnR1LyhowrdmdMK3wrBGKSIgaz0iMS43MzA3MzUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI3MDQiIFVuaXQ9ImNhbC8oY23Ct3PCt+KEgykiIGs9IjQxOC40IiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDI457uE77ya5q+U54Ot5a65ID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InNwZWNpZmljX2hlYXQiIE5hbWU9InNwZWNpZmljX2hlYXQiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyODAxIiBVbml0PSJKLyhrZ8K3SykiIGs9IjEiIERpZ2l0PSIzIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyODAyIiBVbml0PSJKLyhnwrdLKSIgaz0iMTAwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjgwMyIgVW5pdD0iY2FsLyhnwrfihIMpIiBrPSI0MTg0IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyODA0IiBVbml0PSJCdHUvKGxiwrfCsEYpIiBrPSI0MTg2LjgiIERpZ2l0PSIyIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMjnnu4TvvJrmkanlsJTotKjph48gPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0ibW9sYXJfbWFzcyIgTmFtZT0ibW9sYXJfbWFzcyI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI5MDEiIFVuaXQ9ImtnL21vbCIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI5MDIiIFVuaXQ9ImcvbW9sIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjkwMyIgVW5pdD0ibGIvbGJtb2wiIGs9IjAuNDUzNTkyMzciIERpZ2l0PSI0Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMzDnu4TvvJpVbmtub3duMSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJtb2xhcl9tYXNzIiBOYW1lPSJtb2xhcl9tYXNzIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzAwMSIgVW5pdD0ia2cvbW9sIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzAwMiIgVW5pdD0iZy9tb2wiIGs9IjAuMDAxIiBEaWdpdD0iNCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMDAzIiBVbml0PSJsYi9sYm1vbCIgaz0iMC40NTM1OTIzNyIgRGlnaXQ9IjQiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMzHnu4TvvJpVbmtub3duMSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ3cyIgTmFtZT0i55uQ5bqmIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzEwMSIgVW5pdD0ibWcvTCIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMTAyIiBVbml0PSLOvGcvbUwiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzEwMyIgVW5pdD0iZy9MIiBrPSIxMDAwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTMxMDQiIFVuaXQ9ImtnL21eMyIgaz0iMC4wMDEiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzEwNSIgVW5pdD0icHBtIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTMxMDYiIFVuaXQ9IktwcG0iIGs9IjEwMDAiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwzMue7hO+8mlVua25vd24xID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZpc2Nvc2l0eSIgTmFtZT0idmlzY29zaXR5Ij4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwMSIgVW5pdD0iUGEucyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMjAyIiBVbml0PSJtUGEucyIgaz0iMC4wMDEiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwMyIgVW5pdD0iUCIgaz0iMC4xIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTMyMDQiIFVuaXQ9ImNQIiBrPSIwLjAwMSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMjA1IiBVbml0PSJiZi5zL2Z0XjIiIGs9IjQ3Ljg4MDMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwNiIgVW5pdD0ia2dmLnMvbV4zIiBrPSI5LjgwNjY1Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDku6XkuIvkuLrmlbDlgLzor5XkupXmqKHlnZfooaXlhYXmianlsZXljZXkvY0gPT09PT09PT09PT09PT09PT09PT0gLS0+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwzM+e7hO+8muS6leetkuWCqOmbhuezu+aVsCA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJUb0RvMyIgTmFtZT0iVG9EbzMiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMzAxIiBVbml0PSJtXjMvTVBhIiBrPSIxIiBEaWdpdD0iNiIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwzNOe7hO+8mua1geWKqOiDveWKmyA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJmbG93X2NhcGFjaXR5IiBOYW1lPSJmbG93X2NhcGFjaXR5Ij4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzQwMSIgVW5pdD0ibUQubSIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgPC9UeXBlT2Y+DQo8L1Jvb3Q+DQo= \ No newline at end of file diff --git a/Bin/XmlFiles/ModelParaDefinesNM_cn.xml b/Bin/XmlFiles/ModelParaDefinesNM_cn.xml index 95751c5..540213f 100644 --- a/Bin/XmlFiles/ModelParaDefinesNM_cn.xml +++ b/Bin/XmlFiles/ModelParaDefinesNM_cn.xml @@ -35,10 +35,10 @@ - + - + diff --git a/Bin/XmlFiles/ModelParaDefinesNM_en.xml b/Bin/XmlFiles/ModelParaDefinesNM_en.xml index 38be5f8..3b32735 100644 --- a/Bin/XmlFiles/ModelParaDefinesNM_en.xml +++ b/Bin/XmlFiles/ModelParaDefinesNM_en.xml @@ -36,10 +36,10 @@ - + - + diff --git a/Bin/XmlFiles/UnitDefault_cn.xml b/Bin/XmlFiles/UnitDefault_cn.xml index e96401b..e8a4d3a 100644 --- a/Bin/XmlFiles/UnitDefault_cn.xml +++ b/Bin/XmlFiles/UnitDefault_cn.xml @@ -331,10 +331,18 @@ + + + + + + + + From 6b2009bf6272d9a3a9ec4998157843f57bd265be Mon Sep 17 00:00:00 2001 From: lh <2334563547@qq.com> Date: Fri, 14 Aug 2026 16:33:05 +0800 Subject: [PATCH 05/10] =?UTF-8?q?fix(nmNum):=20=E4=BF=AE=E6=AD=A3=E5=8E=8B?= =?UTF-8?q?=E8=A3=82=E4=BA=95=E5=9E=8B=E5=8F=8A=E4=BA=95=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E5=88=86=E7=BB=84=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bin/Config/Lang/cn/nmNum_cn.qm | Bin 112435 -> 112543 bytes Bin/Config/Lang/cn/nmNum_cn.ts | 7 ++++--- .../nmSubWxs/nmReservoirParameterCatalog.cpp | 15 +++++++++------ 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/Bin/Config/Lang/cn/nmNum_cn.qm b/Bin/Config/Lang/cn/nmNum_cn.qm index fb8dbc0f9b5d0d6bc3593263aea801d6324fc8e3..b0806ed38e70a34dd02a8e15b97ac17122c3cc39 100644 GIT binary patch delta 1151 zcmYk)drX^E6aesZF8x}*j=~0%$3|OPXe(sE3<%5Q5i_A-j)%iqoe{)YHezX|4~o3s zZ?;QF5zMR8vw&8z+t!V zMK*){IRHlt;OI@_LhFNNwH=^)KIBnZ$gfxa6?;nQ4p)Trq!nLgeH!{ntimrzCQ;!v%8*>cTnb7~Gnau-3*`S83B7aTHy`YMRMt3 z{DHjE3LK+#sT-%MVUvmflSM3j0NDMJZ)MY6)U;-^d-;<9G4mmdj)bwP{eTfqg^6eP z0XFTVfXs&Xs5o+hjqRsEWFZ^PCwWvS`e-Vu1~+Ius!rOb3j6E~0k$0=^X8`|5yriM zuQk%b<_f$|+?HR{+p9#!N-qL-JQK3V9P+4DVM_zvDCe;csW z9I^{YtE>>_%B6gQ7L__|raQ_B<^Xc3Y9+g4geo~NQ9zZ4LnKSiWF1l}NUp(~bTZkG z^JG-l2oDQt9c$T1t7;{4tWi*{$19}ORI~O}>en=}<`iF0qemfGZK@t`QCVt7bW2#o z%yS(8?2m}qQ}uu?cWE{CP3q9*;=8ntU z%T2$OPlbc9#KMj*vDY4Oy6omxlAAmqPh+-!`55j&PwjCW$&Gw|>#Ga@gjjN_9sdhT zEpu6%^$ut4L3485!}vosdwq+|>hvs4W2XQ9aZC#HoSDWEKD>OYbzkK>M=w+5qSE6% nfhj4G|6P?w4lQ>o9;Tx(nJt!=ZFY0A!=sqSUH+UI{44%%T6TFd delta 1054 zcmY+?YfPI}7zgn4ob_#aI|}1ciqH!%-~|F~i|a^cfSAQKEEd=Z6m^A=S=^MHK+DFh zgHf*QCixFKa9g)Ih%sV}b=E`&G6Tsn7fg1MWFu-K`!X3C%@#l4e6_~JlbrMW@SHp+ z`JczXt_(a@z7tE8quMq~81))?>(kMhr^!yngclff{}!^ZD&#;^$l*yW&}mV=Wx2v= zC?;U%eiE&WwZt$QaY0a6C>~aYF3QUk%Pox3G)(dHc1DdlI2A$4M~<+IyO-e*B+|hv zmR9S6{|ua2}n~e@)NUIQ<~^aXjCS83puJK+Kmm>G;f{7 zR9F@7xeP(vMg=g7Hd4VWX6inBeh;I8GB!I^z^Ljd`#P_jQST+(6)mKPL4BGYVMbj- z8Q4&_$=#frZQ?i&pZkbWPkG?(=7+@FmvBvEMJKT6M=4o8~_NqmE~&-?ATzTZ(A_+NdX4o$HFTMPD-N`Xyv<#J@fY*?%+S z&;gjEZQ?7653{G_jL%>!dYTX2Lw?L&b@!YgoIAs4xDwu&IVyrRc899svWHR2D7s%DKmHjtJ=Nlx964Yd-*SpUw}EzBIYY|^&d0pY=ti^##27G0OFY zWW|`igiKh~TPOlKhIIA7ZBg-UAEUt}*bRjw;k?0>a{Rtn`^^nTmRzxJ-%pIfwu_D0 z_ZSs9Lb}hvY%Gz-!()6=b$j%nJU!!BFiI4QHRCDXd=Xuy8ay=ZqEr}?a(UM@tVz}6 z!c0<-O5sSZmJ18X>HOFotR>5ny%U-giQa%YrHXfcg|QSDZ<`Bfwn{{aFsDj10()wA z^f7<9zp|S#{zv$wD@Pc$_hKz|LUpg`fgJCT@TBF*fnQ5Ai3h@e4Zg~#?+2`=waM?= z(@nGkUFrSY^$7&YM*Crx+%$m|DV-m^4D ztYCWbjj(EoCEv*L_QSNGH}d*BokfHalMTt)HcApJS4SedYP24IX}% zRGZ?|rSFd~7Do(TcN@Z(yp-~eE%Vj-X}6@d^}2rlyHoMle>Gi&qq+6Sp_;m+|259> OHC>>g;6*<@)BOcOs#tyi diff --git a/Bin/Config/Lang/cn/nmNum_cn.ts b/Bin/Config/Lang/cn/nmNum_cn.ts index 4b2d7a6..d27e00e 100644 --- a/Bin/Config/Lang/cn/nmNum_cn.ts +++ b/Bin/Config/Lang/cn/nmNum_cn.ts @@ -6822,10 +6822,11 @@ Average pressure in contour: %2 MPa Finite conductivity有限导流 Infinite conductivity无限导流 Vertical well直井 - Vertical fractured well垂直压裂井 - Horizontal fractured well水平压裂井 + Fractured vertical well压裂直井 + Multistage fractured horizontal well多段压裂水平井 Position and wellbore位置与井筒 - Storage and fracture储集与裂缝 + Wellbore storage井筒储集 + Wellbore storage and fracture井筒储集与裂缝 Basic properties基础特性 Fluid parameters流体参数 Compression and saturation压缩与饱和度 diff --git a/Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp b/Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp index 4115645..6dd421d 100644 --- a/Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp +++ b/Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp @@ -27,14 +27,15 @@ static const char* const s_pCatalogTranslationMarkers[] = QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Finite conductivity"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Infinite conductivity"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Position and wellbore"), - QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Storage and fracture"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Wellbore storage"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Wellbore storage and fracture"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Basic properties"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Fluid parameters"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Compression and saturation"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Reservoir parameters"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Vertical well"), - QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Vertical fractured well"), - QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Horizontal fractured well"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Fractured vertical well"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Multistage fractured horizontal well"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Dual-medium parameters"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Geometry"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Flow properties"), @@ -193,8 +194,10 @@ void createWellGroups(nmReservoirPropertyObjectInfo& oInfo, prefixed(oInfo.m_sObjectCode, "W_Skin"), "W_Skin")); } + const char* pStorageGroupTitle = eWellType == Vertical_Well + ? "Wellbore storage" : "Wellbore storage and fracture"; nmReservoirParameterGroupInfo oStorage = - parameterGroup("Storage and fracture", 0, 1, 1); + parameterGroup(pStorageGroupTitle, 0, 1, 1); oStorage.m_listFields.append(numericField( prefixed(oInfo.m_sObjectCode, "W_C"), "W_C")); if (eWellType == Vertical_Fractured_Well) @@ -490,7 +493,7 @@ nmReservoirParameterCatalog::createObjectInfos( oInfo.m_nSourceIndex = nIndex; oInfo.m_sObjectCode = wellCode(oWell, "VFWELL", nIndex); oInfo.m_sDisplayName = oWell.getWellName() + " - " + - editorText("Vertical fractured well"); + editorText("Fractured vertical well"); createWellGroups(oInfo, Vertical_Fractured_Well, oWell.getPerforationCount() > 0); listInfos.append(oInfo); @@ -508,7 +511,7 @@ nmReservoirParameterCatalog::createObjectInfos( oInfo.m_nSourceIndex = nIndex; oInfo.m_sObjectCode = wellCode(oWell, "HFWELL", nIndex); oInfo.m_sDisplayName = oWell.getWellName() + " - " + - editorText("Horizontal fractured well"); + editorText("Multistage fractured horizontal well"); createWellGroups(oInfo, Horizontal_Fractured_Well, oWell.getPerforationCount() > 0); listInfos.append(oInfo); From d847d428f5e0ec495ddc67e89a9e30b2df47bb44 Mon Sep 17 00:00:00 2001 From: lh <2334563547@qq.com> Date: Fri, 14 Aug 2026 17:35:57 +0800 Subject: [PATCH 06/10] =?UTF-8?q?refactor(nmNum):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=A4=8D=E5=90=88=E5=8C=BA=E5=92=8C=E5=8C=BA=E5=9F=9F=E6=A0=87?= =?UTF-8?q?=E8=AE=B0=E5=8F=82=E6=95=B0=E5=B8=83=E5=B1=80=E5=8F=8A=E5=91=BD?= =?UTF-8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bin/Config/Lang/cn/nmNum_cn.qm | Bin 112543 -> 112710 bytes Bin/Config/Lang/cn/nmNum_cn.ts | 8 +++-- .../nmSubWxs/nmReservoirParameterCatalog.h | 1 + .../nmSubWxs/nmReservoirParameterField.h | 11 ++++-- .../nmSubWxs/nmReservoirParameterCatalog.cpp | 33 +++++++++++------ .../nmSubWxs/nmReservoirParameterField.cpp | 23 ++++++------ .../nmSubWxs/nmReservoirParameterPage.cpp | 34 ++++++++++++++---- 7 files changed, 77 insertions(+), 33 deletions(-) diff --git a/Bin/Config/Lang/cn/nmNum_cn.qm b/Bin/Config/Lang/cn/nmNum_cn.qm index b0806ed38e70a34dd02a8e15b97ac17122c3cc39..003de21ebdb765f01ee6b20642773fef7a370739 100644 GIT binary patch delta 1300 zcmZ9KYfO_@7{{OI*teyxEtl2;3cVq1!6@pMqGS;_b)cI?HzrJD>up65dZDF7Zbifb zf>p^w?bu+(MB_q+a}Xgib(;>C>Eb2CO|y|LTe>A~OkH$|%gFX>ryq8bbABJr|GE6n zd5+u_U%DqgGy~mTDnDyeb%nI}N7ulg8C6>VxEBDMevdJ@KE`%gjGbW`!vlQ44N!Ot zup@rR%HBi1Z6$zL3An$CI8nizP9=!08vrHyK{UP{aC>r$P3<7M5Mz%*mAugAN>S&D9;tv$%@>v6rLHq@tp-HiZwb)56(J+4*&68Zi z3p6D;A>15~TZ9j2BF=<;#7T2lLmru>uh9W%&dggd{QPpj_98fcJRi`u3ob5N2iVd} zH>CxNniRO*&I>)|!*~2~z@39+;5Xq33i3wg_R;`f#9C+56z^w^X7Wuh;e%aF_Q^@W zJ!|Ra^d3pojd4KFy&;Ee4dP`wC)eUNnvgqLTQgbW%UDG-osKu*eVT}0DtJ^U1X%4W z)R$mmwPBh{*e)HO_E|pxHvC17#8RB1vBXsg8!Wd0t9nG%FNM}x_mC1^N#?z zkHq{>X8`m?Vny#Z;rZ-jNzUOzi^VzVr-Vj*6ihC~ews+W$|@^pAf=4em5?fRK3<`h zQ(Z~p6794QfMifIchm`3sid*gTvi)LQ>kn4)R1MS24}glB_BR?0DP*Joaz(?(^(@K zyyXGh<)`4R!)%v<)M&~Dv3fZ`fB6%lH$sitGUnSzQEe`3(vn&?ACHnnXJdP-Xh7#=m1jw<7plHWcD;?& zX=zMv62@dwuVK~gB+oFinyqBc*n}TbIHLwfhvc)3$O6e^&NMRD4zgx8CA}j%@@4>l zJ(3+gCRnX+q{&PTbGDJ(aFSKONaqY1-n&Y6e`Et-@LP%+{H&phtVRvnKbIPfZ8$)j zsf4+6$Z87k{_gnF!eZgYE>qN`70hy3CCqOiYt}#b3t6-E)S7Kz`*zSk_E&herEbnh z-5f06nHG2OjBoWu+h$W72umz%Yu%?`||J70X=?x64~zZP#smn&`1)L>tCF97&8|y~xBD-*u)ON_brRSz5(f zyT@VQvbFMmfsxL4@nYmiFBa%!Yv13vtmsN8tN4Q5{VXu;b-UN@@w>`By2v+&aq-B4 IK6K6c7gE`xJpcdz delta 1288 zcmX}r3rtg27zgn0JM{L_OD_sYl~+rF+X}OyVLWsKF)D;iYi0#DCspSFK`8RLfI^GB z1bLW|&)O{!4Jz4W!xxigi|EwgvMB1ZxGB-GWpO4xwwYzi+)}rzO?HxVe#tq>$^Ya# z-<99ghksSSHwQNlgx9k@u7Q37zCAGdXWWik0NiVUErotNF8S?}{q{VkN!%wm?*QZ; z1Kis%R>TgWu;(;DZ5UwhG;yk&q@HF_-IM_NK2UvA3RtT1>v{^R+qHm_2&%`60IRl< ztQu!+LuBF7aTyhJCf3?S{ahOB`-vtw1Lo0vE{iplk)-|-i@Dn2y`%UZ5G(#Az0?rX!T9d4oT&?I>VPDRpX+BUZzB$_l_PFPtCF0<<^6 z<@9{Oc8;brIYRwzxYI2t*|JCyHenQX3MN+dfJOx?>+B<+P|unVksMSYbo|Y<7ft}S zenz)~J{YUlS`kxdQZ!%&-4`8f&qK-&E@9|d=L%z^lTuQ6Lay9WBcW^&o&pC33 zooCKb%AYgNTCR~8UWGPtDyxN_gy(9EYM4<<*2*YT7eRKNMd%w+FN{8=1pl7gxKDDV~y1$My$n%v7!h) zMmh%hlYdkKd=bN+>iq@4(ZHX%T?5!KL+;1}tYIHnqLz>&s)*G!(NvV3wRDjsIvcH2 z8J)#;ou<)fE30lHUvv)JT|=v4%$jtK>ShOEcL&KaS**R6&c@gyD^F{-NSOeFN%M~S zEMVRdzpdG1(HjtGjo!+3HPN8Hgmp9$XK;m93<#mCR{)HZy%cMK+=dcXH%UH28gq41 zYHTtJR2*w(?b9?F>tNgOQmRqO@hLftcDA#d?itO-j38s%y8xl#elwp1Es!4rM$Qdd z_`=$!B*mFn{Z(2Mw+RzyG_C>T$E0`@GG_~|NiZ?TU6K=876)h#zv%*C&$L6w$^du$ ztUVgL5uk3ZUr(~%$sI4n%6~|bP9)VH*WMdYy7iSr?GLUYfP{zIAH8*;4DAE^?@Di+ z(LVKVQ2yLX@=5h^P19nI?L0u`h`2hS2w;&)T<2U2@VY_VdU;xDa5uS4U8tiNa{;S5 zLbBN<$iCphTpM8dL-Lsom`ySB3z)o*4~SvRxaPvR>_ln Oi~BLfdwUQak^ceB>z)t* diff --git a/Bin/Config/Lang/cn/nmNum_cn.ts b/Bin/Config/Lang/cn/nmNum_cn.ts index d27e00e..b604758 100644 --- a/Bin/Config/Lang/cn/nmNum_cn.ts +++ b/Bin/Config/Lang/cn/nmNum_cn.ts @@ -6815,9 +6815,11 @@ Average pressure in contour: %2 MPa Homogeneous均质储层 Dual porosity pseudo steady state双重介质拟稳态 Fault flow model断层流动模型 - Region flow model复合区流动模型 + Boundary type边界类型 Leaky泄漏 Composite limit复合边界 + Permeable boundary可渗透边界 + Composite boundary复合边界 Fracture flow model裂缝流动模型 Finite conductivity有限导流 Infinite conductivity无限导流 @@ -6830,11 +6832,11 @@ Average pressure in contour: %2 MPa Basic properties基础特性 Fluid parameters流体参数 Compression and saturation压缩与饱和度 - Dual-medium parameters双重介质参数 + Reservoir medium parameters储层介质参数 Geometry几何位置 Flow properties流动属性 Conductivity properties导流属性 - Region properties区域属性 + Boundary properties边界属性 nmSubWndMain diff --git a/Include/nmNum/nmSubWxs/nmReservoirParameterCatalog.h b/Include/nmNum/nmSubWxs/nmReservoirParameterCatalog.h index 0824746..37b6783 100644 --- a/Include/nmNum/nmSubWxs/nmReservoirParameterCatalog.h +++ b/Include/nmNum/nmSubWxs/nmReservoirParameterCatalog.h @@ -72,6 +72,7 @@ struct NM_SUB_WXS_EXPORT nmReservoirParameterGroupInfo int m_nRowSpan; ///< 分组纵向跨越的行数。 int m_nColumnSpan; ///< 分组横跨的列数。 bool m_bValueRightAligned; ///< 数值输入是否右对齐。 + bool m_bFieldsCentered; ///< 分组内字段是否水平居中并随宽度伸展。 QList m_listFields; ///< 分组内按显示顺序排列的字段。 }; diff --git a/Include/nmNum/nmSubWxs/nmReservoirParameterField.h b/Include/nmNum/nmSubWxs/nmReservoirParameterField.h index 8e7a3fe..d1d67a2 100644 --- a/Include/nmNum/nmSubWxs/nmReservoirParameterField.h +++ b/Include/nmNum/nmSubWxs/nmReservoirParameterField.h @@ -70,10 +70,14 @@ public: * @brief 将字段的三个直接控件加入分组网格。 * @param pLayout 所属分组的网格布局。 * @param nRow 字段所在行。 + * @param nColumnOffset 字段起始列偏移。 * @param sError 初始化失败原因。 * @return 参数元数据和单位绑定均成功时返回true。 */ - bool initialize(QGridLayout* pLayout, int nRow, QString& sError); + bool initialize(QGridLayout* pLayout, + int nRow, + int nColumnOffset, + QString& sError); /** @brief 返回编辑会话使用的稳定参数ID。 */ QString parameterId() const; @@ -131,10 +135,13 @@ private: /** @brief 创建数值输入框及单位控件。 */ bool createNumericEditor(QGridLayout* pLayout, int nRow, + int nColumnOffset, QString& sError); /** @brief 创建稳定code枚举下拉框。 */ - void createEnumEditor(QGridLayout* pLayout, int nRow); + void createEnumEditor(QGridLayout* pLayout, + int nRow, + int nColumnOffset); /** @brief 按XML精度格式化无单位或整数参数。 */ QString formatBaseValue(double dValue) const; diff --git a/Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp b/Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp index 6dd421d..d9f8beb 100644 --- a/Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp +++ b/Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp @@ -20,9 +20,11 @@ static const char* const s_pCatalogTranslationMarkers[] = QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Homogeneous"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Dual porosity pseudo steady state"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Fault flow model"), - QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Region flow model"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Boundary type"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Leaky"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Composite limit"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Permeable boundary"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Composite boundary"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Fracture flow model"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Finite conductivity"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Infinite conductivity"), @@ -36,11 +38,11 @@ static const char* const s_pCatalogTranslationMarkers[] = QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Vertical well"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Fractured vertical well"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Multistage fractured horizontal well"), - QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Dual-medium parameters"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Reservoir medium parameters"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Geometry"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Flow properties"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Conductivity properties"), - QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Region properties") + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Boundary properties") }; /** @brief 返回当前语言下的界面文字。 */ @@ -108,19 +110,21 @@ nmReservoirParameterFieldInfo reservoirModelField( return oField; } -/** @brief 创建断层或复合区流动模型字段。 */ +/** @brief 按指定显示文字创建断层或复合区流动模型字段。 */ nmReservoirParameterFieldInfo leakageModelField( const QString& sParameterId, - const char* pLabel) + const char* pLabel, + const char* pLeakyText, + const char* pCompositeText) { nmReservoirParameterFieldInfo oField; oField.m_sParameterId = sParameterId; oField.m_sLabel = editorText(pLabel); oField.m_eEditorType = NM_RESERVOIR_EDITOR_ENUM; oField.m_bUnitEnabled = false; - oField.m_listOptions.append(enumOption("leaky", "Leaky")); + oField.m_listOptions.append(enumOption("leaky", pLeakyText)); oField.m_listOptions.append(enumOption( - "composite_limit", "Composite limit")); + "composite_limit", pCompositeText)); return oField; } @@ -154,6 +158,7 @@ nmReservoirParameterGroupInfo parameterGroup( oGroup.m_nRowSpan = 1; oGroup.m_nColumnSpan = nColumnSpan; oGroup.m_bValueRightAligned = false; + oGroup.m_bFieldsCentered = false; return oGroup; } @@ -535,7 +540,8 @@ nmReservoirParameterCatalog::createObjectInfos( oSnapshot.m_vecRegionMarks[nIndex].getRegionMarkName(); nmReservoirParameterGroupInfo oDual = - parameterGroup("Dual-medium parameters", 0, 0, 2); + parameterGroup("Reservoir medium parameters", 0, 0, 2); + oDual.m_bFieldsCentered = true; oDual.m_listFields << reservoirModelField(prefixed( oInfo.m_sObjectCode, "RM_ReservoirType")) @@ -584,7 +590,9 @@ nmReservoirParameterCatalog::createObjectInfos( oFlow.m_listFields << leakageModelField(prefixed( oInfo.m_sObjectCode, "FT_FlowModel"), - "Fault flow model") + "Fault flow model", + "Leaky", + "Composite limit") << numericField(prefixed( oInfo.m_sObjectCode, "FT_Leakage"), "FT_Leakage"); @@ -659,11 +667,14 @@ nmReservoirParameterCatalog::createObjectInfos( oSnapshot.m_vecRegions[nIndex].getRegoinName(); nmReservoirParameterGroupInfo oRegion = - parameterGroup("Region properties", 0, 0, 2); + parameterGroup("Boundary properties", 0, 0, 2); + oRegion.m_bFieldsCentered = true; oRegion.m_listFields << leakageModelField(prefixed( oInfo.m_sObjectCode, "R_FlowModel"), - "Region flow model") + "Boundary type", + "Permeable boundary", + "Composite boundary") << numericField(prefixed( oInfo.m_sObjectCode, "R_Leakage"), "R_Leakage"); diff --git a/Src/nmNum/nmSubWxs/nmReservoirParameterField.cpp b/Src/nmNum/nmSubWxs/nmReservoirParameterField.cpp index 23a1755..6e80ce8 100644 --- a/Src/nmNum/nmSubWxs/nmReservoirParameterField.cpp +++ b/Src/nmNum/nmSubWxs/nmReservoirParameterField.cpp @@ -64,6 +64,7 @@ nmReservoirParameterField::~nmReservoirParameterField() bool nmReservoirParameterField::initialize(QGridLayout* pLayout, int nRow, + int nColumnOffset, QString& sError) { if (pLayout == nullptr) @@ -75,7 +76,7 @@ bool nmReservoirParameterField::initialize(QGridLayout* pLayout, // 第一步:枚举字段不依赖XML数值定义,直接创建稳定code下拉框。 if (isEnum()) { - createEnumEditor(pLayout, nRow); + createEnumEditor(pLayout, nRow, nColumnOffset); sError.clear(); return true; } @@ -91,7 +92,7 @@ bool nmReservoirParameterField::initialize(QGridLayout* pLayout, } // 第三步:创建原型中的标签、输入框和单位列,不增加字段外框。 - return createNumericEditor(pLayout, nRow, sError); + return createNumericEditor(pLayout, nRow, nColumnOffset, sError); } QString nmReservoirParameterField::parameterId() const @@ -137,6 +138,7 @@ int nmReservoirParameterField::editorHeight() bool nmReservoirParameterField::createNumericEditor( QGridLayout* pLayout, int nRow, + int nColumnOffset, QString& sError) { QWidget* pParentWidget = pLayout->parentWidget(); @@ -153,8 +155,8 @@ bool nmReservoirParameterField::createNumericEditor( m_pLineEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - pLayout->addWidget(m_pLabel, nRow, 0); - pLayout->addWidget(m_pLineEdit, nRow, 1); + pLayout->addWidget(m_pLabel, nRow, nColumnOffset); + pLayout->addWidget(m_pLineEdit, nRow, nColumnOffset + 1); // 有单位参数直接注册到主对话框绑定器;字段只按控件指针读写, // 因此多口井共用同一基础参数ID时也不会发生串值。 @@ -166,7 +168,7 @@ bool nmReservoirParameterField::createNumericEditor( m_pUnitComboBox->setMinimumWidth(unitMinimumWidth()); m_pUnitComboBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - pLayout->addWidget(m_pUnitComboBox, nRow, 2); + pLayout->addWidget(m_pUnitComboBox, nRow, nColumnOffset + 2); if (m_pUnitService == nullptr || !m_pUnitService->bindUnitField( m_pLineEdit, @@ -186,7 +188,7 @@ bool nmReservoirParameterField::createNumericEditor( m_pUnitLabel->setMinimumWidth(unitMinimumWidth()); m_pUnitLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - pLayout->addWidget(m_pUnitLabel, nRow, 2); + pLayout->addWidget(m_pUnitLabel, nRow, nColumnOffset + 2); } updateValidationAppearance(true); @@ -195,7 +197,8 @@ bool nmReservoirParameterField::createNumericEditor( } void nmReservoirParameterField::createEnumEditor(QGridLayout* pLayout, - int nRow) + int nRow, + int nColumnOffset) { QWidget* pParentWidget = pLayout->parentWidget(); m_pLabel = new QLabel(m_oFieldInfo.m_sLabel, pParentWidget); @@ -224,9 +227,9 @@ void nmReservoirParameterField::createEnumEditor(QGridLayout* pLayout, m_pUnitLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - pLayout->addWidget(m_pLabel, nRow, 0); - pLayout->addWidget(m_pValueComboBox, nRow, 1); - pLayout->addWidget(m_pUnitLabel, nRow, 2); + pLayout->addWidget(m_pLabel, nRow, nColumnOffset); + pLayout->addWidget(m_pValueComboBox, nRow, nColumnOffset + 1); + pLayout->addWidget(m_pUnitLabel, nRow, nColumnOffset + 2); } void nmReservoirParameterField::setBaseValue(const QVariant& oValue) diff --git a/Src/nmNum/nmSubWxs/nmReservoirParameterPage.cpp b/Src/nmNum/nmSubWxs/nmReservoirParameterPage.cpp index 3a0f630..b1d2884 100644 --- a/Src/nmNum/nmSubWxs/nmReservoirParameterPage.cpp +++ b/Src/nmNum/nmSubWxs/nmReservoirParameterPage.cpp @@ -234,14 +234,31 @@ bool nmReservoirParameterPage::buildGroup( pFieldLayout->setContentsMargins(8, 15, 8, 10); pFieldLayout->setHorizontalSpacing(6); pFieldLayout->setVerticalSpacing(6); - // 标签列由本组最长标签的自然宽度决定,数值列和单位列按比例使用剩余空间。 - pFieldLayout->setColumnStretch(0, 0); - pFieldLayout->setColumnStretch(1, 8); - pFieldLayout->setColumnStretch(2, 5); + int nFieldColumnOffset = 0; + // 字段较少的通栏分组使用独立的左右弹性列, + // 使参数区域保持居中,输入列仍可随窗口宽度适度伸展。 + if (oGroupInfo.m_bFieldsCentered) + { + nFieldColumnOffset = 1; + pFieldLayout->setColumnStretch(0, 1); + pFieldLayout->setColumnStretch(1, 0); + pFieldLayout->setColumnStretch(2, 1); + pFieldLayout->setColumnStretch(3, 0); + pFieldLayout->setColumnStretch(4, 1); + } + else + { + // 常规分组由最长标签决定标签列宽,数值列和单位列按比例伸展。 + pFieldLayout->setColumnStretch(0, 0); + pFieldLayout->setColumnStretch(1, 8); + pFieldLayout->setColumnStretch(2, 5); + } pFieldLayout->setColumnMinimumWidth( - 1, nmReservoirParameterField::editorMinimumWidth()); + nFieldColumnOffset + 1, + nmReservoirParameterField::editorMinimumWidth()); pFieldLayout->setColumnMinimumWidth( - 2, nmReservoirParameterField::unitMinimumWidth()); + nFieldColumnOffset + 2, + nmReservoirParameterField::unitMinimumWidth()); // 每个字段只把三个直接控件放入此网格,不产生字段外框或子面板。 for (int nFieldIndex = 0; @@ -253,7 +270,10 @@ bool nmReservoirParameterPage::buildGroup( oGroupInfo.m_listFields[nFieldIndex], m_pUnitService, pGroupBox); - if (!pField->initialize(pFieldLayout, nFieldIndex, sError)) + if (!pField->initialize(pFieldLayout, + nFieldIndex, + nFieldColumnOffset, + sError)) { delete pGroupContainer; return false; From 9d742b18e614047698ddc5bcd980db458ec532d8 Mon Sep 17 00:00:00 2001 From: lh <2334563547@qq.com> Date: Mon, 17 Aug 2026 09:33:32 +0800 Subject: [PATCH 07/10] =?UTF-8?q?refactor(nmNum):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=8C=BA=E5=9F=9F=E5=8F=82=E6=95=B0=E7=95=8C=E9=9D=A2=E5=B9=B6?= =?UTF-8?q?=E6=8E=A5=E5=85=A5=E7=B3=BB=E7=BB=9F=E5=B8=AE=E5=8A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Include/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.h | 2 +- Src/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.cpp | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Include/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.h b/Include/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.h index c76658d..32fed00 100644 --- a/Include/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.h +++ b/Include/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.h @@ -81,7 +81,7 @@ private slots: /** @brief 根据各页面状态更新确定按钮。 */ void slotPageValidityChanged(bool bValid); - /** @brief 进入当前界面的上下文帮助模式。 */ + /** @brief 打开系统帮助文档。 */ void slotHelp(); private: diff --git a/Src/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.cpp b/Src/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.cpp index baee7d4..2beb682 100644 --- a/Src/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.cpp +++ b/Src/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.cpp @@ -22,7 +22,6 @@ #include #include #include -#include nmWxReservoirPropertiesEditor::nmWxReservoirPropertiesEditor( nmIReservoirPropertiesDataSource* pDataSource, @@ -434,8 +433,8 @@ void nmWxReservoirPropertiesEditor::slotPageValidityChanged(bool bValid) void nmWxReservoirPropertiesEditor::slotHelp() { - // 顶部和底部帮助命令共用Qt上下文帮助;字段说明和范围来自XML。 - QWhatsThis::enterWhatsThisMode(); + // 顶部和底部帮助命令统一打开系统帮助文档。 + ZxBaseUtil::startHelp(); } bool nmWxReservoirPropertiesEditor::validateAllPages() From dffbe9da7a1d3581bbe27f14c660d1c5bac36971 Mon Sep 17 00:00:00 2001 From: lh <2334563547@qq.com> Date: Mon, 17 Aug 2026 10:25:34 +0800 Subject: [PATCH 08/10] =?UTF-8?q?feat(nmNum):=20=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E5=82=A8=E5=B1=82=E5=8F=82=E6=95=B0=E8=BE=93=E5=85=A5=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 使用参数中文别名和参数 ID 生成输入框悬浮提示 - 在悬浮提示中显示当前单位对应的有效范围 - 参数校验失败时将输入文字和提示文字标红 - 校验恢复正常后还原输入框原始文字颜色 - 使用调色板更新文字颜色,保留 Qt 原生输入框边框和右键菜单 --- .../nmSubWxs/nmReservoirParameterField.h | 2 + .../nmSubWxs/nmReservoirParameterField.cpp | 44 +++++++++++++++++-- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/Include/nmNum/nmSubWxs/nmReservoirParameterField.h b/Include/nmNum/nmSubWxs/nmReservoirParameterField.h index d1d67a2..7669d9f 100644 --- a/Include/nmNum/nmSubWxs/nmReservoirParameterField.h +++ b/Include/nmNum/nmSubWxs/nmReservoirParameterField.h @@ -3,6 +3,7 @@ #include "nmSubWxs_global.h" #include "nmReservoirParameterCatalog.h" +#include #include #include @@ -157,6 +158,7 @@ private: QComboBox* m_pValueComboBox; ///< 枚举值下拉框。 QComboBox* m_pUnitComboBox; ///< 可换算单位下拉框。 QLabel* m_pUnitLabel; ///< 无单位字段的空白对齐占位。 + QColor m_clrNormalText; ///< 输入框默认文字颜色。 bool m_bVisible; ///< 参数行是否参与编辑。 bool m_bUpdating; ///< 程序写值时阻止业务信号。 }; diff --git a/Src/nmNum/nmSubWxs/nmReservoirParameterField.cpp b/Src/nmNum/nmSubWxs/nmReservoirParameterField.cpp index 6e80ce8..e82e0ba 100644 --- a/Src/nmNum/nmSubWxs/nmReservoirParameterField.cpp +++ b/Src/nmNum/nmSubWxs/nmReservoirParameterField.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include namespace @@ -31,6 +32,24 @@ QString fieldText(const char* pText) "nmReservoirParameterField", pText); } +/** @brief 根据有效状态生成悬浮提示文字。 */ +QString validationToolTip(const QString& sText, bool bValid) +{ + if (bValid) + { + return sText; + } + + QString sEscaped = sText; + sEscaped.replace("&", "&"); + sEscaped.replace("<", "<"); + sEscaped.replace(">", ">"); + sEscaped.replace("\"", """); + sEscaped.replace("\n", "
"); + return "" + + sEscaped + ""; +} + } nmReservoirParameterField::nmReservoirParameterField( @@ -46,6 +65,7 @@ nmReservoirParameterField::nmReservoirParameterField( m_pValueComboBox(nullptr), m_pUnitComboBox(nullptr), m_pUnitLabel(nullptr), + m_clrNormalText(), m_bVisible(true), m_bUpdating(false) { @@ -149,6 +169,7 @@ bool nmReservoirParameterField::createNumericEditor( QSizePolicy::Fixed); m_pLineEdit = new QLineEdit(pParentWidget); + m_clrNormalText = m_pLineEdit->palette().color(QPalette::Text); m_pLineEdit->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_pLineEdit->setFixedHeight(editorHeight()); m_pLineEdit->setMinimumWidth(editorMinimumWidth()); @@ -399,12 +420,17 @@ QString nmReservoirParameterField::formatBaseValue(double dValue) const void nmReservoirParameterField::updateValidationAppearance(bool bValid) { - Q_UNUSED(bValid); if (m_pLineEdit == nullptr || m_pParameter == nullptr) { return; } + // 只修改文字色,避免Qt 4.8样式表绘制覆盖原生输入框边框。 + QPalette oPalette = m_pLineEdit->palette(); + oPalette.setColor(QPalette::Text, + bValid ? m_clrNormalText : QColor(Qt::red)); + m_pLineEdit->setPalette(oPalette); + QString sCurrentUnit; iUnitGroup* pUnitGroup = nullptr; if (m_pUnitComboBox != nullptr && m_pUnitService != nullptr) @@ -414,7 +440,19 @@ void nmReservoirParameterField::updateValidationAppearance(bool bValid) } QString sRange = iParaItemCtrl::getScaleStrOf( m_pParameter, sCurrentUnit, pUnitGroup); - QString sHelp = m_pParameter->m_sDesc; + // 参数别名来自当前语言XML,稳定ID便于定位参数定义。 + QString sHelp = m_pParameter->m_sAlias; + if (!m_pParameter->m_sName.isEmpty()) + { + if (!sHelp.isEmpty()) + { + sHelp += "[" + m_pParameter->m_sName + "]"; + } + else + { + sHelp = m_pParameter->m_sName; + } + } if (!sRange.isEmpty()) { if (!sHelp.isEmpty()) @@ -423,7 +461,7 @@ void nmReservoirParameterField::updateValidationAppearance(bool bValid) } sHelp += sRange; } - m_pLineEdit->setToolTip(sHelp); + m_pLineEdit->setToolTip(validationToolTip(sHelp, bValid)); m_pLineEdit->setWhatsThis(sHelp); if (m_pLabel != nullptr) { From 9aa97ec161905202bf6125ad8a450381ca532f42 Mon Sep 17 00:00:00 2001 From: lh <2334563547@qq.com> Date: Mon, 17 Aug 2026 10:32:21 +0800 Subject: [PATCH 09/10] =?UTF-8?q?style(nmNum):=20=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=88=86=E7=BB=84=E8=BE=93=E5=85=A5=E5=80=BC?= =?UTF-8?q?=E5=AF=B9=E9=BD=90=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 井参数“位置与井筒”分组输入值改为右对齐 - 断层和裂缝“几何参数”分组输入值改为右对齐 - 保持右侧分组及通栏居中分组原有对齐方式 --- Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp b/Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp index d9f8beb..dc8265d 100644 --- a/Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp +++ b/Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp @@ -189,6 +189,7 @@ void createWellGroups(nmReservoirPropertyObjectInfo& oInfo, { nmReservoirParameterGroupInfo oPosition = parameterGroup("Position and wellbore", 0, 0, 1); + oPosition.m_bValueRightAligned = true; oPosition.m_listFields << numericField(prefixed(oInfo.m_sObjectCode, "W_X"), "W_X") << numericField(prefixed(oInfo.m_sObjectCode, "W_Y"), "W_Y") @@ -575,6 +576,7 @@ nmReservoirParameterCatalog::createObjectInfos( nmReservoirParameterGroupInfo oGeometry = parameterGroup("Geometry", 0, 0, 1); + oGeometry.m_bValueRightAligned = true; oGeometry.m_listFields << numericField(prefixed( oInfo.m_sObjectCode, "FT_X0"), "FT_X0") @@ -626,6 +628,7 @@ nmReservoirParameterCatalog::createObjectInfos( nmReservoirParameterGroupInfo oGeometry = parameterGroup("Geometry", 0, 0, 1); + oGeometry.m_bValueRightAligned = true; oGeometry.m_listFields << numericField(prefixed( oInfo.m_sObjectCode, "F_X0"), "F_X0") From dbe5ac328f31ff5cca654993cc19da8fcb619962 Mon Sep 17 00:00:00 2001 From: lh <2334563547@qq.com> Date: Mon, 17 Aug 2026 11:40:13 +0800 Subject: [PATCH 10/10] =?UTF-8?q?feat(nmNum):=20=E6=8C=89=E6=B1=82?= =?UTF-8?q?=E8=A7=A3=E6=A8=A1=E5=9E=8B=E4=BC=98=E5=8C=96=E5=82=A8=E5=B1=82?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E7=BC=96=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 根据求解器模型动态显示 PVT、压缩系数和饱和度参数 - 隐藏储层类型和 KxKy,清理无效的单值参数定义 - 补充油水饱和度之和校验及关联错误提示 - 优化对话框初始高度和参数分组名称 - 更新中英文参数 XML 及中文翻译资源 --- Bin/Config/Common/ModelParaDefinesNM_cn.dat | 2 +- Bin/Config/Common/ModelParaDefinesNM_en.dat | 2 +- Bin/Config/Lang/cn/nmNum_cn.qm | Bin 112710 -> 113137 bytes Bin/Config/Lang/cn/nmNum_cn.ts | 8 +- Bin/XmlFiles/ModelParaDefinesNM_cn.xml | 4 +- Bin/XmlFiles/ModelParaDefinesNM_en.xml | 4 +- .../nmSubWxs/nmReservoirParameterField.h | 4 + .../nmReservoirPropertiesDataSource.h | 1 + .../nmSubWxs/nmReservoirParameterCatalog.cpp | 194 ++++++++++++++++-- .../nmSubWxs/nmReservoirParameterField.cpp | 17 ++ .../nmSubWxs/nmReservoirParameterPage.cpp | 41 +++- .../nmReservoirPropertiesDataSource.cpp | 5 +- .../nmWxReservoirPropertiesEditor.cpp | 2 +- 13 files changed, 257 insertions(+), 27 deletions(-) diff --git a/Bin/Config/Common/ModelParaDefinesNM_cn.dat b/Bin/Config/Common/ModelParaDefinesNM_cn.dat index f5f319c..c7e0160 100644 --- a/Bin/Config/Common/ModelParaDefinesNM_cn.dat +++ b/Bin/Config/Common/ModelParaDefinesNM_cn.dat @@ -1 +1 @@ -PD94bWwgdmVycup_mpac2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSoqKioqKioqKioqKiwzyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gICAg5pys5paH5qGj55qE55uu55qE5piv5bu656uLV1RBSeaVsOWAvOinoyhOTSnmqKHlnZfnmoTlj4LmlbDlrprkuYkgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIOS7heWMheWQq1BFQknmsYLop6PlmajmiYDpnIDnmoTlgqjlsYLjgIHkupXlkozlh6DkvZXlr7nosaHlj4LmlbAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgRGF0ZTogMjAyNjA2MTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPCEtLQ0KICAgIOWPguaVsOiMg+WbtO+8mlBFQknmsYLop6PlmajmiYDpnIDnmoTlgqjlsYLjgIHkupXlkozlh6DkvZXlr7nosaHlj4LmlbANCiAgICDlr7nlupQgSFhfTldUTV9NT0RFTF9JTlBVVCDnu5PmnoTkvZPlrZfmrrUNCiAgICDpgJrov4cgX3BhcmFIZWxwZXItPmxvYWRQYXJhRGVmaW5lcygpIOWKoOi9ve+8jHNLZXkg5qCH6K+G5Li6IHNfTm1fU2VyaWUNCi0tPg0KDQo8Um9vdD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IuWCqOWxguWPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9ImgiICAgQWxpYXM9IuWCqOWxguWOmuW6piIgICAgICAgVW5pdD0ibSIgICAgIERlZmF1bHQ9IjEwIiAgICBNYXg9IjEwMDAwIiAgTWluPSIxZS0wNSIgIERpZ2l0PSI2IiAgRGVzYz0icmVzZXJ2b2lyIHRoaWNrbmVzcyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUGkiICBBbGlhcz0i5Yid5aeL5Y6L5YqbIiAgICAgICBVbml0PSJNUGEiICAgRGVmYXVsdD0iNDAiICAgIE1heD0iNTAwIiAgICBNaW49IjAuMSIgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIGZvcm1hdGlvbiBwcmVzc3VyZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iSyIgICBBbGlhcz0i5riX6YCP546HIiAgICAgICAgIFVuaXQ9Im1EIiAgICBEZWZhdWx0PSIyNSIgICAgTWF4PSIxMDAwMCIgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InBlcm1lYWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0icGhpIiBBbGlhcz0i5a2U6ZqZ5bqmIiAgICAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxIiAgICAgIE1pbj0iMWUtMDUiICBEaWdpdD0iNiIgIERlc2M9InBvcm9zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCbyIgIEFsaWFzPSLmsrnkvZPnp6/ns7vmlbAiICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMS4yIiAgIE1heD0iMTAiICAgICBNaW49IjFlLTA2IiAgRGlnaXQ9IjYiICBEZXNjPSJvaWwgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9Ik1pdW8iIEFsaWFzPSLmsrnnm7jpu4/luqYiICAgICAgVW5pdD0ibVBhLnMiIERlZmF1bHQ9IjAuNSIgICBNYXg9IjEwMDAwIiAgTWluPSIxZS0wNiIgIERpZ2l0PSI2IiAgRGVzYz0ib2lsIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iS3hLeSIgQWxpYXM9IuawtOW5s+a4l+mAj+eOh+avlCIgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIxIiAgICAgTWF4PSIxMDAwIiAgIE1pbj0iMWUtMDYiICBEaWdpdD0iNiIgIERlc2M9Imhvcml6b250YWwgcGVybWVhYmlsaXR5IHJhdGlvIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJDdGkiIEFsaWFzPSLnu7zlkIjljovnvKnns7vmlbAiICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAxIiBNYXg9IjEwIiAgICAgTWluPSIxZS0zMCIgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0idG90YWwgY29tcHJlc3NpYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJDZiIgIEFsaWFzPSLlsqnnn7PljovnvKnns7vmlbAiICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAwMSIgTWF4PSIxMCIgICAgTWluPSIxZS0zMCIgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icm9jayBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlNvaSIgQWxpYXM9IuWIneWni+WQq+ayuemlseWSjOW6piIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuOCIgICBNYXg9IjEiICAgICAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0iaW5pdGlhbCBvaWwgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iU3dpIiBBbGlhcz0i5Yid5aeL5ZCr5rC06aWx5ZKM5bqmIiBVbml0PSIiICAgICAgRGVmYXVsdD0iMC4yIiAgIE1heD0iMSIgICAgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIHdhdGVyIHNhdHVyYXRpb24iIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i5LqV5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19YIiAgICBBbGlhcz0iWOWdkOaghyIgICAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgICAgIE1heD0iMTAwMDAiICBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiICBEZXNjPSJ3ZWxsIFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19ZIiAgICBBbGlhcz0iWeWdkOaghyIgICAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgICAgIE1heD0iMTAwMDAiICBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiICBEZXNjPSJ3ZWxsIFkgY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19SdyIgICBBbGlhcz0i5LqV562S5Y2K5b6EIiAgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxMCIgICAgIE1pbj0iMC4wMDEiICBEaWdpdD0iNiIgIERlc2M9IndlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19Ta2luIiBBbGlhcz0i6KGo55qu57O75pWwIiAgICBVbml0PSIiICAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwIiAgIE1pbj0iLTEwMCIgICBEaWdpdD0iNiIgIERlc2M9InNraW4gZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0MiICAgIEFsaWFzPSLkupXnrZLlgqjpm4bns7vmlbAiIFVuaXQ9Im1eMy9NUGEiIERlZmF1bHQ9IjAiIE1heD0iMTAwMCIgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJ3ZWxsYm9yZSBzdG9yYWdlIGNvZWZmaWNpZW50IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1dlbGxMZW5ndGgiICAgICAgICAgQWxpYXM9IuawtOW5s+autemVv+W6piIgICBVbml0PSJtIiAgICBEZWZhdWx0PSIyMDAiICBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iNiIgRGVzYz0iaG9yaXpvbnRhbCB3ZWxsIGxlbmd0aCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19EcmFpbkFuZ2xlIiAgICAgICAgIEFsaWFzPSLmjpLmsLTop5LluqYiICAgICBVbml0PSJkZWciICBEZWZhdWx0PSIwIiAgICBNYXg9IjM2MCIgICBNaW49Ii0zNjAiICBEaWdpdD0iNiIgRGVzYz0iaG9yaXpvbnRhbCB3ZWxsIGRyYWluIGFuZ2xlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX051bWJlck9mRnJhY3R1cmVzIiAgQWxpYXM9Iuijgue8neaVsOmHjyIgICAgIFVuaXQ9IiIgICAgIERlZmF1bHQ9IjE1IiAgIE1heD0iMTAwMCIgIE1pbj0iMiIgICAgIERpZ2l0PSIwIiBEZXNjPSJudW1iZXIgb2YgZnJhY3R1cmVzIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0ZyYWN0dXJlSGFsZkxlbmd0aCIgQWxpYXM9Iuijgue8neWNiumVvyIgICAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjUwIiAgIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBoYWxmLWxlbmd0aCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19GcmFjdHVyZUFuZ2xlIiAgICAgIEFsaWFzPSLoo4LnvJ3op5LluqYiICAgICBVbml0PSJkZWciICBEZWZhdWx0PSI5MCIgICBNYXg9IjM2MCIgICBNaW49Ii0zNjAiICBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgYW5nbGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfRGZjIiAgICAgICAgICAgICAgICBBbGlhcz0i6KOC57yd5a+85rWB6IO95YqbIiBVbml0PSJtRC5tIiBEZWZhdWx0PSIxMDAwIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgY29uZHVjdGl2aXR5IiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IueLrOeri+ijgue8neWPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWDAiIEFsaWFzPSLotbfngrlYMCIgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIHN0YXJ0IFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9ZMCIgQWxpYXM9Iui1t+eCuVkwIiAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgc3RhcnQgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX1gxIiBBbGlhcz0i57uI54K5WDEiICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBlbmQgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX1kxIiBBbGlhcz0i57uI54K5WTEiICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBlbmQgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX0ZDIiBBbGlhcz0i5a+85rWB6IO95YqbIiBVbml0PSJtRC5tIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICAgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGNvbmR1Y3Rpdml0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9EVyIgQWxpYXM9Iuijgue8neWuveW6puWPguaVsCIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSB3aWR0aCBwYXJhbWV0ZXIiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i5pat5bGC5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWDAiIEFsaWFzPSLotbfngrlYMCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBzdGFydCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1kwIiBBbGlhcz0i6LW354K5WTAiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZmF1bHQgc3RhcnQgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9YMSIgQWxpYXM9Iue7iOeCuVgxIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IGVuZCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1kxIiBBbGlhcz0i57uI54K5WTEiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZmF1bHQgZW5kIFkgY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfTGVha2FnZSIgQWxpYXM9IuazhOa8j+ezu+aVsCIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBsZWFrYWdlIGNvZWZmaWNpZW50IiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IuefqeW9oui+ueeVjOWPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJSX1hNaW4iIEFsaWFzPSLlt6bovrnnlYxYIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InJlY3RhbmdsZSBib3VuZGFyeSBtaW5pbXVtIFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJSX1lNaW4iIEFsaWFzPSLkuIvovrnnlYxZIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InJlY3RhbmdsZSBib3VuZGFyeSBtaW5pbXVtIFkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJSX1hNYXgiIEFsaWFzPSLlj7PovrnnlYxYIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InJlY3RhbmdsZSBib3VuZGFyeSBtYXhpbXVtIFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJSX1lNYXgiIEFsaWFzPSLkuIrovrnnlYxZIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InJlY3RhbmdsZSBib3VuZGFyeSBtYXhpbXVtIFkiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i5ZyG5b2i6L6555WM5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQkNfQ2VudGVyWCIgQWxpYXM9IuWchuW/g1giIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iY2lyY2xlIGJvdW5kYXJ5IGNlbnRlciBYIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCQ19DZW50ZXJZIiBBbGlhcz0i5ZyG5b+DWSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJjaXJjbGUgYm91bmRhcnkgY2VudGVyIFkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJDX1JhZGl1cyIgIEFsaWFzPSLljYrlvoQiICBVbml0PSJtIiBEZWZhdWx0PSIxIiBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiAgRGlnaXQ9IjYiIERlc2M9ImNpcmNsZSBib3VuZGFyeSByYWRpdXMiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i5aSa6L655b2i6L6555WM54K55Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlBfWCIgQWxpYXM9IljlnZDmoIciIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icG9seWdvbiBib3VuZGFyeSB2ZXJ0ZXggWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlBfWSIgQWxpYXM9IlnlnZDmoIciIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icG9seWdvbiBib3VuZGFyeSB2ZXJ0ZXggWSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLljLrln5/lj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSX0xlYWthZ2UiIEFsaWFzPSLms4TpnLLns7vmlbAiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiBEaWdpdD0iNiIgRGVzYz0icmVnaW9uIGxlYWthZ2UgY29lZmZpY2llbnQiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i5qCH6K6w5Yy65Z+f5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUk1fQ29tVyIgICAgICAgQWxpYXM9IuWCqOiDveavlCIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjEiICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiBEZXNjPSJzdG9yYWdlIHJhdGlvIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSTV9Db21LciIgICAgICBBbGlhcz0i5rWB5bqm5q+UIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMTAwMCIgTWluPSIwLjAwMSIgRGlnaXQ9IjYiIERlc2M9Im1vYmlsaXR5IHJhdGlvIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSTV9OZXRUb0dyb3NzIiBBbGlhcz0i5YeA5q+b5q+UIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMSIgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiIERlc2M9Im5ldC10by1ncm9zcyIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPCEtLSDnu5PmnpzpnaLmnb/lj4LmlbDlj6rnlLEgcmVidWlsZFJlc3VsdFBhcmFzKCkg6YCJ5oup77yM5LiN5Lya5Ye6546w5Zyo5bem5L6n6Z2i5p2/5Lit44CCIC0tPg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9Iue7k+aenOWPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9XX1J3IiAgIEFsaWFzPSLkupXlvoQiICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwLjEiICAgIE1heD0iMTAiICAgIE1pbj0iMC4wMDEiICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3ZWxsYm9yZSByYWRpdXMiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9XX0RmYyIgIEFsaWFzPSLoo4LnvJ3lr7zmtYHog73lipsiIFVuaXQ9Im1ELm0iICAgRGVmYXVsdD0iMTAwMCIgICBNYXg9IjFlKzMwIiBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgZnJhY3R1cmUgY29uZHVjdGl2aXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfV19Ta2luIiBBbGlhcz0i6KGo55qu57O75pWwIiAgICAgVW5pdD0iIiAgICAgICBEZWZhdWx0PSIwIiAgICAgIE1heD0iMTAwMCIgIE1pbj0iLTEwMCIgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBza2luIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfQyIgICAgQWxpYXM9IuS6leetkuWCqOmbhuezu+aVsCIgVW5pdD0ibV4zL01QYSIgRGVmYXVsdD0iMCIgICAgICBNYXg9IjEwMDAiICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgd2VsbGJvcmUgc3RvcmFnZSBjb2VmZmljaWVudCIgLz4NCg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfUGkiICBBbGlhcz0i5Yid5aeL5Zyw5bGC5Y6L5YqbIiAgIFVuaXQ9Ik1QYSIgICBEZWZhdWx0PSI0MCIgICAgIE1heD0iNTAwIiAgIE1pbj0iMC4xIiAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGluaXRpYWwgZm9ybWF0aW9uIHByZXNzdXJlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfSyIgICBBbGlhcz0i5riX6YCP546HIiAgICAgICAgIFVuaXQ9Im1EIiAgICBEZWZhdWx0PSIyNSIgICAgIE1heD0iMTAwMDAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHBlcm1lYWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X2giICAgQWxpYXM9IuWCqOWxguWOmuW6piIgICAgICAgVW5pdD0ibSIgICAgIERlZmF1bHQ9IjEwIiAgICAgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgcmVzZXJ2b2lyIHRoaWNrbmVzcyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X3BoaSIgQWxpYXM9IuWtlOmameW6piIgICAgICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMC4xIiAgICBNYXg9IjEiICAgICBNaW49IjFlLTA1IiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBwb3Jvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0N0aSIgQWxpYXM9Iue7vOWQiOWOi+e8qeezu+aVsCIgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDEiICBNYXg9IjEwIiAgICBNaW49IjFlLTMwIiBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCB0b3RhbCBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DZiIgIEFsaWFzPSLlsqnnn7PljovnvKnns7vmlbAiICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAwMSIgTWF4PSIxMCIgICAgTWluPSIxZS0zMCIgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgcm9jayBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9Tb2kiIEFsaWFzPSLliJ3lp4vlkKvmsrnppbHlkozluqYiIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjgiICAgIE1heD0iMSIgICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGluaXRpYWwgb2lsIHNhdHVyYXRpb24iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9TZ2kiIEFsaWFzPSLliJ3lp4vlkKvmsJTppbHlkozluqYiIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwIiAgICAgIE1heD0iMSIgICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGluaXRpYWwgZ2FzIHNhdHVyYXRpb24iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9Td2kiIEFsaWFzPSLliJ3lp4vlkKvmsLTppbHlkozluqYiIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjIiICAgIE1heD0iMSIgICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGluaXRpYWwgd2F0ZXIgc2F0dXJhdGlvbiIgLz4NCg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQm8iICAgQWxpYXM9IuayueS9k+enr+ezu+aVsCIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IG9pbCBmb3JtYXRpb24gdm9sdW1lIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X01pdW8iIEFsaWFzPSLmsrnnm7jpu4/luqYiICAgVW5pdD0ibVBhLnMiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMWUtMzAiIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IG9pbCB2aXNjb3NpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DbyIgICBBbGlhcz0i5rK55Y6L57yp57O75pWwIiBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCBvaWwgY29tcHJlc3NpYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQnciICAgQWxpYXM9IuawtOS9k+enr+ezu+aVsCIgVW5pdD0ibTMvbTMiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdhdGVyIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1dyIgQWxpYXM9IuawtOebuOm7j+W6piIgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgd2F0ZXIgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ3ciICAgQWxpYXM9IuawtOWOi+e8qeezu+aVsCIgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgd2F0ZXIgY29tcHJlc3NpYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQmciICAgQWxpYXM9IuawlOS9k+enr+ezu+aVsCIgVW5pdD0ibTMvbTMiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGdhcyBmb3JtYXRpb24gdm9sdW1lIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X01pdWciIEFsaWFzPSLmsJTnm7jpu4/luqYiICAgVW5pdD0ibVBhLnMiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMWUtMzAiIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGdhcyB2aXNjb3NpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DZyIgICBBbGlhcz0i5rCU5Y6L57yp57O75pWwIiBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCBnYXMgY29tcHJlc3NpYmlsaXR5IiAvPg0KICA8L1BhcmFHcm91cD4NCg0KPC9Sb290Pg0K \ No newline at end of file +PD94bWwgdmVycup_mpac2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSoqKioqKioqKioqKiwzyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gICAg5pys5paH5qGj55qE55uu55qE5piv5bu656uLV1RBSeaVsOWAvOinoyhOTSnmqKHlnZfnmoTlj4LmlbDlrprkuYkgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIOS7heWMheWQq1BFQknmsYLop6PlmajmiYDpnIDnmoTlgqjlsYLjgIHkupXlkozlh6DkvZXlr7nosaHlj4LmlbAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgRGF0ZTogMjAyNjA2MTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPCEtLQ0KICAgIOWPguaVsOiMg+WbtO+8mlBFQknmsYLop6PlmajmiYDpnIDnmoTlgqjlsYLjgIHkupXlkozlh6DkvZXlr7nosaHlj4LmlbANCiAgICDlr7nlupQgSFhfTldUTV9NT0RFTF9JTlBVVCDnu5PmnoTkvZPlrZfmrrUNCiAgICDpgJrov4cgX3BhcmFIZWxwZXItPmxvYWRQYXJhRGVmaW5lcygpIOWKoOi9ve+8jHNLZXkg5qCH6K+G5Li6IHNfTm1fU2VyaWUNCi0tPg0KDQo8Um9vdD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IuWCqOWxguWPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9ImgiICAgQWxpYXM9IuWCqOWxguWOmuW6piIgICAgICAgVW5pdD0ibSIgICAgIERlZmF1bHQ9IjEwIiAgICBNYXg9IjEwMDAwIiAgTWluPSIxZS0wNSIgIERpZ2l0PSI2IiAgRGVzYz0icmVzZXJ2b2lyIHRoaWNrbmVzcyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUGkiICBBbGlhcz0i5Yid5aeL5Y6L5YqbIiAgICAgICBVbml0PSJNUGEiICAgRGVmYXVsdD0iNDAiICAgIE1heD0iNTAwIiAgICBNaW49IjAuMSIgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIGZvcm1hdGlvbiBwcmVzc3VyZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iSyIgICBBbGlhcz0i5riX6YCP546HIiAgICAgICAgIFVuaXQ9Im1EIiAgICBEZWZhdWx0PSIyNSIgICAgTWF4PSIxMDAwMCIgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InBlcm1lYWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0icGhpIiBBbGlhcz0i5a2U6ZqZ5bqmIiAgICAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxIiAgICAgIE1pbj0iMWUtMDUiICBEaWdpdD0iNiIgIERlc2M9InBvcm9zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCbyIgIEFsaWFzPSLmsrnkvZPnp6/ns7vmlbAiICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMS4yIiAgIE1heD0iMTAiICAgICBNaW49IjFlLTA2IiAgRGlnaXQ9IjYiICBEZXNjPSJvaWwgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9Ik1pdW8iIEFsaWFzPSLmsrnnm7jpu4/luqYiICAgICAgVW5pdD0ibVBhLnMiIERlZmF1bHQ9IjAuNSIgICBNYXg9IjEwMDAwIiAgTWluPSIxZS0wNiIgIERpZ2l0PSI2IiAgRGVzYz0ib2lsIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQnciICBBbGlhcz0i5rC05L2T56ev57O75pWwIiAgICAgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjEiICAgICBNYXg9IjEwIiAgICAgTWluPSIxZS0wNiIgIERpZ2l0PSI2IiAgRGVzYz0id2F0ZXIgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9Ik1pdXciIEFsaWFzPSLmsLTnm7jpu4/luqYiICAgICAgVW5pdD0ibVBhLnMiIERlZmF1bHQ9IjEiICAgICBNYXg9IjEwMDAwIiAgTWluPSIxZS0wNiIgIERpZ2l0PSI2IiAgRGVzYz0id2F0ZXIgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJDdGkiIEFsaWFzPSLnu7zlkIjljovnvKnns7vmlbAiICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAxIiBNYXg9IjEwIiAgICAgTWluPSIxZS0zMCIgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0idG90YWwgY29tcHJlc3NpYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJDZiIgIEFsaWFzPSLlsqnnn7PljovnvKnns7vmlbAiICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAwMSIgTWF4PSIxMCIgICAgTWluPSIxZS0zMCIgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icm9jayBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlNvaSIgQWxpYXM9IuWIneWni+WQq+ayuemlseWSjOW6piIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuOCIgICBNYXg9IjEiICAgICAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0iaW5pdGlhbCBvaWwgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iU2dpIiBBbGlhcz0i5Yid5aeL5ZCr5rCU6aWx5ZKM5bqmIiBVbml0PSIiICAgICAgRGVmYXVsdD0iMCIgICAgIE1heD0iMSIgICAgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIGdhcyBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJTd2kiIEFsaWFzPSLliJ3lp4vlkKvmsLTppbHlkozluqYiIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjIiICAgTWF4PSIxIiAgICAgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9ImluaXRpYWwgd2F0ZXIgc2F0dXJhdGlvbiIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLkupXlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1giICAgIEFsaWFzPSJY5Z2Q5qCHIiAgICAgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1kiICAgIEFsaWFzPSJZ5Z2Q5qCHIiAgICAgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1J3IiAgIEFsaWFzPSLkupXnrZLljYrlvoQiICAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAuMSIgICBNYXg9IjEwIiAgICAgTWluPSIwLjAwMSIgIERpZ2l0PSI2IiAgRGVzYz0id2VsbGJvcmUgcmFkaXVzIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1NraW4iIEFsaWFzPSLooajnmq7ns7vmlbAiICAgIFVuaXQ9IiIgICAgIERlZmF1bHQ9IjAiICAgICBNYXg9IjEwMDAiICAgTWluPSItMTAwIiAgIERpZ2l0PSI2IiAgRGVzYz0ic2tpbiBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfQyIgICAgQWxpYXM9IuS6leetkuWCqOmbhuezu+aVsCIgVW5pdD0ibV4zL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwIiAgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9IndlbGxib3JlIHN0b3JhZ2UgY29lZmZpY2llbnQiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfV2VsbExlbmd0aCIgICAgICAgICBBbGlhcz0i5rC05bmz5q616ZW/5bqmIiAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjIwMCIgIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiBEZXNjPSJob3Jpem9udGFsIHdlbGwgbGVuZ3RoIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0RyYWluQW5nbGUiICAgICAgICAgQWxpYXM9IuaOkuawtOinkuW6piIgICAgIFVuaXQ9ImRlZyIgIERlZmF1bHQ9IjAiICAgIE1heD0iMzYwIiAgIE1pbj0iLTM2MCIgIERpZ2l0PSI2IiBEZXNjPSJob3Jpem9udGFsIHdlbGwgZHJhaW4gYW5nbGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfTnVtYmVyT2ZGcmFjdHVyZXMiICBBbGlhcz0i6KOC57yd5pWw6YePIiAgICAgVW5pdD0iIiAgICAgRGVmYXVsdD0iMTUiICAgTWF4PSIxMDAwIiAgTWluPSIyIiAgICAgRGlnaXQ9IjAiIERlc2M9Im51bWJlciBvZiBmcmFjdHVyZXMiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfRnJhY3R1cmVIYWxmTGVuZ3RoIiBBbGlhcz0i6KOC57yd5Y2K6ZW/IiAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iNTAiICAgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGhhbGYtbGVuZ3RoIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0ZyYWN0dXJlQW5nbGUiICAgICAgQWxpYXM9Iuijgue8neinkuW6piIgICAgIFVuaXQ9ImRlZyIgIERlZmF1bHQ9IjkwIiAgIE1heD0iMzYwIiAgIE1pbj0iLTM2MCIgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBhbmdsZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19EZmMiICAgICAgICAgICAgICAgIEFsaWFzPSLoo4LnvJ3lr7zmtYHog73lipsiIFVuaXQ9Im1ELm0iIERlZmF1bHQ9IjEwMDAiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBjb25kdWN0aXZpdHkiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i54us56uL6KOC57yd5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9YMCIgQWxpYXM9Iui1t+eCuVgwIiAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgc3RhcnQgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX1kwIiBBbGlhcz0i6LW354K5WTAiICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBzdGFydCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWDEiIEFsaWFzPSLnu4jngrlYMSIgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGVuZCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWTEiIEFsaWFzPSLnu4jngrlZMSIgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGVuZCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfRkMiIEFsaWFzPSLlr7zmtYHog73lipsiIFVuaXQ9Im1ELm0iIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgY29uZHVjdGl2aXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX0RXIiBBbGlhcz0i6KOC57yd5a695bqm5Y+C5pWwIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIHdpZHRoIHBhcmFtZXRlciIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLmlq3lsYLlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9YMCIgQWxpYXM9Iui1t+eCuVgwIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IHN0YXJ0IFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWTAiIEFsaWFzPSLotbfngrlZMCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBzdGFydCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1gxIiBBbGlhcz0i57uI54K5WDEiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZmF1bHQgZW5kIFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWTEiIEFsaWFzPSLnu4jngrlZMSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBlbmQgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9MZWFrYWdlIiBBbGlhcz0i5rOE5ryP57O75pWwIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IGxlYWthZ2UgY29lZmZpY2llbnQiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i55+p5b2i6L6555WM5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWE1pbiIgQWxpYXM9IuW3pui+ueeVjFgiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1pbmltdW0gWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWU1pbiIgQWxpYXM9IuS4i+i+ueeVjFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1pbmltdW0gWSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWE1heCIgQWxpYXM9IuWPs+i+ueeVjFgiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1heGltdW0gWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWU1heCIgQWxpYXM9IuS4iui+ueeVjFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1heGltdW0gWSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLlnIblvaLovrnnlYzlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCQ19DZW50ZXJYIiBBbGlhcz0i5ZyG5b+DWCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJjaXJjbGUgYm91bmRhcnkgY2VudGVyIFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJDX0NlbnRlclkiIEFsaWFzPSLlnIblv4NZIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImNpcmNsZSBib3VuZGFyeSBjZW50ZXIgWSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQkNfUmFkaXVzIiAgQWxpYXM9IuWNiuW+hCIgIFVuaXQ9Im0iIERlZmF1bHQ9IjEiIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiICBEaWdpdD0iNiIgRGVzYz0iY2lyY2xlIGJvdW5kYXJ5IHJhZGl1cyIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLlpJrovrnlvaLovrnnlYzngrnlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUF9YIiBBbGlhcz0iWOWdkOaghyIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJwb2x5Z29uIGJvdW5kYXJ5IHZlcnRleCBYIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUF9ZIiBBbGlhcz0iWeWdkOaghyIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJwb2x5Z29uIGJvdW5kYXJ5IHZlcnRleCBZIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IuWMuuWfn+WPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJfTGVha2FnZSIgQWxpYXM9IuazhOmcsuezu+aVsCIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJyZWdpb24gbGVha2FnZSBjb2VmZmljaWVudCIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLmoIforrDljLrln5/lj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSTV9Db21XIiAgICAgICBBbGlhcz0i5YKo6IO95q+UIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMSIgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiIERlc2M9InN0b3JhZ2UgcmF0aW8iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX0NvbUtyIiAgICAgIEFsaWFzPSLmtYHluqbmr5QiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxMDAwIiBNaW49IjAuMDAxIiBEaWdpdD0iNiIgRGVzYz0ibW9iaWxpdHkgcmF0aW8iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX05ldFRvR3Jvc3MiIEFsaWFzPSLlh4Dmr5vmr5QiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxIiAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgRGVzYz0ibmV0LXRvLWdyb3NzIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8IS0tIOe7k+aenOmdouadv+WPguaVsOWPqueUsSByZWJ1aWxkUmVzdWx0UGFyYXMoKSDpgInmi6nvvIzkuI3kvJrlh7rnjrDlnKjlt6bkvqfpnaLmnb/kuK3jgIIgLS0+DQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i57uT5p6c5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfUnciICAgQWxpYXM9IuS6leW+hCIgICAgICAgICBVbml0PSJtIiAgICAgIERlZmF1bHQ9IjAuMSIgICAgTWF4PSIxMCIgICAgTWluPSIwLjAwMSIgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfRGZjIiAgQWxpYXM9Iuijgue8neWvvOa1geiDveWKmyIgVW5pdD0ibUQubSIgICBEZWZhdWx0PSIxMDAwIiAgIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBmcmFjdHVyZSBjb25kdWN0aXZpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9XX1NraW4iIEFsaWFzPSLooajnmq7ns7vmlbAiICAgICBVbml0PSIiICAgICAgIERlZmF1bHQ9IjAiICAgICAgTWF4PSIxMDAwIiAgTWluPSItMTAwIiAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHNraW4gZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfV19DIiAgICBBbGlhcz0i5LqV562S5YKo6ZuG57O75pWwIiBVbml0PSJtXjMvTVBhIiBEZWZhdWx0PSIwIiAgICAgIE1heD0iMTAwMCIgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3ZWxsYm9yZSBzdG9yYWdlIGNvZWZmaWNpZW50IiAvPg0KDQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9QaSIgIEFsaWFzPSLliJ3lp4vlnLDlsYLljovlipsiICAgVW5pdD0iTVBhIiAgIERlZmF1bHQ9IjQwIiAgICAgTWF4PSI1MDAiICAgTWluPSIwLjEiICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBmb3JtYXRpb24gcHJlc3N1cmUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9LIiAgIEFsaWFzPSLmuJfpgI/njociICAgICAgICAgVW5pdD0ibUQiICAgIERlZmF1bHQ9IjI1IiAgICAgTWF4PSIxMDAwMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgcGVybWVhYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfaCIgICBBbGlhcz0i5YKo5bGC5Y6a5bqmIiAgICAgICBVbml0PSJtIiAgICAgRGVmYXVsdD0iMTAiICAgICBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCByZXNlcnZvaXIgdGhpY2tuZXNzIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfcGhpIiBBbGlhcz0i5a2U6ZqZ5bqmIiAgICAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjEiICAgIE1heD0iMSIgICAgIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHBvcm9zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ3RpIiBBbGlhcz0i57u85ZCI5Y6L57yp57O75pWwIiAgIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwLjAwMSIgIE1heD0iMTAiICAgIE1pbj0iMWUtMzAiIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IHRvdGFsIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0NmIiAgQWxpYXM9IuWyqeefs+WOi+e8qeezu+aVsCIgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDAxIiBNYXg9IjEwIiAgICBNaW49IjFlLTMwIiBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCByb2NrIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1NvaSIgQWxpYXM9IuWIneWni+WQq+ayuemlseWSjOW6piIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuOCIgICAgTWF4PSIxIiAgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBvaWwgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1NnaSIgQWxpYXM9IuWIneWni+WQq+awlOmlseWSjOW6piIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAiICAgICAgTWF4PSIxIiAgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBnYXMgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1N3aSIgQWxpYXM9IuWIneWni+WQq+awtOmlseWSjOW6piIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuMiIgICAgTWF4PSIxIiAgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCB3YXRlciBzYXR1cmF0aW9uIiAvPg0KDQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9CbyIgICBBbGlhcz0i5rK55L2T56ev57O75pWwIiBVbml0PSIiICAgICAgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1byIgQWxpYXM9IuayueebuOm7j+W6piIgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0NvIiAgIEFsaWFzPSLmsrnljovnvKnns7vmlbAiIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IG9pbCBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9CdyIgICBBbGlhcz0i5rC05L2T56ev57O75pWwIiBVbml0PSJtMy9tMyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgd2F0ZXIgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9NaXV3IiBBbGlhcz0i5rC055u46buP5bqmIiAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjFlLTMwIiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3YXRlciB2aXNjb3NpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DdyIgICBBbGlhcz0i5rC05Y6L57yp57O75pWwIiBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCB3YXRlciBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9CZyIgICBBbGlhcz0i5rCU5L2T56ev57O75pWwIiBVbml0PSJtMy9tMyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgZ2FzIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1ZyIgQWxpYXM9IuawlOebuOm7j+W6piIgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgZ2FzIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0NnIiAgIEFsaWFzPSLmsJTljovnvKnns7vmlbAiIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IGdhcyBjb21wcmVzc2liaWxpdHkiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQo8L1Jvb3Q+DQo= \ No newline at end of file diff --git a/Bin/Config/Common/ModelParaDefinesNM_en.dat b/Bin/Config/Common/ModelParaDefinesNM_en.dat index 09deb56..29f5b0a 100644 --- a/Bin/Config/Common/ModelParaDefinesNM_en.dat +++ b/Bin/Config/Common/ModelParaDefinesNM_en.dat @@ -1 +1 @@ -PD94bWwgdmVycup_mpac2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSoqKioqKioqKioqKiwzyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gICAgVGhpcyBmaWxlIGRlZmluZXMgcGFyYW1ldGVycyBmb3IgdGhlIFdUQUkgTnVtZXJpY2FsIChOTSkgICAgLS0+DQo8IS0tICAgIG1vZHVsZS4gT25seSByZXNlcnZvaXIsIHdlbGwsIGFuZCBnZW9tZXRyeSBwYXJhbWV0ZXJzICAgICAgICAtLT4NCjwhLS0gICAgcmVxdWlyZWQgYnkgdGhlIFBFQkkgc29sdmVyIGFyZSBpbmNsdWRlZC4gICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI2MDYxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi0tPg0KDQo8IS0tDQogICAgUGFyYW1ldGVyIHNjb3BlOiByZXNlcnZvaXIsIHdlbGwsIGFuZCBnZW9tZXRyeSBwYXJhbWV0ZXJzIHJlcXVpcmVkIGJ5IHRoZSBQRUJJIHNvbHZlcg0KICAgIENvcnJlc3BvbmRzIHRvIEhYX05XVE1fTU9ERUxfSU5QVVQgc3RydWN0IGZpZWxkcw0KICAgIExvYWRlZCB2aWEgX3BhcmFIZWxwZXItPmxvYWRQYXJhRGVmaW5lcygpLCBzS2V5ID0gc19ObV9TZXJpZQ0KLS0+DQoNCjxSb290Pg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVzZXJ2b2lyIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJoIiAgIEFsaWFzPSJSZXNlcnZvaXIgVGhpY2tuZXNzIiAgICAgICAgIFVuaXQ9Im0iICAgICBEZWZhdWx0PSIxMCIgICAgTWF4PSIxMDAwMCIgIE1pbj0iMWUtMDUiICBEaWdpdD0iMyIgIERlc2M9InJlc2Vydm9pciB0aGlja25lc3MiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlBpIiAgQWxpYXM9IkluaXRpYWwgUHJlc3N1cmUiICAgICAgICAgICAgVW5pdD0iTVBhIiAgIERlZmF1bHQ9IjQwIiAgICBNYXg9IjUwMCIgICAgTWluPSIwLjEiICAgIERpZ2l0PSI1IiAgRGVzYz0iaW5pdGlhbCBmb3JtYXRpb24gcHJlc3N1cmUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IksiICAgQWxpYXM9IlBlcm1lYWJpbGl0eSIgICAgICAgICAgICAgICAgVW5pdD0ibUQiICAgIERlZmF1bHQ9IjI1IiAgICBNYXg9IjEwMDAwIiAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0icGVybWVhYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJwaGkiIEFsaWFzPSJQb3Jvc2l0eSIgICAgICAgICAgICAgICAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxIiAgICAgIE1pbj0iMWUtMDUiICBEaWdpdD0iNCIgIERlc2M9InBvcm9zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCbyIgIEFsaWFzPSJPaWwgRm9ybWF0aW9uIFZvbHVtZSBGYWN0b3IiIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIxLjIiICAgTWF4PSIxMCIgICAgIE1pbj0iMWUtMDYiICBEaWdpdD0iNiIgIERlc2M9Im9pbCBmb3JtYXRpb24gdm9sdW1lIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iTWl1byIgQWxpYXM9Ik9pbCBWaXNjb3NpdHkiICAgICAgICAgICAgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMC41IiAgIE1heD0iMTAwMDAiICBNaW49IjFlLTA2IiAgRGlnaXQ9IjYiICBEZXNjPSJvaWwgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJLeEt5IiBBbGlhcz0iSG9yaXpvbnRhbCBQZXJtZWFiaWxpdHkgUmF0aW8iIFVuaXQ9IiIgICBEZWZhdWx0PSIxIiAgICAgTWF4PSIxMDAwIiAgIE1pbj0iMWUtMDYiICBEaWdpdD0iNiIgIERlc2M9Imhvcml6b250YWwgcGVybWVhYmlsaXR5IHJhdGlvIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJDdGkiIEFsaWFzPSJUb3RhbCBDb21wcmVzc2liaWxpdHkiICAgICAgIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwLjAwMSIgTWF4PSIxMCIgICAgIE1pbj0iMWUtMzAiICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InRvdGFsIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQ2YiICBBbGlhcz0iUm9jayBDb21wcmVzc2liaWxpdHkiICAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDAxIiBNYXg9IjEwIiAgICBNaW49IjFlLTMwIiAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyb2NrIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iU29pIiBBbGlhcz0iSW5pdGlhbCBPaWwgU2F0dXJhdGlvbiIgICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMC44IiAgIE1heD0iMSIgICAgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIG9pbCBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJTd2kiIEFsaWFzPSJJbml0aWFsIFdhdGVyIFNhdHVyYXRpb24iICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjIiICAgTWF4PSIxIiAgICAgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9ImluaXRpYWwgd2F0ZXIgc2F0dXJhdGlvbiIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJXZWxsIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1giICAgIEFsaWFzPSJYIENvb3JkaW5hdGUiICAgICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1kiICAgIEFsaWFzPSJZIENvb3JkaW5hdGUiICAgICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1J3IiAgIEFsaWFzPSJXZWxsYm9yZSBSYWRpdXMiICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxMCIgICAgIE1pbj0iMC4wMDEiICBEaWdpdD0iNiIgIERlc2M9IndlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19Ta2luIiBBbGlhcz0iU2tpbiBGYWN0b3IiICAgICAgICAgICAgIFVuaXQ9IiIgICAgICAgRGVmYXVsdD0iMCIgICAgIE1heD0iMTAwMCIgICBNaW49Ii0xMDAiICAgRGlnaXQ9IjYiICBEZXNjPSJza2luIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19DIiAgICBBbGlhcz0iV2VsbGJvcmUgU3RvcmFnZSBDb2VmZiIgIFVuaXQ9Im1eMy9NUGEiIERlZmF1bHQ9IjAiICAgICBNYXg9IjEwMDAiICAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0id2VsbGJvcmUgc3RvcmFnZSBjb2VmZmljaWVudCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19XZWxsTGVuZ3RoIiAgICAgICAgIEFsaWFzPSJIb3Jpem9udGFsIFdlbGwgTGVuZ3RoIiBVbml0PSJtIiAgICBEZWZhdWx0PSIyMDAiICBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iNiIgRGVzYz0iaG9yaXpvbnRhbCB3ZWxsIGxlbmd0aCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19EcmFpbkFuZ2xlIiAgICAgICAgIEFsaWFzPSJEcmFpbiBBbmdsZSIgICAgICAgICAgICBVbml0PSJkZWciICBEZWZhdWx0PSIwIiAgICBNYXg9IjM2MCIgICBNaW49Ii0zNjAiICBEaWdpdD0iNiIgRGVzYz0iaG9yaXpvbnRhbCB3ZWxsIGRyYWluIGFuZ2xlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX051bWJlck9mRnJhY3R1cmVzIiAgQWxpYXM9Ik51bWJlciBvZiBGcmFjdHVyZXMiICAgIFVuaXQ9IiIgICAgIERlZmF1bHQ9IjE1IiAgIE1heD0iMTAwMCIgIE1pbj0iMiIgICAgIERpZ2l0PSIwIiBEZXNjPSJudW1iZXIgb2YgZnJhY3R1cmVzIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0ZyYWN0dXJlSGFsZkxlbmd0aCIgQWxpYXM9IkZyYWN0dXJlIEhhbGYtTGVuZ3RoIiAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjUwIiAgIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBoYWxmLWxlbmd0aCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19GcmFjdHVyZUFuZ2xlIiAgICAgIEFsaWFzPSJGcmFjdHVyZSBBbmdsZSIgICAgICAgICBVbml0PSJkZWciICBEZWZhdWx0PSI5MCIgICBNYXg9IjM2MCIgICBNaW49Ii0zNjAiICBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgYW5nbGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfRGZjIiAgICAgICAgICAgICAgICBBbGlhcz0iRnJhY3R1cmUgQ29uZHVjdGl2aXR5IiAgVW5pdD0ibUQubSIgRGVmYXVsdD0iMTAwMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGNvbmR1Y3Rpdml0eSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJJbmRlcGVuZGVudCBGcmFjdHVyZSBQYXJhbWV0ZXJzIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9YMCIgQWxpYXM9IlN0YXJ0IFgwIiAgICAgICAgICAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBzdGFydCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWTAiIEFsaWFzPSJTdGFydCBZMCIgICAgICAgICAgICAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgc3RhcnQgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX1gxIiBBbGlhcz0iRW5kIFgxIiAgICAgICAgICAgICAgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGVuZCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWTEiIEFsaWFzPSJFbmQgWTEiICAgICAgICAgICAgICAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgZW5kIFkgY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9GQyIgQWxpYXM9IkZyYWN0dXJlIENvbmR1Y3Rpdml0eSIgVW5pdD0ibUQubSIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBjb25kdWN0aXZpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfRFciIEFsaWFzPSJGcmFjdHVyZSBXaWR0aCBQYXJhbWV0ZXIiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgd2lkdGggcGFyYW1ldGVyIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IkZhdWx0IFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9YMCIgQWxpYXM9IlN0YXJ0IFgwIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IHN0YXJ0IFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWTAiIEFsaWFzPSJTdGFydCBZMCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBzdGFydCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1gxIiBBbGlhcz0iRW5kIFgxIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IGVuZCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1kxIiBBbGlhcz0iRW5kIFkxIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IGVuZCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX0xlYWthZ2UiIEFsaWFzPSJMZWFrYWdlIENvZWZmaWNpZW50IiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IGxlYWthZ2UgY29lZmZpY2llbnQiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVjdGFuZ2xlIEJvdW5kYXJ5IFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUl9YTWluIiBBbGlhcz0iTGVmdCBCb3VuZGFyeSBYIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InJlY3RhbmdsZSBib3VuZGFyeSBtaW5pbXVtIFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJSX1lNaW4iIEFsaWFzPSJCb3R0b20gQm91bmRhcnkgWSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJyZWN0YW5nbGUgYm91bmRhcnkgbWluaW11bSBZIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUl9YTWF4IiBBbGlhcz0iUmlnaHQgQm91bmRhcnkgWCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJyZWN0YW5nbGUgYm91bmRhcnkgbWF4aW11bSBYIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUl9ZTWF4IiBBbGlhcz0iVG9wIEJvdW5kYXJ5IFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1heGltdW0gWSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJDaXJjbGUgQm91bmRhcnkgUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJDX0NlbnRlclgiIEFsaWFzPSJDZW50ZXIgWCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJjaXJjbGUgYm91bmRhcnkgY2VudGVyIFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJDX0NlbnRlclkiIEFsaWFzPSJDZW50ZXIgWSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJjaXJjbGUgYm91bmRhcnkgY2VudGVyIFkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJDX1JhZGl1cyIgIEFsaWFzPSJSYWRpdXMiICAgVW5pdD0ibSIgRGVmYXVsdD0iMSIgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgIERpZ2l0PSI2IiBEZXNjPSJjaXJjbGUgYm91bmRhcnkgcmFkaXVzIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IlBvbHlnb24gQm91bmRhcnkgVmVydGV4IFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUF9YIiBBbGlhcz0iWCBDb29yZGluYXRlIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InBvbHlnb24gYm91bmRhcnkgdmVydGV4IFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJQX1kiIEFsaWFzPSJZIENvb3JkaW5hdGUiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icG9seWdvbiBib3VuZGFyeSB2ZXJ0ZXggWSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJSZWdpb24gUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJfTGVha2FnZSIgQWxpYXM9IkxlYWthZ2UgQ29lZmZpY2llbnQiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiBEaWdpdD0iNiIgRGVzYz0icmVnaW9uIGxlYWthZ2UgY29lZmZpY2llbnQiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVnaW9uIE1hcmsgUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX0NvbVciICAgICAgIEFsaWFzPSJTdG9yYWdlIFJhdGlvIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMSIgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiIERlc2M9InN0b3JhZ2UgcmF0aW8iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX0NvbUtyIiAgICAgIEFsaWFzPSJNb2JpbGl0eSBSYXRpbyIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjEwMDAiIE1pbj0iMC4wMDEiIERpZ2l0PSI2IiBEZXNjPSJtb2JpbGl0eSByYXRpbyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUk1fTmV0VG9Hcm9zcyIgQWxpYXM9Ik5ldC10by1Hcm9zcyIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjEiICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiBEZXNjPSJuZXQtdG8tZ3Jvc3MiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDwhLS0gUmVzdWx0IHBhcmFtZXRlcnMgYXJlIHNlbGVjdGVkIG9ubHkgYnkgcmVidWlsZFJlc3VsdFBhcmFzKCkuIC0tPg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IlJlc3VsdCBQYXJhbWV0ZXJzIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfUnciICAgQWxpYXM9IldlbGwgUmFkaXVzIiAgICAgICAgICAgICBVbml0PSJtIiAgICAgIERlZmF1bHQ9IjAuMSIgICAgTWF4PSIxMCIgICAgTWluPSIwLjAwMSIgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfRGZjIiAgQWxpYXM9IkZyYWN0dXJlIENvbmR1Y3Rpdml0eSIgIFVuaXQ9Im1ELm0iICAgRGVmYXVsdD0iMTAwMCIgICBNYXg9IjFlKzMwIiBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgZnJhY3R1cmUgY29uZHVjdGl2aXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfV19Ta2luIiBBbGlhcz0iU2tpbiBGYWN0b3IiICAgICAgICAgICAgVW5pdD0iIiAgICAgICBEZWZhdWx0PSIwIiAgICAgIE1heD0iMTAwMCIgIE1pbj0iLTEwMCIgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBza2luIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfQyIgICAgQWxpYXM9IldlbGxib3JlIFN0b3JhZ2UgQ29lZmYiIFVuaXQ9Im1eMy9NUGEiIERlZmF1bHQ9IjAiICAgICAgTWF4PSIxMDAwIiAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdlbGxib3JlIHN0b3JhZ2UgY29lZmZpY2llbnQiIC8+DQoNCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1BpIiAgQWxpYXM9IkluaXRpYWwgRm9ybWF0aW9uIFByZXNzdXJlIiBVbml0PSJNUGEiICAgRGVmYXVsdD0iNDAiICAgICBNYXg9IjUwMCIgICBNaW49IjAuMSIgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIGZvcm1hdGlvbiBwcmVzc3VyZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0siICAgQWxpYXM9IlBlcm1lYWJpbGl0eSIgICAgICAgICAgICAgICBVbml0PSJtRCIgICAgRGVmYXVsdD0iMjUiICAgICBNYXg9IjEwMDAwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBwZXJtZWFiaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9oIiAgIEFsaWFzPSJSZXNlcnZvaXIgVGhpY2tuZXNzIiAgICAgICAgVW5pdD0ibSIgICAgIERlZmF1bHQ9IjEwIiAgICAgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgcmVzZXJ2b2lyIHRoaWNrbmVzcyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X3BoaSIgQWxpYXM9IlBvcm9zaXR5IiAgICAgICAgICAgICAgICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMC4xIiAgICBNYXg9IjEiICAgICBNaW49IjFlLTA1IiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBwb3Jvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0N0aSIgQWxpYXM9IlRvdGFsIENvbXByZXNzaWJpbGl0eSIgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDEiICBNYXg9IjEwIiAgICBNaW49IjFlLTMwIiBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCB0b3RhbCBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DZiIgIEFsaWFzPSJSb2NrIENvbXByZXNzaWJpbGl0eSIgICAgICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAwMSIgTWF4PSIxMCIgICAgTWluPSIxZS0zMCIgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgcm9jayBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9Tb2kiIEFsaWFzPSJJbml0aWFsIE9pbCBTYXR1cmF0aW9uIiAgICAgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuOCIgICAgTWF4PSIxIiAgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBvaWwgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1NnaSIgQWxpYXM9IkluaXRpYWwgR2FzIFNhdHVyYXRpb24iICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMCIgICAgICBNYXg9IjEiICAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIGdhcyBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfU3dpIiBBbGlhcz0iSW5pdGlhbCBXYXRlciBTYXR1cmF0aW9uIiAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjIiICAgIE1heD0iMSIgICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGluaXRpYWwgd2F0ZXIgc2F0dXJhdGlvbiIgLz4NCg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQm8iICAgQWxpYXM9Ik9pbCBGb3JtYXRpb24gVm9sdW1lIEZhY3RvciIgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1byIgQWxpYXM9Ik9pbCBWaXNjb3NpdHkiICAgICAgICAgICAgICAgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0NvIiAgIEFsaWFzPSJPaWwgQ29tcHJlc3NpYmlsaXR5IiAgICAgICAgICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgb2lsIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0J3IiAgIEFsaWFzPSJXYXRlciBGb3JtYXRpb24gVm9sdW1lIEZhY3RvciIgVW5pdD0ibTMvbTMiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdhdGVyIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1dyIgQWxpYXM9IldhdGVyIFZpc2Nvc2l0eSIgICAgICAgICAgICAgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgd2F0ZXIgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ3ciICAgQWxpYXM9IldhdGVyIENvbXByZXNzaWJpbGl0eSIgICAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCB3YXRlciBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9CZyIgICBBbGlhcz0iR2FzIEZvcm1hdGlvbiBWb2x1bWUgRmFjdG9yIiAgIFVuaXQ9Im0zL20zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBnYXMgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9NaXVnIiBBbGlhcz0iR2FzIFZpc2Nvc2l0eSIgICAgICAgICAgICAgICAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjFlLTMwIiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBnYXMgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ2ciICAgQWxpYXM9IkdhcyBDb21wcmVzc2liaWxpdHkiICAgICAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCBnYXMgY29tcHJlc3NpYmlsaXR5IiAvPg0KICA8L1BhcmFHcm91cD4NCg0KPC9Sb290Pg0K \ No newline at end of file +PD94bWwgdmVycup_mpac2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSoqKioqKioqKioqKiwzyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gICAgVGhpcyBmaWxlIGRlZmluZXMgcGFyYW1ldGVycyBmb3IgdGhlIFdUQUkgTnVtZXJpY2FsIChOTSkgICAgLS0+DQo8IS0tICAgIG1vZHVsZS4gT25seSByZXNlcnZvaXIsIHdlbGwsIGFuZCBnZW9tZXRyeSBwYXJhbWV0ZXJzICAgICAgICAtLT4NCjwhLS0gICAgcmVxdWlyZWQgYnkgdGhlIFBFQkkgc29sdmVyIGFyZSBpbmNsdWRlZC4gICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI2MDYxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi0tPg0KDQo8IS0tDQogICAgUGFyYW1ldGVyIHNjb3BlOiByZXNlcnZvaXIsIHdlbGwsIGFuZCBnZW9tZXRyeSBwYXJhbWV0ZXJzIHJlcXVpcmVkIGJ5IHRoZSBQRUJJIHNvbHZlcg0KICAgIENvcnJlc3BvbmRzIHRvIEhYX05XVE1fTU9ERUxfSU5QVVQgc3RydWN0IGZpZWxkcw0KICAgIExvYWRlZCB2aWEgX3BhcmFIZWxwZXItPmxvYWRQYXJhRGVmaW5lcygpLCBzS2V5ID0gc19ObV9TZXJpZQ0KLS0+DQoNCjxSb290Pg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVzZXJ2b2lyIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJoIiAgIEFsaWFzPSJSZXNlcnZvaXIgVGhpY2tuZXNzIiAgICAgICAgIFVuaXQ9Im0iICAgICBEZWZhdWx0PSIxMCIgICAgTWF4PSIxMDAwMCIgIE1pbj0iMWUtMDUiICBEaWdpdD0iMyIgIERlc2M9InJlc2Vydm9pciB0aGlja25lc3MiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlBpIiAgQWxpYXM9IkluaXRpYWwgUHJlc3N1cmUiICAgICAgICAgICAgVW5pdD0iTVBhIiAgIERlZmF1bHQ9IjQwIiAgICBNYXg9IjUwMCIgICAgTWluPSIwLjEiICAgIERpZ2l0PSI1IiAgRGVzYz0iaW5pdGlhbCBmb3JtYXRpb24gcHJlc3N1cmUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IksiICAgQWxpYXM9IlBlcm1lYWJpbGl0eSIgICAgICAgICAgICAgICAgVW5pdD0ibUQiICAgIERlZmF1bHQ9IjI1IiAgICBNYXg9IjEwMDAwIiAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0icGVybWVhYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJwaGkiIEFsaWFzPSJQb3Jvc2l0eSIgICAgICAgICAgICAgICAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxIiAgICAgIE1pbj0iMWUtMDUiICBEaWdpdD0iNCIgIERlc2M9InBvcm9zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCbyIgIEFsaWFzPSJPaWwgRm9ybWF0aW9uIFZvbHVtZSBGYWN0b3IiIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIxLjIiICAgTWF4PSIxMCIgICAgIE1pbj0iMWUtMDYiICBEaWdpdD0iNiIgIERlc2M9Im9pbCBmb3JtYXRpb24gdm9sdW1lIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iTWl1byIgQWxpYXM9Ik9pbCBWaXNjb3NpdHkiICAgICAgICAgICAgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMC41IiAgIE1heD0iMTAwMDAiICBNaW49IjFlLTA2IiAgRGlnaXQ9IjYiICBEZXNjPSJvaWwgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCdyIgIEFsaWFzPSJXYXRlciBGb3JtYXRpb24gVm9sdW1lIEZhY3RvciIgVW5pdD0iIiAgICBEZWZhdWx0PSIxIiAgICAgTWF4PSIxMCIgICAgIE1pbj0iMWUtMDYiICBEaWdpdD0iNiIgIERlc2M9IndhdGVyIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJNaXV3IiBBbGlhcz0iV2F0ZXIgVmlzY29zaXR5IiAgICAgICAgICAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iMWUtMDYiICBEaWdpdD0iNiIgIERlc2M9IndhdGVyIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQ3RpIiBBbGlhcz0iVG90YWwgQ29tcHJlc3NpYmlsaXR5IiAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDEiIE1heD0iMTAiICAgICBNaW49IjFlLTMwIiAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJ0b3RhbCBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkNmIiAgQWxpYXM9IlJvY2sgQ29tcHJlc3NpYmlsaXR5IiAgICAgICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAwMSIgTWF4PSIxMCIgICAgTWluPSIxZS0zMCIgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icm9jayBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlNvaSIgQWxpYXM9IkluaXRpYWwgT2lsIFNhdHVyYXRpb24iICAgICAgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuOCIgICBNYXg9IjEiICAgICAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0iaW5pdGlhbCBvaWwgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iU2dpIiBBbGlhcz0iSW5pdGlhbCBHYXMgU2F0dXJhdGlvbiIgICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMCIgICAgIE1heD0iMSIgICAgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIGdhcyBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJTd2kiIEFsaWFzPSJJbml0aWFsIFdhdGVyIFNhdHVyYXRpb24iICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjIiICAgTWF4PSIxIiAgICAgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9ImluaXRpYWwgd2F0ZXIgc2F0dXJhdGlvbiIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJXZWxsIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1giICAgIEFsaWFzPSJYIENvb3JkaW5hdGUiICAgICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1kiICAgIEFsaWFzPSJZIENvb3JkaW5hdGUiICAgICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1J3IiAgIEFsaWFzPSJXZWxsYm9yZSBSYWRpdXMiICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxMCIgICAgIE1pbj0iMC4wMDEiICBEaWdpdD0iNiIgIERlc2M9IndlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19Ta2luIiBBbGlhcz0iU2tpbiBGYWN0b3IiICAgICAgICAgICAgIFVuaXQ9IiIgICAgICAgRGVmYXVsdD0iMCIgICAgIE1heD0iMTAwMCIgICBNaW49Ii0xMDAiICAgRGlnaXQ9IjYiICBEZXNjPSJza2luIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19DIiAgICBBbGlhcz0iV2VsbGJvcmUgU3RvcmFnZSBDb2VmZiIgIFVuaXQ9Im1eMy9NUGEiIERlZmF1bHQ9IjAiICAgICBNYXg9IjEwMDAiICAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0id2VsbGJvcmUgc3RvcmFnZSBjb2VmZmljaWVudCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19XZWxsTGVuZ3RoIiAgICAgICAgIEFsaWFzPSJIb3Jpem9udGFsIFdlbGwgTGVuZ3RoIiBVbml0PSJtIiAgICBEZWZhdWx0PSIyMDAiICBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iNiIgRGVzYz0iaG9yaXpvbnRhbCB3ZWxsIGxlbmd0aCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19EcmFpbkFuZ2xlIiAgICAgICAgIEFsaWFzPSJEcmFpbiBBbmdsZSIgICAgICAgICAgICBVbml0PSJkZWciICBEZWZhdWx0PSIwIiAgICBNYXg9IjM2MCIgICBNaW49Ii0zNjAiICBEaWdpdD0iNiIgRGVzYz0iaG9yaXpvbnRhbCB3ZWxsIGRyYWluIGFuZ2xlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX051bWJlck9mRnJhY3R1cmVzIiAgQWxpYXM9Ik51bWJlciBvZiBGcmFjdHVyZXMiICAgIFVuaXQ9IiIgICAgIERlZmF1bHQ9IjE1IiAgIE1heD0iMTAwMCIgIE1pbj0iMiIgICAgIERpZ2l0PSIwIiBEZXNjPSJudW1iZXIgb2YgZnJhY3R1cmVzIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0ZyYWN0dXJlSGFsZkxlbmd0aCIgQWxpYXM9IkZyYWN0dXJlIEhhbGYtTGVuZ3RoIiAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjUwIiAgIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBoYWxmLWxlbmd0aCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19GcmFjdHVyZUFuZ2xlIiAgICAgIEFsaWFzPSJGcmFjdHVyZSBBbmdsZSIgICAgICAgICBVbml0PSJkZWciICBEZWZhdWx0PSI5MCIgICBNYXg9IjM2MCIgICBNaW49Ii0zNjAiICBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgYW5nbGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfRGZjIiAgICAgICAgICAgICAgICBBbGlhcz0iRnJhY3R1cmUgQ29uZHVjdGl2aXR5IiAgVW5pdD0ibUQubSIgRGVmYXVsdD0iMTAwMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGNvbmR1Y3Rpdml0eSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJJbmRlcGVuZGVudCBGcmFjdHVyZSBQYXJhbWV0ZXJzIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9YMCIgQWxpYXM9IlN0YXJ0IFgwIiAgICAgICAgICAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBzdGFydCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWTAiIEFsaWFzPSJTdGFydCBZMCIgICAgICAgICAgICAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgc3RhcnQgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX1gxIiBBbGlhcz0iRW5kIFgxIiAgICAgICAgICAgICAgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGVuZCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWTEiIEFsaWFzPSJFbmQgWTEiICAgICAgICAgICAgICAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgZW5kIFkgY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9GQyIgQWxpYXM9IkZyYWN0dXJlIENvbmR1Y3Rpdml0eSIgVW5pdD0ibUQubSIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBjb25kdWN0aXZpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfRFciIEFsaWFzPSJGcmFjdHVyZSBXaWR0aCBQYXJhbWV0ZXIiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgd2lkdGggcGFyYW1ldGVyIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IkZhdWx0IFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9YMCIgQWxpYXM9IlN0YXJ0IFgwIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IHN0YXJ0IFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWTAiIEFsaWFzPSJTdGFydCBZMCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBzdGFydCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1gxIiBBbGlhcz0iRW5kIFgxIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IGVuZCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1kxIiBBbGlhcz0iRW5kIFkxIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IGVuZCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX0xlYWthZ2UiIEFsaWFzPSJMZWFrYWdlIENvZWZmaWNpZW50IiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IGxlYWthZ2UgY29lZmZpY2llbnQiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVjdGFuZ2xlIEJvdW5kYXJ5IFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUl9YTWluIiBBbGlhcz0iTGVmdCBCb3VuZGFyeSBYIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InJlY3RhbmdsZSBib3VuZGFyeSBtaW5pbXVtIFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJSX1lNaW4iIEFsaWFzPSJCb3R0b20gQm91bmRhcnkgWSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJyZWN0YW5nbGUgYm91bmRhcnkgbWluaW11bSBZIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUl9YTWF4IiBBbGlhcz0iUmlnaHQgQm91bmRhcnkgWCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJyZWN0YW5nbGUgYm91bmRhcnkgbWF4aW11bSBYIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUl9ZTWF4IiBBbGlhcz0iVG9wIEJvdW5kYXJ5IFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1heGltdW0gWSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJDaXJjbGUgQm91bmRhcnkgUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJDX0NlbnRlclgiIEFsaWFzPSJDZW50ZXIgWCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJjaXJjbGUgYm91bmRhcnkgY2VudGVyIFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJDX0NlbnRlclkiIEFsaWFzPSJDZW50ZXIgWSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJjaXJjbGUgYm91bmRhcnkgY2VudGVyIFkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJDX1JhZGl1cyIgIEFsaWFzPSJSYWRpdXMiICAgVW5pdD0ibSIgRGVmYXVsdD0iMSIgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgIERpZ2l0PSI2IiBEZXNjPSJjaXJjbGUgYm91bmRhcnkgcmFkaXVzIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IlBvbHlnb24gQm91bmRhcnkgVmVydGV4IFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUF9YIiBBbGlhcz0iWCBDb29yZGluYXRlIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InBvbHlnb24gYm91bmRhcnkgdmVydGV4IFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJQX1kiIEFsaWFzPSJZIENvb3JkaW5hdGUiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icG9seWdvbiBib3VuZGFyeSB2ZXJ0ZXggWSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJSZWdpb24gUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJfTGVha2FnZSIgQWxpYXM9IkxlYWthZ2UgQ29lZmZpY2llbnQiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiBEaWdpdD0iNiIgRGVzYz0icmVnaW9uIGxlYWthZ2UgY29lZmZpY2llbnQiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVnaW9uIE1hcmsgUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX0NvbVciICAgICAgIEFsaWFzPSJTdG9yYWdlIFJhdGlvIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMSIgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiIERlc2M9InN0b3JhZ2UgcmF0aW8iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX0NvbUtyIiAgICAgIEFsaWFzPSJNb2JpbGl0eSBSYXRpbyIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjEwMDAiIE1pbj0iMC4wMDEiIERpZ2l0PSI2IiBEZXNjPSJtb2JpbGl0eSByYXRpbyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUk1fTmV0VG9Hcm9zcyIgQWxpYXM9Ik5ldC10by1Hcm9zcyIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjEiICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiBEZXNjPSJuZXQtdG8tZ3Jvc3MiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDwhLS0gUmVzdWx0IHBhcmFtZXRlcnMgYXJlIHNlbGVjdGVkIG9ubHkgYnkgcmVidWlsZFJlc3VsdFBhcmFzKCkuIC0tPg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IlJlc3VsdCBQYXJhbWV0ZXJzIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfUnciICAgQWxpYXM9IldlbGwgUmFkaXVzIiAgICAgICAgICAgICBVbml0PSJtIiAgICAgIERlZmF1bHQ9IjAuMSIgICAgTWF4PSIxMCIgICAgTWluPSIwLjAwMSIgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfRGZjIiAgQWxpYXM9IkZyYWN0dXJlIENvbmR1Y3Rpdml0eSIgIFVuaXQ9Im1ELm0iICAgRGVmYXVsdD0iMTAwMCIgICBNYXg9IjFlKzMwIiBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgZnJhY3R1cmUgY29uZHVjdGl2aXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfV19Ta2luIiBBbGlhcz0iU2tpbiBGYWN0b3IiICAgICAgICAgICAgVW5pdD0iIiAgICAgICBEZWZhdWx0PSIwIiAgICAgIE1heD0iMTAwMCIgIE1pbj0iLTEwMCIgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBza2luIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfQyIgICAgQWxpYXM9IldlbGxib3JlIFN0b3JhZ2UgQ29lZmYiIFVuaXQ9Im1eMy9NUGEiIERlZmF1bHQ9IjAiICAgICAgTWF4PSIxMDAwIiAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdlbGxib3JlIHN0b3JhZ2UgY29lZmZpY2llbnQiIC8+DQoNCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1BpIiAgQWxpYXM9IkluaXRpYWwgRm9ybWF0aW9uIFByZXNzdXJlIiBVbml0PSJNUGEiICAgRGVmYXVsdD0iNDAiICAgICBNYXg9IjUwMCIgICBNaW49IjAuMSIgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIGZvcm1hdGlvbiBwcmVzc3VyZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0siICAgQWxpYXM9IlBlcm1lYWJpbGl0eSIgICAgICAgICAgICAgICBVbml0PSJtRCIgICAgRGVmYXVsdD0iMjUiICAgICBNYXg9IjEwMDAwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBwZXJtZWFiaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9oIiAgIEFsaWFzPSJSZXNlcnZvaXIgVGhpY2tuZXNzIiAgICAgICAgVW5pdD0ibSIgICAgIERlZmF1bHQ9IjEwIiAgICAgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgcmVzZXJ2b2lyIHRoaWNrbmVzcyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X3BoaSIgQWxpYXM9IlBvcm9zaXR5IiAgICAgICAgICAgICAgICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMC4xIiAgICBNYXg9IjEiICAgICBNaW49IjFlLTA1IiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBwb3Jvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0N0aSIgQWxpYXM9IlRvdGFsIENvbXByZXNzaWJpbGl0eSIgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDEiICBNYXg9IjEwIiAgICBNaW49IjFlLTMwIiBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCB0b3RhbCBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DZiIgIEFsaWFzPSJSb2NrIENvbXByZXNzaWJpbGl0eSIgICAgICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAwMSIgTWF4PSIxMCIgICAgTWluPSIxZS0zMCIgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgcm9jayBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9Tb2kiIEFsaWFzPSJJbml0aWFsIE9pbCBTYXR1cmF0aW9uIiAgICAgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuOCIgICAgTWF4PSIxIiAgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBvaWwgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1NnaSIgQWxpYXM9IkluaXRpYWwgR2FzIFNhdHVyYXRpb24iICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMCIgICAgICBNYXg9IjEiICAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIGdhcyBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfU3dpIiBBbGlhcz0iSW5pdGlhbCBXYXRlciBTYXR1cmF0aW9uIiAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjIiICAgIE1heD0iMSIgICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGluaXRpYWwgd2F0ZXIgc2F0dXJhdGlvbiIgLz4NCg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQm8iICAgQWxpYXM9Ik9pbCBGb3JtYXRpb24gVm9sdW1lIEZhY3RvciIgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1byIgQWxpYXM9Ik9pbCBWaXNjb3NpdHkiICAgICAgICAgICAgICAgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0NvIiAgIEFsaWFzPSJPaWwgQ29tcHJlc3NpYmlsaXR5IiAgICAgICAgICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgb2lsIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0J3IiAgIEFsaWFzPSJXYXRlciBGb3JtYXRpb24gVm9sdW1lIEZhY3RvciIgVW5pdD0ibTMvbTMiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdhdGVyIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1dyIgQWxpYXM9IldhdGVyIFZpc2Nvc2l0eSIgICAgICAgICAgICAgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgd2F0ZXIgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ3ciICAgQWxpYXM9IldhdGVyIENvbXByZXNzaWJpbGl0eSIgICAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCB3YXRlciBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9CZyIgICBBbGlhcz0iR2FzIEZvcm1hdGlvbiBWb2x1bWUgRmFjdG9yIiAgIFVuaXQ9Im0zL20zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBnYXMgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9NaXVnIiBBbGlhcz0iR2FzIFZpc2Nvc2l0eSIgICAgICAgICAgICAgICAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjFlLTMwIiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBnYXMgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ2ciICAgQWxpYXM9IkdhcyBDb21wcmVzc2liaWxpdHkiICAgICAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCBnYXMgY29tcHJlc3NpYmlsaXR5IiAvPg0KICA8L1BhcmFHcm91cD4NCg0KPC9Sb290Pg0K \ No newline at end of file diff --git a/Bin/Config/Lang/cn/nmNum_cn.qm b/Bin/Config/Lang/cn/nmNum_cn.qm index 003de21ebdb765f01ee6b20642773fef7a370739..52d0c82c95643facf3bbf65aeda42be19d436d30 100644 GIT binary patch delta 9815 zcmZ9Sd00*B+sE%`ueI0O^HwMsDxpY*$Ph9mDr87xijpA`8jzu_=tweTmw6^6(=nV( zkp|N_37IlyIL=1kcPP9aKf z$GNp3=Yt3$aW=6TbHRo9{*YahVjM0bI=ui~Nt9Z|ng0)Gg%4-t{Pd5`)&;e2wwfo_e`GGE%Q(A8 ztj}j6$(HCgEHAwyx{Ir252E`=h};dtlxvB4Z71gYmecf&bMYD?UpHcY4LBo|;67rC z>YNgGv+7*kle1a|QQ!H*Jl%-~xD%@_loAcJCc5wu#N%DWBUkZBWAhP(gXejoz!aPf z;(UDwgr%SS!ucA`5OfxcYX<&HR8reQ=6S)a7wk>f8pD;!iJsSmt6*hmA2_eUXjSLW zVT&rh-3dk$v+)9P{Sx?E6>s40tN0uaGJG^K7x>PoLfE(y=P_rZ2}wkEaQ_K=VZApX zzMt{aLi29H+O*4Z$l5p%P0S_M7uz%y>${6p#bDh_TXEhS2*PMfVfZSh!&^a?QpULi ztBd)8zwb>He+ZmTg3mjmlK~{A{EE+>bDj<)afb`hqA8sI+qd$AGod6FL=j8dNaE#2 za7bGc%f`bGws0m^C-GJcu|}&&eA$xN)Cy9HrNpdNl!vetiG4V4?j>b0Li6QM&Ug3$oU>N9II&h`={aJ{l%%}thQB+^xl+%0E7(G| zU=m3-KExW_CMhKm9^y;VnsgJfHlZYK!@e&m;k*+^(z#4xLwb-b&46DVCfV4Q*xbb= z*MsgP)#kickK}fJi5?h8j$VZ8i%E`0Fh0lxKY;}#!y;_LEt0Wv7A%llh~HV7!uimi zA{M@p+}bZC`l|*t!+mIGSI%_?&Vsqr>?4%rmmbvO?0h2cdDPOReNOam zEAnUqX*sr)JbHu@TkwY3(lsK#V(PG~6EWxGoZaKe$2SQ={g!(6IYabf8~M)gBxXB^ zGk}rrqW8omP9p!NxGs1h`M1p^`Vwa$Yg>)eKbv!CXEIe?z{2j4f0z?OqzmWv7|t`z z$Ug;Hq@W-5SrbM~+Q3=uEA@E>%SgXd|L-G+=AWj4jp5rD>(ju)P>RKsoae98z@s=% zS%{8VBi6f|V{AeeeCXP`9&C&N-@T`1W6 zkjQkEv+NxW{bx5;?oPuLUx|edp<&~(FdH3>=sycGwT4E_KSHc^bxz;$oMG-AX=G{v zu?{0?WMOLv%0vs9-Db`qGUxb)oHKfuvs4bILK^vP7jl3Pr^h4;Sz{&^RY4P~q-KX3 zMOYt(eY#P^Sm@T4gPeCBTF4eOrfId|aZ|Ju9Uh2`eT<@igPn43QA{j0{{BOXiQ5bp z?npD%Gq`>c&8d3)_E$JHfU7+oVeYGTF|DMflh+V+G|=)Hc0~1aXjKM6HewTP zQ|A*KJ(sc$3PhXka9)2(JKbgx?dnK5JtK)tDW>0AdlOq!PN%Xu6B{K^VY?t=$u4wZ z#So&0DV&uC3t7k2RHAN0!S~ zxwKeMtZgUeT8`xntOU&n~ z*-LBh|5DGgwuM2szH#2IV7n1*EFqum9fQpomCcImkl=bWU^m{MB4(_`D%PeE?Rm={ zi6O)WJYbKfmm!Z-nzOVHrhgRbYQyk!brrg*U!Q+Rp>O|zSWQ2LjUVJ|+!RHFAybLf zi&8W-$HTRw6m2de8x2^lu!zOeGDZ77u*Twjoag&+KHkasx|O1R0KVTlLD6MRb7Goz z3U8-ah|Xn2-!+UVY@Wmqu3b?K)WVEE!W4t3df(?Ft?{wy7fe z_9ddoYKqto^$`qj6>%R=5&gPSG4Ia=B3*ONHdc!Huip`qTbZ+T4yJs?^4lZ>5WzbX>nmHsXwMXz?i3ImzoOXm7(CHgQRTy|)ndh-P>6J| z-ikf@3yDSlqS#ll5fz0>u|NAJk)sD^;4g}U-SK_5AjJuJEKx!^r|Xq3iW5OEAssfH zSKBL2jE;v$+9>je?1z0N#hDZXmeJfiQg3V8pt#|PI;Pbo#jP60QKh|CJW9Mk^v$4n zQm7`{KZ&!nE$3frIo}jm$VL<@p4RyY;V~uw0r zmVt7Hnp~(0Sma0HT9?1Y5W2D7Vx?1Go8blTPMLgM&IlXy{r*EV7SLeHvnpSN4^wZYxIrV74QZf0Fi@Y@9c z?lVO2PYWm3++FDR<`khi=FEu@`d6ud?^4&2|)`5Bnjup9-sz@hCp-!j^Ri#xWa(t^Kl4zupyg-P;Cl+aTmfP}D9B zgkK90Y+v>Whp!@d?e_^s_gqJre8)o8PAlZSjzURMQ#k$p68J(mlMOdW=q8-mZ3dHt z;*l`&p^d`%JtxUTe>@S&uEF|$ju0Lf93fh>PI%F|5_bM9eC*c&W#3QEw-uZ}M~Upp zF{12AqI?Cb99>^jH-USET^DsheTYqaE*cVlMUmW*^VCMMTKQ1izf^Re1|>eeOzak4 z3_lMRy=`L$;e-C7_Zq0eacgmq7aGj*nc|>V9_TaD#9@8Q5r@~rkryEGDSC0#7_8{z zY;lYYu0NS0PHG%a)F4)jZFL&~G+ay^fd~FP$K2P-)^tK#?ROHLqcvw`e+wDi=VW=D z$^uSxP0ng{IBk-6AkSjpM=KcBl<@$)u&INN!0dMY?genI>oU?*q)mYic^I3qf8 zPRiso#c|G?&bc6iGkF^4q5+(XZ;9(?dl2hCRou7~-s$>9+J zit{v_5~^7a=<*>k$2J*7V=m_@8*z^tJS%gzg-p?kbKV2awA$jnT%^#9mEsX!21c${-3;)6fYA>Ymu{|rH_*4-e!_>L@acJ#^|WjZH^;Wt*^4iE`<9&m3ePVJ z`$gFz)`@6PfU>m$`v1>#Wn26nYkpPPe)t?}%{sre957R?25Z` z;ekSw9yOIIeN$11txzuVdWbYIfU|6}GOcGZh6^V+6DyU=yt@&N=%rlV<_nfz#QA%3 z<;wn8-k-M0)e+W2w%?Sib0Ea_R%R~@m`*5noXjq*CC1u`SS5)Kkm8YldA=b2`GC%kdN{?R3{38R2s%_`&l&rj1iLQQ5 z2xo~&S@O`2SV$XX>6F$)_MXby(GAeM-l?f>@=kfD%5fI=Q$CuGI-rH1{A0t)sNn>EDe@2K`>27^w6^Y;dss`;y1a+QKbY&;+MDcJNsHIV zA~=||w7e31L4~wpAu3eqi)1cth?!6wPVY=9qZy*};Q-E0vC_({3z*^ravo^HS^A0d z@12})zFWw|mC}aM^@;Q$ob66ZoARoYiA@fcvM%w&Wvc} zKhha>dt$RIq@q2jN@fLd=6g!lUdA*;59s=eiX_urt-MDoG4(Q%CiU#nf)K` z?`Sz^Vx-E`gfCb`w#w%&ZeT9q+?>Z*p1}Dkob%m63)%Dy;1RqlsH^fT49Af41LxXp zoTooo$eI?bdOOU)Z0m`t_kGlTK7pzML)H>~O;82>vIP#TRhfq0F``dORatmtmnuYa z6Ztq>HOe{$gOR(OD^GG3&ryXRy96aGRmFJyBs!X)nu(l1``W4Ezc@oum#Gr01Bt~s zs^+inj-gmM=bJPOS+68j@^1@>!rQ18Fa3@L`@y7I;{P7~?lo0LCzw7|R%No*#O9Q# zHdcHgHnN{;Yu-+xAstjZC(IyXam4L2WH$c9T^Xvp*6go80(8_C3zs>8fi*K|~?HsU8k4BC^Th z?4GImlmh2U%20jw%f#fiO!Xz}DYE5b)t91VoZG3zjVK-7uU3ntaK6-`YVq;{aEDs5 zN3C0DEN9RAYTeAoP=iTo{Y7lO|L|Grn)~71;SbbK?FlLHhPvSg1IBn~)Gbmm229?o zZr5}uk?UG@mqH(+#(mV?i%=v4^iq4zgkF3tQu`#qo8Qakd-YuW^3=hL?jnb2)uU{o z22)(sp^cEMG|uWU=?H$V8Rz^^^|(JSprJmdj`V+m%JhVKN=;nv_l7gc$=ui8-gU@4 zb=rQ6qK3{?uMhA;s@$U9o{rU4FIVqq4{LN-q~3Aw7`AJJd4s)elLzX3zg|QWX0N`m z@ERoOj`~6tr0vEn^`)Qf5RiYVub4*=vnw^RCu; z&on`Y8H$$vn$XydL@Qcq!or6T-AmGp>5JG&tl+%sqzRA42tGDl6Fvu?HE*{j{PHXG z0#i7Tjn<6)EeZM>V4;cG=4zt;LK^zpO%o5pv3YKqgdjD_##GL-T^ds<3^K}DlXM*U zZMHvW(N9g%%Tq+_dTR0TZoU(NF1 z8OV>5H7h&&bwb-cf z&|!k6av}mI>4xS_6S&F6*_wYGJc-6m*L>Pmb$&wgIsP%4^z~X=2(24hpcS%S;YC0n z^WOTlrqf#OUmDDL9&+~f(HfNvP@3%48h7=8bRW|i&%2;=`=+fH7J@aoX=^sew4WMj z?Hr2W;KQ`_lfsFtYjS#h(YnRGL~XED+q{Z#h1!m{TjQ0fGiTOd&fl+Udql#?U7fYs z9;-4i>UpK@J*f~`GoSO!HEo}Cc!_H#&i;qYlbvjv?ADGRH4&L-sy6Hb##WmbaF%z` zjwygVb{xZL>S^BVWUIcfjq7+HukSp}B~A{eGHr4UMudUuwaIVM9L3sluKdJVoTpv# zUXde3JeK`J<=Y1hr-B^uFad+0S{lU zJzq5m>TpK;SXqoo=oan!6%|CDg7)(P?0DpU?e{PQ%wN~FKjP=13e3_eHsFDsk~qVY zbgBoJFg>%q>64Q=kE8&irEO${=~HFPokqnj-@#|$=F zH*e$@DEUiW;x-gQb*Ac)Mpzh82W z^VY5M{ejAEy>9KlC*hloben<`h!kIRTee4F+NjcPa~y$<@5i~S1*fU_o8^E_iPh~e zz~C=B=&~!Zv*8iCU+0xUnP%$_2Rw(p>~sa;BC`4^U7<7xp0Yw$)J=&FFp)FxlkR-} z1)|Yjx=ZKIqx{&TiHe+{_HqUA2WM7w=nJ3H+xeb zru$dlGw>AA^+9~zC?sFuFyJPH6sg8uEqO1wz8rGHllfs1di|9mDNUN=JjBL&j+ zZJqw-6BWA5QiH0-Q}p2vI4_9??ISZ@@4e$(JexDC0q5R!oaZtvWKPrS7z}9_5%?~g zy$>3!3h;1EZX0aYsZrcLHfOrHm|hy(UZPfgJ;TtcK7MY^D9)nh2A`+cbloaL@2dZ| z(&(XK!0Fvk$XkYi%J~pJ2g8tFfr##LhLP?|i46`mgymvG64TXNV z&^E(R6am}XT{B!t!1qmh8!jC~Sj;$Jxb(0ZQSJGhK3@%`@Ajc?XlE$1|3UQIM{{Q5 zwu+vO%_WUnm<|~2|A|9#ci>!imb2K)=vv$vFVUtOT^~W1rw4H^d&RjvpYxoJu}$Vp zq7i3}?V=5+TO&C4Z!&s5&W6-9HFn1RS+jmdpH+>Zff2@@=Z>TM`@`rP2}d!-I2rx% z1FZQXW57)mbSXug+s<%ajWbRc(6zLL4PR{P)U0u21&|9idt z|GPf7a3u>@)>TCwoBlbl;Q!pXMn9}(>V(jkv8$psu~xY*>sc$oUKQ!_|E{wcVp;9~ MxpL?x_NvzZ073j>o&W#< delta 9249 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 diff --git a/Bin/Config/Lang/cn/nmNum_cn.ts b/Bin/Config/Lang/cn/nmNum_cn.ts index b604758..4497385 100644 --- a/Bin/Config/Lang/cn/nmNum_cn.ts +++ b/Bin/Config/Lang/cn/nmNum_cn.ts @@ -6793,6 +6793,7 @@ Average pressure in contour: %2 MPa Object display对象显示 Display:显示: No editable objects in this category.此分类中没有可编辑对象。 + Initial oil and water saturations must sum to 1.初始含油饱和度与初始含水饱和度之和必须为 1。
nmWxReservoirPropertiesEditor @@ -6829,9 +6830,12 @@ Average pressure in contour: %2 MPa Position and wellbore位置与井筒 Wellbore storage井筒储集 Wellbore storage and fracture井筒储集与裂缝 - Basic properties基础特性 + Basic and medium properties基础与介质特性 Fluid parameters流体参数 - Compression and saturation压缩与饱和度 + Oil phase parameters油相参数 + Water phase parameters水相参数 + Compressibility压缩系数 + Compressibility and saturation压缩系数与饱和度 Reservoir medium parameters储层介质参数 Geometry几何位置 Flow properties流动属性 diff --git a/Bin/XmlFiles/ModelParaDefinesNM_cn.xml b/Bin/XmlFiles/ModelParaDefinesNM_cn.xml index 540213f..54efcc8 100644 --- a/Bin/XmlFiles/ModelParaDefinesNM_cn.xml +++ b/Bin/XmlFiles/ModelParaDefinesNM_cn.xml @@ -21,10 +21,12 @@ - + + +
diff --git a/Bin/XmlFiles/ModelParaDefinesNM_en.xml b/Bin/XmlFiles/ModelParaDefinesNM_en.xml index 3b32735..23f0745 100644 --- a/Bin/XmlFiles/ModelParaDefinesNM_en.xml +++ b/Bin/XmlFiles/ModelParaDefinesNM_en.xml @@ -22,10 +22,12 @@ - + + +
diff --git a/Include/nmNum/nmSubWxs/nmReservoirParameterField.h b/Include/nmNum/nmSubWxs/nmReservoirParameterField.h index 7669d9f..4409a0e 100644 --- a/Include/nmNum/nmSubWxs/nmReservoirParameterField.h +++ b/Include/nmNum/nmSubWxs/nmReservoirParameterField.h @@ -117,6 +117,9 @@ public: /** @brief 返回当前枚举稳定code。 */ QString enumCode() const; + /** @brief 设置页面级关联校验错误;空文字表示清除关联错误。 */ + void setExternalValidationError(const QString& sError); + /** @brief 校验当前输入,并更新参数范围提示。 */ bool validate(); @@ -159,6 +162,7 @@ private: QComboBox* m_pUnitComboBox; ///< 可换算单位下拉框。 QLabel* m_pUnitLabel; ///< 无单位字段的空白对齐占位。 QColor m_clrNormalText; ///< 输入框默认文字颜色。 + QString m_sExternalValidationError; ///< 页面级关联校验错误文字。 bool m_bVisible; ///< 参数行是否参与编辑。 bool m_bUpdating; ///< 程序写值时阻止业务信号。 }; diff --git a/Include/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.h b/Include/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.h index 02df385..6422d17 100644 --- a/Include/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.h +++ b/Include/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.h @@ -22,6 +22,7 @@ struct NM_SUB_WXS_EXPORT nmReservoirPropertiesSnapshot /** @brief 构造空快照。 */ nmReservoirPropertiesSnapshot(); + int m_nSolverModelType; ///< 打开对话框时的求解器模型类型数值。 nmDataReservoir m_oReservoir; ///< 储层参数副本。 QVector m_vecVerticalWells; ///< 直井参数副本。 QVector m_vecVerticalFracturedWells; ///< 垂直压裂井参数副本。 diff --git a/Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp b/Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp index dc8265d..55a636a 100644 --- a/Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp +++ b/Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp @@ -2,6 +2,7 @@ #include "nmReservoirPropertiesDataSource.h" #include "nmAttrRegistry.h" +#include "nmDataAnalyzeManager.h" #include "nmDataAttribute.h" #include "nmDataPerforation.h" @@ -31,9 +32,12 @@ static const char* const s_pCatalogTranslationMarkers[] = QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Position and wellbore"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Wellbore storage"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Wellbore storage and fracture"), - QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Basic properties"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Basic and medium properties"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Fluid parameters"), - QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Compression and saturation"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Oil phase parameters"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Water phase parameters"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Compressibility"), + QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Compressibility and saturation"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Reservoir parameters"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Vertical well"), QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Fractured vertical well"), @@ -162,6 +166,141 @@ nmReservoirParameterGroupInfo parameterGroup( return oGroup; } +/** @brief 返回当前求解器模型对应的流体参数分组标题。 */ +const char* solverPvtGroupTitle( + int nSolverModelType, + NM_PHASE_TYPE ePhaseType) +{ + switch (nSolverModelType) + { + case SMT_Oil_ConstPvt: + return "Oil phase parameters"; + case SMT_Water_ConstPvt: + return "Water phase parameters"; + default: + if (nSolverModelType == 0 && ePhaseType == PHASE_Oil) + { + return "Oil phase parameters"; + } + if (nSolverModelType == 0 && ePhaseType == PHASE_Water) + { + return "Water phase parameters"; + } + return "Fluid parameters"; + } +} + +/** @brief 按求解器模型向流体分组添加实际使用的PVT单值参数。 */ +void appendSolverPvtFields( + nmReservoirParameterGroupInfo& oGroup, + int nSolverModelType, + NM_PHASE_TYPE ePhaseType) +{ + switch (nSolverModelType) + { + case SMT_Oil_ConstPvt: + oGroup.m_listFields + << numericField("Miuo", "Miuo") + << unitlessNumericField("Bo", "Bo"); + break; + case SMT_Water_ConstPvt: + oGroup.m_listFields + << numericField("Miuw", "Miuw") + << unitlessNumericField("Bw", "Bw"); + break; + default: + // 自定义数据源未提供模型类型时,按单相相态保留兼容入口。 + if (nSolverModelType == 0 && + (ePhaseType == PHASE_Oil || + ePhaseType == PHASE_UNKNOWN)) + { + oGroup.m_listFields + << numericField("Miuo", "Miuo") + << unitlessNumericField("Bo", "Bo"); + } + else if (nSolverModelType == 0 && + ePhaseType == PHASE_Water) + { + oGroup.m_listFields + << numericField("Miuw", "Miuw") + << unitlessNumericField("Bw", "Bw"); + } + break; + } +} + +/** @brief 判断当前模型是否需要编辑初始含水饱和度。 */ +bool solverUsesInitialWaterSaturation( + int nSolverModelType, + NM_PHASE_TYPE ePhaseType) +{ + return nSolverModelType == SMT_Oil_Water_TwoPhase || + (nSolverModelType == 0 && + ePhaseType == PHASE_Oil_Water); +} + +/** @brief 判断当前模型是否需要编辑初始含油饱和度。 */ +bool solverUsesInitialOilSaturation( + int nSolverModelType, + NM_PHASE_TYPE ePhaseType) +{ + return nSolverModelType == SMT_Oil_Water_TwoPhase || + (nSolverModelType == 0 && + ePhaseType == PHASE_Oil_Water); +} + +/** @brief 判断当前模型是否需要编辑初始含气饱和度。 */ +bool solverUsesInitialGasSaturation( + int nSolverModelType, + NM_PHASE_TYPE ePhaseType) +{ + return nSolverModelType == SMT_Gas_VariablePvt || + nSolverModelType == SMT_Gas_PseudoPressure || + (nSolverModelType == 0 && + ePhaseType == PHASE_Gas); +} + +/** @brief 按求解器模型添加实际使用的压缩系数和饱和度参数。 */ +void appendSolverCompressionFields( + nmReservoirParameterGroupInfo& oGroup, + int nSolverModelType, + NM_PHASE_TYPE ePhaseType) +{ + switch (nSolverModelType) + { + case SMT_Oil_ConstPvt: + case SMT_Water_ConstPvt: + oGroup.m_listFields.append(numericField("Cti", "Cti")); + break; + default: + if (nSolverModelType == 0 && + (ePhaseType == PHASE_Oil || + ePhaseType == PHASE_Water || + ePhaseType == PHASE_UNKNOWN)) + { + oGroup.m_listFields.append(numericField("Cti", "Cti")); + } + else + { + oGroup.m_listFields.append(numericField("Cf", "Cf")); + } + break; + } + + if (solverUsesInitialOilSaturation(nSolverModelType, ePhaseType)) + { + oGroup.m_listFields.append(numericField("Soi", "Soi")); + } + if (solverUsesInitialWaterSaturation(nSolverModelType, ePhaseType)) + { + oGroup.m_listFields.append(numericField("Swi", "Swi")); + } + if (solverUsesInitialGasSaturation(nSolverModelType, ePhaseType)) + { + oGroup.m_listFields.append(numericField("Sgi", "Sgi")); + } +} + /** @brief 为参数ID添加对象编码前缀。 */ QString prefixed(const QString& sObjectCode, const char* pParameterId) { @@ -306,10 +445,12 @@ void nmReservoirParameterCatalog::registerSnapshot( pRegistry->regAttr("Cti", &oSnapshot.m_oReservoir.getCt()); pRegistry->regAttr("Cf", &oSnapshot.m_oReservoir.getCf()); pRegistry->regAttr("Soi", &oSnapshot.m_oReservoir.getSoi()); + pRegistry->regAttr("Sgi", &oSnapshot.m_oReservoir.getSgi()); pRegistry->regAttr("Swi", &oSnapshot.m_oReservoir.getSwi()); pRegistry->regAttr("Bo", &oSnapshot.m_oReservoir.getBo()); pRegistry->regAttr("Miuo", &oSnapshot.m_oReservoir.getMiuo()); - pRegistry->regAttr("KxKy", &oSnapshot.m_oReservoir.getKxKy()); + pRegistry->regAttr("Bw", &oSnapshot.m_oReservoir.getBw()); + pRegistry->regAttr("Miuw", &oSnapshot.m_oReservoir.getMiuw()); // 第二步:注册求解器支持的三类井及其压裂参数。 for (int nIndex = 0; @@ -437,8 +578,11 @@ nmReservoirParameterCatalog::createObjectInfos( oInfo.m_sObjectCode = "RESERVOIR"; oInfo.m_sDisplayName = editorText("Reservoir parameters"); + NM_PHASE_TYPE ePhaseType = + oSnapshot.m_oReservoir.getPhaseType(); + nmReservoirParameterGroupInfo oBasic = - parameterGroup("Basic properties", 0, 0, 1); + parameterGroup("Basic and medium properties", 0, 0, 1); oBasic.m_nRowSpan = 2; oBasic.m_bValueRightAligned = true; oBasic.m_listFields @@ -448,21 +592,37 @@ nmReservoirParameterCatalog::createObjectInfos( << numericField("phi", "phi"); nmReservoirParameterGroupInfo oFluid = - parameterGroup("Fluid parameters", 0, 1, 1); - oFluid.m_listFields - << reservoirModelField("ReservoirType") - << numericField("Miuo", "Miuo") - << unitlessNumericField("Bo", "Bo") - << numericField("KxKy", "KxKy"); + parameterGroup(solverPvtGroupTitle( + oSnapshot.m_nSolverModelType, + ePhaseType), + 0, 1, 1); + appendSolverPvtFields(oFluid, + oSnapshot.m_nSolverModelType, + ePhaseType); + bool bUsesSaturation = solverUsesInitialWaterSaturation( + oSnapshot.m_nSolverModelType, ePhaseType) || + solverUsesInitialGasSaturation( + oSnapshot.m_nSolverModelType, ePhaseType); nmReservoirParameterGroupInfo oCompression = - parameterGroup("Compression and saturation", 1, 1, 1); - oCompression.m_listFields - << numericField("Cti", "Cti") - << numericField("Cf", "Cf") - << numericField("Soi", "Soi") - << numericField("Swi", "Swi"); - oInfo.m_listGroups << oBasic << oFluid << oCompression; + parameterGroup(bUsesSaturation + ? "Compressibility and saturation" + : "Compressibility", + oFluid.m_listFields.isEmpty() ? 0 : 1, + 1, 1); + if (oFluid.m_listFields.isEmpty()) + { + oCompression.m_nRowSpan = 2; + } + appendSolverCompressionFields(oCompression, + oSnapshot.m_nSolverModelType, + ePhaseType); + oInfo.m_listGroups.append(oBasic); + if (!oFluid.m_listFields.isEmpty()) + { + oInfo.m_listGroups.append(oFluid); + } + oInfo.m_listGroups.append(oCompression); listInfos.append(oInfo); return listInfos; } diff --git a/Src/nmNum/nmSubWxs/nmReservoirParameterField.cpp b/Src/nmNum/nmSubWxs/nmReservoirParameterField.cpp index e82e0ba..70e2cd6 100644 --- a/Src/nmNum/nmSubWxs/nmReservoirParameterField.cpp +++ b/Src/nmNum/nmSubWxs/nmReservoirParameterField.cpp @@ -66,6 +66,7 @@ nmReservoirParameterField::nmReservoirParameterField( m_pUnitComboBox(nullptr), m_pUnitLabel(nullptr), m_clrNormalText(), + m_sExternalValidationError(), m_bVisible(true), m_bUpdating(false) { @@ -315,6 +316,13 @@ QString nmReservoirParameterField::enumCode() const m_pValueComboBox->currentIndex()).toString(); } +void nmReservoirParameterField::setExternalValidationError( + const QString& sError) +{ + m_sExternalValidationError = sError; + validate(); +} + bool nmReservoirParameterField::validate() { if (!m_bVisible || isEnum()) @@ -345,6 +353,7 @@ bool nmReservoirParameterField::validate() bValid = dValue == static_cast(dValue); } } + bValid = bValid && m_sExternalValidationError.isEmpty(); updateValidationAppearance(bValid); return bValid; } @@ -461,6 +470,14 @@ void nmReservoirParameterField::updateValidationAppearance(bool bValid) } sHelp += sRange; } + if (!m_sExternalValidationError.isEmpty()) + { + if (!sHelp.isEmpty()) + { + sHelp += "\n"; + } + sHelp += m_sExternalValidationError; + } m_pLineEdit->setToolTip(validationToolTip(sHelp, bValid)); m_pLineEdit->setWhatsThis(sHelp); if (m_pLabel != nullptr) diff --git a/Src/nmNum/nmSubWxs/nmReservoirParameterPage.cpp b/Src/nmNum/nmSubWxs/nmReservoirParameterPage.cpp index b1d2884..8f50929 100644 --- a/Src/nmNum/nmSubWxs/nmReservoirParameterPage.cpp +++ b/Src/nmNum/nmSubWxs/nmReservoirParameterPage.cpp @@ -10,6 +10,7 @@ #include #include #include +#include nmReservoirParameterPage::nmReservoirParameterPage( nmReservoirPropertiesCategory eCategory, @@ -375,6 +376,20 @@ bool nmReservoirParameterPage::commitPendingEdits() bool nmReservoirParameterPage::isInputValid() { + nmReservoirParameterField* pSoiField = + m_mapFields.value("Soi", nullptr); + nmReservoirParameterField* pSwiField = + m_mapFields.value("Swi", nullptr); + if (pSoiField != nullptr) + { + pSoiField->setExternalValidationError(QString()); + } + if (pSwiField != nullptr) + { + pSwiField->setExternalValidationError(QString()); + } + + bool bAllValid = true; for (int nFieldIndex = 0; nFieldIndex < m_listFields.size(); ++nFieldIndex) @@ -384,10 +399,32 @@ bool nmReservoirParameterPage::isInputValid() if (pField != nullptr && pField->isFieldVisible() && !pField->validate()) { - return false; + bAllValid = false; } } - return true; + + // 油水两相同时显示两个初始饱和度时,两者之和必须为1。 + if (pSoiField != nullptr && pSwiField != nullptr && + pSoiField->isFieldVisible() && + pSwiField->isFieldVisible()) + { + bool bSoiValid = false; + bool bSwiValid = false; + QVariant oSoi = pSoiField->baseValue(bSoiValid); + QVariant oSwi = pSwiField->baseValue(bSwiValid); + const double dTolerance = 1.0e-6; + if (bSoiValid && bSwiValid && + qAbs(oSoi.toDouble() + oSwi.toDouble() - 1.0) > + dTolerance) + { + QString sError = tr( + "Initial oil and water saturations must sum to 1."); + pSoiField->setExternalValidationError(sError); + pSwiField->setExternalValidationError(sError); + bAllValid = false; + } + } + return bAllValid; } void nmReservoirParameterPage::slotFieldValueEdited() diff --git a/Src/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.cpp b/Src/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.cpp index c10ada0..0502ac6 100644 --- a/Src/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.cpp +++ b/Src/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.cpp @@ -5,6 +5,7 @@ #include "nmWxParameterProperty.h" nmReservoirPropertiesSnapshot::nmReservoirPropertiesSnapshot() + : m_nSolverModelType(0) { } @@ -34,7 +35,9 @@ bool nmAnalyzeManagerReservoirDataSource::loadSnapshot( return false; } - // 第二步:复制储层和几何对象,确保界面编辑不会触碰实时数据。 + // 第二步:复制求解器模型、储层和几何对象,确保界面编辑不会触碰实时数据。 + oSnapshot.m_nSolverModelType = + static_cast(m_pDataManager->getSolverModelType()); oSnapshot.m_oReservoir = m_pDataManager->getReservoirDataCopy(); oSnapshot.m_vecRegionMarks = m_pDataManager->getRegionMarkDataListCopy(); oSnapshot.m_vecFaults = m_pDataManager->getFaultDataListCopy(); diff --git a/Src/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.cpp b/Src/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.cpp index 2beb682..fe0bd13 100644 --- a/Src/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.cpp +++ b/Src/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.cpp @@ -48,7 +48,7 @@ nmWxReservoirPropertiesEditor::nmWxReservoirPropertiesEditor( setWindowTitle(tr("Reservoir properties settings")); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); // 首次打开使用建议尺寸,后续最小宽高均由页面内容和布局自动决定。 - resize(880, 520); + resize(880, 480); } nmWxReservoirPropertiesEditor::~nmWxReservoirPropertiesEditor()