bytefun-ai-mcp 1.3.0 → 1.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/prompt-optimizer.d.ts +29 -13
- package/build/prompt-optimizer.d.ts.map +1 -1
- package/build/prompt-optimizer.js +39 -125
- package/package.json +1 -1
|
@@ -13,18 +13,28 @@
|
|
|
13
13
|
* 4. UI设计需求 → 调用 optimizeUIDesignPrompt()
|
|
14
14
|
* 5. 代码开发需求 → 调用 optimizeCodePrompt()
|
|
15
15
|
*
|
|
16
|
-
*
|
|
17
|
-
* 1. 页面列表 + 页面修复 + 产品设计 → 调用 optimizePageListAndProductDesignPrompt()
|
|
18
|
-
* 2.
|
|
19
|
-
* 3.
|
|
20
|
-
* 4.
|
|
21
|
-
* 5.
|
|
22
|
-
*
|
|
16
|
+
* 推荐的分阶段复合工具(包含停顿检查点):
|
|
17
|
+
* 1. 页面列表 + 页面修复 + 产品设计 → 调用 optimizePageListAndProductDesignPrompt() ⭐推荐阶段一
|
|
18
|
+
* 2. UI设计 → 调用 optimizeUIDesignPrompt() ⭐推荐阶段二
|
|
19
|
+
* 3. 代码编写 → 调用 optimizeCodePrompt() ⭐推荐阶段三
|
|
20
|
+
* 4. 页面列表 + 页面修复 + UI设计 → 调用 optimizePageListAndUIDesignPrompt() ⭐快速流程阶段一
|
|
21
|
+
* 5. UI设计 + 代码编写 → 调用 optimizeUIDesignAndCodePrompt() ⭐已有需求流程
|
|
22
|
+
*
|
|
23
|
+
* 不推荐的长流程(缺少停顿检查点,保留用于兼容性):
|
|
24
|
+
* 6. 页面列表 + 页面修复 + 产品设计 + UI设计 → optimizePageListProductDesignAndUIPrompt() ⚠️不推荐
|
|
25
|
+
* 7. 页面列表 + 页面修复 + 产品设计 + UI设计 + 代码编写 → optimizeFullWorkflowWithProductDesignPrompt() ⚠️不推荐
|
|
26
|
+
* 8. 页面列表 + 页面修复 + UI设计 + 代码编写 → optimizeFullWorkflowPrompt() ⚠️不推荐
|
|
27
|
+
*
|
|
28
|
+
* 推荐工作流程(分阶段执行):
|
|
29
|
+
* - 标准完整开发:阶段一(页面列表+修复+产品设计) → 停顿检查 → 阶段二(UI设计) → 停顿检查 → 阶段三(代码开发)
|
|
30
|
+
* - 快速UI设计:阶段一(页面列表+修复+UI设计) → 停顿检查 → 阶段二(代码开发)
|
|
31
|
+
* - 已有需求开发:阶段一(UI设计) → 停顿检查 → 阶段二(代码开发)
|
|
23
32
|
*
|
|
24
33
|
* 数据传递逻辑:
|
|
25
34
|
* - {{PAGE_LIST_RESULT}} 代表 optimize_pageList_prompt 的结果
|
|
26
35
|
* - {{FIXED_PAGE_LIST_RESULT}} 代表 optimize_fix_pageList_prompt 的修复后结果
|
|
27
36
|
* - 产品设计和UI设计基于修复后的页面列表进行,确保页面完整性
|
|
37
|
+
* - ⚠️ 重要:产品设计完成后必须停顿检查,UI设计完成后必须停顿检查
|
|
28
38
|
*/
|
|
29
39
|
export declare class PromptOptimizer {
|
|
30
40
|
private readonly pageListPromptTemplate;
|
|
@@ -58,8 +68,9 @@ export declare class PromptOptimizer {
|
|
|
58
68
|
*/
|
|
59
69
|
optimizeUIDesignPrompt(userInput: string, pageList?: string): Promise<string>;
|
|
60
70
|
/**
|
|
61
|
-
*
|
|
71
|
+
* ⭐推荐阶段一:页面列表 + 页面修复 + 产品设计
|
|
62
72
|
* 先分析页面列表,然后修复页面列表,最后基于修复后的页面列表生成产品需求文档
|
|
73
|
+
* 🛑 停顿点:产品设计完成后必须停顿,等待用户确认后再进行UI设计
|
|
63
74
|
*/
|
|
64
75
|
optimizePageListAndProductDesignPrompt(userInput: string): Promise<{
|
|
65
76
|
pageListPrompt: string;
|
|
@@ -67,8 +78,9 @@ export declare class PromptOptimizer {
|
|
|
67
78
|
productDesignPrompt: string;
|
|
68
79
|
}>;
|
|
69
80
|
/**
|
|
70
|
-
*
|
|
81
|
+
* ⚠️不推荐:页面列表 + 页面修复 + 产品设计 + UI设计(缺少停顿检查点)
|
|
71
82
|
* 完整的设计流程:页面列表分析 → 页面列表修复 → 产品需求设计 → UI设计
|
|
83
|
+
* 注意:此方法缺少产品设计和UI设计之间的停顿检查点,不推荐使用
|
|
72
84
|
*/
|
|
73
85
|
optimizePageListProductDesignAndUIPrompt(userInput: string): Promise<{
|
|
74
86
|
pageListPrompt: string;
|
|
@@ -77,8 +89,9 @@ export declare class PromptOptimizer {
|
|
|
77
89
|
uiDesignPrompt: string;
|
|
78
90
|
}>;
|
|
79
91
|
/**
|
|
80
|
-
*
|
|
92
|
+
* ⚠️不推荐:页面列表 + 页面修复 + 产品设计 + UI设计 + 代码编写(缺少停顿检查点)
|
|
81
93
|
* 完整的开发流程:页面列表分析 → 页面列表修复 → 产品需求设计 → UI设计 → 代码开发
|
|
94
|
+
* 注意:此方法缺少多个关键停顿检查点,不推荐使用
|
|
82
95
|
*/
|
|
83
96
|
optimizeFullWorkflowWithProductDesignPrompt(userInput: string): Promise<{
|
|
84
97
|
pageListPrompt: string;
|
|
@@ -88,16 +101,18 @@ export declare class PromptOptimizer {
|
|
|
88
101
|
codePrompt: string;
|
|
89
102
|
}>;
|
|
90
103
|
/**
|
|
91
|
-
*
|
|
104
|
+
* ⭐已有需求流程:UI设计 + 代码编写
|
|
92
105
|
* 先进行UI设计,然后进行代码开发
|
|
106
|
+
* 🛑 停顿点:UI设计完成后必须停顿,等待用户确认后再进行代码开发
|
|
93
107
|
*/
|
|
94
108
|
optimizeUIDesignAndCodePrompt(userInput: string): Promise<{
|
|
95
109
|
uiDesignPrompt: string;
|
|
96
110
|
codePrompt: string;
|
|
97
111
|
}>;
|
|
98
112
|
/**
|
|
99
|
-
*
|
|
113
|
+
* ⭐快速流程阶段一:页面列表 + 页面修复 + UI设计
|
|
100
114
|
* 先分析页面列表,然后修复页面列表,再基于修复后的页面列表进行UI设计
|
|
115
|
+
* 🛑 停顿点:UI设计完成后必须停顿,等待用户确认后再进行代码开发
|
|
101
116
|
*/
|
|
102
117
|
optimizePageListAndUIDesignPrompt(userInput: string): Promise<{
|
|
103
118
|
pageListPrompt: string;
|
|
@@ -105,8 +120,9 @@ export declare class PromptOptimizer {
|
|
|
105
120
|
uiDesignPrompt: string;
|
|
106
121
|
}>;
|
|
107
122
|
/**
|
|
108
|
-
*
|
|
123
|
+
* ⚠️不推荐:页面列表 + 页面修复 + UI设计 + 代码编写(缺少停顿检查点)
|
|
109
124
|
* 完整的工作流程:页面列表分析 → 页面列表修复 → UI设计 → 代码开发
|
|
125
|
+
* 注意:此方法缺少UI设计和代码开发之间的停顿检查点,不推荐使用
|
|
110
126
|
*/
|
|
111
127
|
optimizeFullWorkflowPrompt(userInput: string): Promise<{
|
|
112
128
|
pageListPrompt: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-optimizer.d.ts","sourceRoot":"","sources":["../src/prompt-optimizer.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"prompt-optimizer.d.ts","sourceRoot":"","sources":["../src/prompt-optimizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,18 +13,28 @@
|
|
|
13
13
|
* 4. UI设计需求 → 调用 optimizeUIDesignPrompt()
|
|
14
14
|
* 5. 代码开发需求 → 调用 optimizeCodePrompt()
|
|
15
15
|
*
|
|
16
|
-
*
|
|
17
|
-
* 1. 页面列表 + 页面修复 + 产品设计 → 调用 optimizePageListAndProductDesignPrompt()
|
|
18
|
-
* 2.
|
|
19
|
-
* 3.
|
|
20
|
-
* 4.
|
|
21
|
-
* 5.
|
|
22
|
-
*
|
|
16
|
+
* 推荐的分阶段复合工具(包含停顿检查点):
|
|
17
|
+
* 1. 页面列表 + 页面修复 + 产品设计 → 调用 optimizePageListAndProductDesignPrompt() ⭐推荐阶段一
|
|
18
|
+
* 2. UI设计 → 调用 optimizeUIDesignPrompt() ⭐推荐阶段二
|
|
19
|
+
* 3. 代码编写 → 调用 optimizeCodePrompt() ⭐推荐阶段三
|
|
20
|
+
* 4. 页面列表 + 页面修复 + UI设计 → 调用 optimizePageListAndUIDesignPrompt() ⭐快速流程阶段一
|
|
21
|
+
* 5. UI设计 + 代码编写 → 调用 optimizeUIDesignAndCodePrompt() ⭐已有需求流程
|
|
22
|
+
*
|
|
23
|
+
* 不推荐的长流程(缺少停顿检查点,保留用于兼容性):
|
|
24
|
+
* 6. 页面列表 + 页面修复 + 产品设计 + UI设计 → optimizePageListProductDesignAndUIPrompt() ⚠️不推荐
|
|
25
|
+
* 7. 页面列表 + 页面修复 + 产品设计 + UI设计 + 代码编写 → optimizeFullWorkflowWithProductDesignPrompt() ⚠️不推荐
|
|
26
|
+
* 8. 页面列表 + 页面修复 + UI设计 + 代码编写 → optimizeFullWorkflowPrompt() ⚠️不推荐
|
|
27
|
+
*
|
|
28
|
+
* 推荐工作流程(分阶段执行):
|
|
29
|
+
* - 标准完整开发:阶段一(页面列表+修复+产品设计) → 停顿检查 → 阶段二(UI设计) → 停顿检查 → 阶段三(代码开发)
|
|
30
|
+
* - 快速UI设计:阶段一(页面列表+修复+UI设计) → 停顿检查 → 阶段二(代码开发)
|
|
31
|
+
* - 已有需求开发:阶段一(UI设计) → 停顿检查 → 阶段二(代码开发)
|
|
23
32
|
*
|
|
24
33
|
* 数据传递逻辑:
|
|
25
34
|
* - {{PAGE_LIST_RESULT}} 代表 optimize_pageList_prompt 的结果
|
|
26
35
|
* - {{FIXED_PAGE_LIST_RESULT}} 代表 optimize_fix_pageList_prompt 的修复后结果
|
|
27
36
|
* - 产品设计和UI设计基于修复后的页面列表进行,确保页面完整性
|
|
37
|
+
* - ⚠️ 重要:产品设计完成后必须停顿检查,UI设计完成后必须停顿检查
|
|
28
38
|
*/
|
|
29
39
|
export class PromptOptimizer {
|
|
30
40
|
pageListPromptTemplate = `# 你是APP产品经理专家,现在需要你根据用户输入的需求描述,遵循"分析规则"分析出所需要的完整的页面列表。
|
|
@@ -79,7 +89,7 @@ export class PromptOptimizer {
|
|
|
79
89
|
- 输出页面总数,以及按照模块层级,将所有"页面名称"以分层列表形式展示。
|
|
80
90
|
- 确保每个页面都已"点亮"所有交互元素点击跳转的目标页面都在清单中出现。`;
|
|
81
91
|
fixPageListPromptTemplate = `你是APP产品经理专家,optimize_pageList_prompt得出的页面列表结果并不齐全,你必须再次进行分析,分析出更多所需页面,将已经得出的页面列表复盘检查一次是否有缺漏,必须是一个页面完整齐全的APP,举个例子:设置页里面有很多个子设置项,那么子设置项有需要新开页面的也必须列出来一个单独的页面。其他页面也是如此,也要进行分析是否有不齐全的页面路径漏掉了。`;
|
|
82
|
-
productDesignPromptTemplate = `# 你是产品经理专家,需要分析用户需求描述,然后根据'通用需求文档模板',输出一份标准的**产品需求文档**,然后将生成的需求文档写入到当前工程目录下面的doc文件夹下面的
|
|
92
|
+
productDesignPromptTemplate = `# 你是产品经理专家,需要分析用户需求描述,然后根据'通用需求文档模板',输出一份标准的**产品需求文档**,然后将生成的需求文档写入到当前工程目录下面的doc文件夹下面的XXX-产品需求文档.md,其中XXX是根据用户需求描述来命名。
|
|
83
93
|
|
|
84
94
|
**重要说明**:
|
|
85
95
|
- 这是**纯产品需求文档**,专注于产品功能、业务逻辑、用户体验需求
|
|
@@ -91,31 +101,10 @@ export class PromptOptimizer {
|
|
|
91
101
|
|
|
92
102
|
---
|
|
93
103
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
* **文档目的**:简要说明本需求文档的用途和适用范围。
|
|
97
|
-
* **版本记录**:
|
|
98
|
-
|
|
99
|
-
\`\`\`
|
|
100
|
-
| 版本号 | 日期 | 作者 | 修改内容 |
|
|
101
|
-
| ------ | ---------- | ---- | -------- |
|
|
102
|
-
| 1.0 | YYYY-MM-DD | XX | 初始版本 |
|
|
103
|
-
\`\`\`
|
|
104
|
-
* **读者对象**:产品经理、研发、测试、设计等相关角色。
|
|
105
|
-
* **术语说明**:列出文档中出现的专业术语或缩写,并做简要解释。
|
|
106
|
-
|
|
107
|
-
---
|
|
108
|
-
|
|
109
|
-
### 2. 整体概览
|
|
110
|
-
|
|
111
|
-
1. **项目背景与定位**
|
|
112
|
-
|
|
104
|
+
1. 项目背景与定位
|
|
113
105
|
* 说明 APP 面向的目标用户和核心价值、业务场景。
|
|
114
106
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
### 3. 页面列表(按展示顺序)
|
|
118
|
-
|
|
107
|
+
2. 页面列表(按展示顺序)
|
|
119
108
|
不需要自己分析功能模块和页面列表,你直接根据第二步列出所需页面列表\`optimize_fix_pageList_prompt\`得出的所有模块和页面列表,先列出所有页面名称、所属模块、简要说明与跳转入口,按以下示例格式写出来。
|
|
120
109
|
。示例格式:
|
|
121
110
|
|
|
@@ -133,96 +122,15 @@ export class PromptOptimizer {
|
|
|
133
122
|
|
|
134
123
|
---
|
|
135
124
|
|
|
136
|
-
###
|
|
137
|
-
|
|
138
|
-
按"页面列表"中顺序,依次展开每个页面的以下内容。每个页面一节,建议使用二级或三级标题。
|
|
139
|
-
|
|
140
|
-
#### 4.X 页面名称(示例:闪屏页)
|
|
141
|
-
|
|
142
|
-
1. **页面概述**
|
|
143
|
-
|
|
144
|
-
* 功能定位、何时展示、特殊说明。
|
|
145
|
-
|
|
146
|
-
2. **跳转关系**
|
|
147
|
-
|
|
148
|
-
* **来源**:列出所有可能跳转到本页的入口场景。
|
|
149
|
-
* **目标**:本页完成后跳转到哪些页面、在何种条件下跳转。
|
|
150
|
-
|
|
151
|
-
3. **UI 组件清单**
|
|
152
|
-
|
|
153
|
-
* 列出本页所有可视组件及其层级(如:背景、Logo、按钮、文本、动画控件等)。
|
|
154
|
-
* 如果有多个交互区域,可用子列表标明。
|
|
155
|
-
|
|
156
|
-
4. **交互逻辑**
|
|
157
|
-
|
|
158
|
-
* 对每个 UI 组件的行为描述:
|
|
159
|
-
|
|
160
|
-
* 点击/滑动/输入/焦点变化 等交互方式会触发什么反馈。
|
|
161
|
-
* 如有倒计时、动画播放等异步行为,要说明触发时机和结束逻辑。
|
|
162
|
-
|
|
163
|
-
5. **业务逻辑**
|
|
164
|
-
|
|
165
|
-
* 需要调用的后端接口(接口地址、请求方式、主要请求参数、返回关键字段)。
|
|
166
|
-
* 数据检查/校验规则,包括前端校验和后端返回的错误处理。
|
|
167
|
-
* 本地存储与缓存:哪些数据保存在本地(Token、用户偏好、本地标记等)。
|
|
168
|
-
|
|
169
|
-
6. **数据来源与更新**
|
|
170
|
-
|
|
171
|
-
* 静态数据:如果页面内容为静态资源,列出资源位置(如本地图片、配置文件)。
|
|
172
|
-
* 动态数据:接口返回数据字段说明、数据刷新/拉取时机(如下拉刷新、定时刷新)。
|
|
173
|
-
|
|
174
|
-
7. **特殊状态 & 异常处理**
|
|
175
|
-
|
|
176
|
-
* **加载中态**:当请求未返回时的展示效果(转圈动画、骨架屏等)。
|
|
177
|
-
* **空状态**:无数据时的占位图/文案。
|
|
178
|
-
* **错误状态**:网络异常、接口失败、数据解析异常时的弹窗或提示文案。
|
|
179
|
-
|
|
180
|
-
8. **与其他页面的数据/逻辑关系**
|
|
181
|
-
|
|
182
|
-
* 本页如何接收来自上一个页面的参数(如通过路由、Intent、回调)。
|
|
183
|
-
* 本页操作成功后如何传递数据给下一个页面或对全局状态进行更新。
|
|
184
|
-
|
|
185
|
-
9. **埋点**
|
|
186
|
-
|
|
187
|
-
* 列出本页需埋点的事件名称及触发时机(如"页面展示"、"按钮点击"、"表单提交成功/失败"等)。
|
|
188
|
-
* 参数说明:上报哪些指标(按钮 ID、页面停留时长、错误码等)。
|
|
189
|
-
|
|
190
|
-
---
|
|
191
|
-
|
|
192
|
-
### 5. 全局跳转流程 & 数据流
|
|
193
|
-
|
|
194
|
-
* **文字说明**:可在本章用文字方式,概括主要页面间的跳转顺序与数据传递逻辑。例如:
|
|
195
|
-
|
|
196
|
-
1. 闪屏页 →(首次打开)新手引导页 → 登录/首页
|
|
197
|
-
2. 首页 → 搜索页 → 详情页 → 购物车/支付页
|
|
198
|
-
3. 任意需要授权页面 → 若未登录→ 登录页 → 返回原页面
|
|
199
|
-
|
|
200
|
-
* **全局共享数据说明**:
|
|
201
|
-
|
|
202
|
-
* 用户登录态(accessToken、refreshToken)
|
|
203
|
-
* 用户信息(userId、昵称、头像、本地偏好等)
|
|
204
|
-
* 购物车状态、未读消息数、APP 配置开关等
|
|
205
|
-
|
|
206
|
-
### 6. 需求文档写入
|
|
207
|
-
- 生成的需求文档写入到当前工程目录下面的doc文件夹下面的XXXProductDesign.md,其中XXX是根据用户需求描述来命名。
|
|
208
|
-
|
|
209
|
-
**重要限制**:
|
|
210
|
-
- **禁止生成技术规范**:不得包含UI设计规范、交互规范、开发规范、技术架构等技术实现细节
|
|
211
|
-
- **禁止生成实现方案**:不得涉及前端框架选择、后端技术栈、数据库设计等技术选型
|
|
212
|
-
- **专注产品需求**:文档应专注于产品功能需求、业务逻辑、用户体验需求等产品层面的内容
|
|
213
|
-
- **避免技术细节**:不得描述具体的代码实现、接口设计、数据结构等开发层面的内容
|
|
214
|
-
- **严格按照模板结构**:文档必须严格按照上述5个章节结构编写,不得自行添加其他章节
|
|
215
|
-
- **章节内容限制**:每个章节只能包含模板中指定的内容,不得扩展到技术实现领域
|
|
125
|
+
### 需求文档写入
|
|
126
|
+
- 生成的需求文档写入到当前工程目录下面的doc文件夹下面的XXX-产品需求文档.md,其中XXX是根据用户需求描述来命名。
|
|
216
127
|
|
|
217
|
-
###
|
|
218
|
-
- 当产品需求文档写入完成后,必须告知用户:"✅ **产品需求文档已完成!**请您先查看 doc/
|
|
219
|
-
- **⚠️ 重要:这是工作流暂停点!在用户明确表示确认需求文档无问题并要求继续进行UI设计之前,绝对不能自动进行下一步工作。**
|
|
220
|
-
- **⚠️ 如果系统自动继续执行了UI设计,说明工作流配置有问题,需要停止自动执行。**
|
|
221
|
-
- 在用户确认需求文档无问题或完成修改后,才能继续进行后续的UI设计或代码开发工作。`;
|
|
128
|
+
### 完成确认
|
|
129
|
+
- 当产品需求文档写入完成后,必须告知用户:"✅ **产品需求文档已完成!**请您先查看 doc/XXX-产品需求文档.md 文件,仔细阅读需求文档内容,确认是否有需要修改的地方。如果有修改意见,请告诉我具体的修改要求。确认需求文档无问题或修改完毕后,请告诉我可以进行下一步的UI设计工作。"`;
|
|
222
130
|
codePromptTemplate = `# 你是typescript代码专家,根据'规则'、'例子'和用户输入的需求描述,完成代码开发
|
|
223
131
|
|
|
224
132
|
## 重要说明
|
|
225
|
-
- 在开始代码开发之前,必须先查看当前工程目录下的doc文件夹中的产品需求文档(如
|
|
133
|
+
- 在开始代码开发之前,必须先查看当前工程目录下的doc文件夹中的产品需求文档(如XXX-产品需求文档.md),严格按照需求文档中的页面定义、交互逻辑、业务逻辑进行代码开发。
|
|
226
134
|
- 如果发现需求文档不存在,则按照用户需求描述进行开发。如果需求文档存在,则严格按照需求文档的规范进行开发,不得偏离需求文档的定义。
|
|
227
135
|
|
|
228
136
|
## 项目框架描述
|
|
@@ -326,7 +234,7 @@ export default class HomePageData {
|
|
|
326
234
|
- **从第一个页面开始,连续设计到最后一个页面为止**
|
|
327
235
|
|
|
328
236
|
## 重要说明
|
|
329
|
-
- 在开始UI设计之前,必须先查看当前工程目录下的doc文件夹中的产品需求文档(如
|
|
237
|
+
- 在开始UI设计之前,必须先查看当前工程目录下的doc文件夹中的产品需求文档(如XXX-产品需求文档.md),严格按照需求文档中的页面定义、UI组件清单、交互逻辑进行设计。
|
|
330
238
|
- 如果发现需求文档不存在,则按照用户需求描述进行设计。如果需求文档存在,则严格按照需求文档的页面列表和详细需求进行设计,不得偏离需求文档的定义。
|
|
331
239
|
|
|
332
240
|
## 请按照以下要求输出一套完整的高质量APP原型图:
|
|
@@ -606,8 +514,9 @@ ${pageList}
|
|
|
606
514
|
${userInput}`;
|
|
607
515
|
}
|
|
608
516
|
/**
|
|
609
|
-
*
|
|
517
|
+
* ⭐推荐阶段一:页面列表 + 页面修复 + 产品设计
|
|
610
518
|
* 先分析页面列表,然后修复页面列表,最后基于修复后的页面列表生成产品需求文档
|
|
519
|
+
* 🛑 停顿点:产品设计完成后必须停顿,等待用户确认后再进行UI设计
|
|
611
520
|
*/
|
|
612
521
|
async optimizePageListAndProductDesignPrompt(userInput) {
|
|
613
522
|
const pageListPrompt = await this.optimizePageListPrompt(userInput);
|
|
@@ -621,8 +530,9 @@ ${userInput}`;
|
|
|
621
530
|
};
|
|
622
531
|
}
|
|
623
532
|
/**
|
|
624
|
-
*
|
|
533
|
+
* ⚠️不推荐:页面列表 + 页面修复 + 产品设计 + UI设计(缺少停顿检查点)
|
|
625
534
|
* 完整的设计流程:页面列表分析 → 页面列表修复 → 产品需求设计 → UI设计
|
|
535
|
+
* 注意:此方法缺少产品设计和UI设计之间的停顿检查点,不推荐使用
|
|
626
536
|
*/
|
|
627
537
|
async optimizePageListProductDesignAndUIPrompt(userInput) {
|
|
628
538
|
const pageListPrompt = await this.optimizePageListPrompt(userInput);
|
|
@@ -638,8 +548,9 @@ ${userInput}`;
|
|
|
638
548
|
};
|
|
639
549
|
}
|
|
640
550
|
/**
|
|
641
|
-
*
|
|
551
|
+
* ⚠️不推荐:页面列表 + 页面修复 + 产品设计 + UI设计 + 代码编写(缺少停顿检查点)
|
|
642
552
|
* 完整的开发流程:页面列表分析 → 页面列表修复 → 产品需求设计 → UI设计 → 代码开发
|
|
553
|
+
* 注意:此方法缺少多个关键停顿检查点,不推荐使用
|
|
643
554
|
*/
|
|
644
555
|
async optimizeFullWorkflowWithProductDesignPrompt(userInput) {
|
|
645
556
|
const pageListPrompt = await this.optimizePageListPrompt(userInput);
|
|
@@ -657,8 +568,9 @@ ${userInput}`;
|
|
|
657
568
|
};
|
|
658
569
|
}
|
|
659
570
|
/**
|
|
660
|
-
*
|
|
571
|
+
* ⭐已有需求流程:UI设计 + 代码编写
|
|
661
572
|
* 先进行UI设计,然后进行代码开发
|
|
573
|
+
* 🛑 停顿点:UI设计完成后必须停顿,等待用户确认后再进行代码开发
|
|
662
574
|
*/
|
|
663
575
|
async optimizeUIDesignAndCodePrompt(userInput) {
|
|
664
576
|
const uiDesignPrompt = await this.optimizeUIDesignPrompt(userInput);
|
|
@@ -669,8 +581,9 @@ ${userInput}`;
|
|
|
669
581
|
};
|
|
670
582
|
}
|
|
671
583
|
/**
|
|
672
|
-
*
|
|
584
|
+
* ⭐快速流程阶段一:页面列表 + 页面修复 + UI设计
|
|
673
585
|
* 先分析页面列表,然后修复页面列表,再基于修复后的页面列表进行UI设计
|
|
586
|
+
* 🛑 停顿点:UI设计完成后必须停顿,等待用户确认后再进行代码开发
|
|
674
587
|
*/
|
|
675
588
|
async optimizePageListAndUIDesignPrompt(userInput) {
|
|
676
589
|
const pageListPrompt = await this.optimizePageListPrompt(userInput);
|
|
@@ -684,8 +597,9 @@ ${userInput}`;
|
|
|
684
597
|
};
|
|
685
598
|
}
|
|
686
599
|
/**
|
|
687
|
-
*
|
|
600
|
+
* ⚠️不推荐:页面列表 + 页面修复 + UI设计 + 代码编写(缺少停顿检查点)
|
|
688
601
|
* 完整的工作流程:页面列表分析 → 页面列表修复 → UI设计 → 代码开发
|
|
602
|
+
* 注意:此方法缺少UI设计和代码开发之间的停顿检查点,不推荐使用
|
|
689
603
|
*/
|
|
690
604
|
async optimizeFullWorkflowPrompt(userInput) {
|
|
691
605
|
const pageListPrompt = await this.optimizePageListPrompt(userInput);
|
|
@@ -729,4 +643,4 @@ ${userInput}`;
|
|
|
729
643
|
return await this.optimizeUIDesignPrompt(userInput, fixedPageListResult);
|
|
730
644
|
}
|
|
731
645
|
}
|
|
732
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbXB0LW9wdGltaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm9tcHQtb3B0aW1pemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUNULHNCQUFzQixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt5Q0FrREgsQ0FBQztJQUV2Qix5QkFBeUIsR0FBRywyTEFBMkwsQ0FBQztJQUV4TiwyQkFBMkIsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyQ0EySU4sQ0FBQztJQUV6QixrQkFBa0IsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWlHdEMsQ0FBQztJQUVnQixzQkFBc0IsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBK00zQyxDQUFDO0lBRUE7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLHNCQUFzQixDQUFDLFNBQWlCO1FBQzVDLE9BQU8sR0FBRyxJQUFJLENBQUMsc0JBQXNCOzs7RUFH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RyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUNsRyx5QkFBeUI7UUFDekIsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLDRCQUE0QixDQUFDLENBQUM7UUFDbEcsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFNUQsT0FBTztZQUNMLGNBQWM7WUFDZCxpQkFBaUI7WUFDakIsY0FBYztZQUNkLFVBQVU7U0FDWCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxTQUFpQixFQUFFLGNBQXNCO1FBQ3JGLE9BQU8sTUFBTSxJQUFJLENBQUMsMkJBQTJCLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsa0NBQWtDLENBQUMsU0FBaUIsRUFBRSxjQUFzQjtRQUNoRixPQUFPLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLDRDQUE0QyxDQUFDLFNBQWlCLEVBQUUsbUJBQTJCO1FBQy9GLE9BQU8sTUFBTSxJQUFJLENBQUMsMkJBQTJCLENBQUMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxTQUFpQixFQUFFLG1CQUEyQjtRQUMxRixPQUFPLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQzNFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQnl0ZUZ1biBBSSBNQ1Ag5o+Q56S66K+N5LyY5YyW5ZmoXG4gKiBcbiAqIOmHjeimgeivtOaYju+8mlxuICogLSDmnKznsbvmj5DkvpvkupTkuKrni6znq4vnmoTkvJjljJblt6XlhbflkozlpI3lkIjosIPnlKjpk77lip/og71cbiAqIC0g5q+P5Liq5Y2V5LiA5bel5YW35aSE55CG5LiN5ZCM57G75Z6L55qE6ZyA5rGC77yM5aSN5ZCI5bel5YW35pSv5oyB5aSa5Liq5bel5YW355qE57uE5ZCI6LCD55SoXG4gKiAtIOmhtemdouWIl+ihqOS/ruWkjeWKn+iDveehruS/nemhtemdouWujOaVtOaAp++8jOS/ruWkjeWQjueahOe7k+aenOeUqOS6juWQjue7reeahOS6p+WTgeiuvuiuoeWSjFVJ6K6+6K6hXG4gKiBcbiAqIOWNleS4gOW3peWFt+S9v+eUqOaWueW8j++8mlxuICogMS4g6aG16Z2i5YiX6KGo5YiG5p6Q6ZyA5rGCIOKGkiDosIPnlKggb3B0aW1pemVQYWdlTGlzdFByb21wdCgpXG4gKiAyLiDpobXpnaLliJfooajkv67lpI3pnIDmsYIg4oaSIOiwg+eUqCBvcHRpbWl6ZUZpeFBhZ2VMaXN0UHJvbXB0KClcbiAqIDMuIOS6p+WTgemcgOaxguiuvuiuoemcgOaxgiDihpIg6LCD55SoIG9wdGltaXplUHJvZHVjdERlc2lnblByb21wdCgpXG4gKiA0LiBVSeiuvuiuoemcgOaxgiDihpIg6LCD55SoIG9wdGltaXplVUlEZXNpZ25Qcm9tcHQoKSAgXG4gKiA1LiDku6PnoIHlvIDlj5HpnIDmsYIg4oaSIOiwg+eUqCBvcHRpbWl6ZUNvZGVQcm9tcHQoKVxuICogXG4gKiDlpI3lkIjlt6Xlhbfkvb/nlKjmlrnlvI/vvIjljIXlkKvpobXpnaLliJfooajkv67lpI3vvInvvJpcbiAqIDEuIOmhtemdouWIl+ihqCArIOmhtemdouS/ruWkjSArIOS6p+WTgeiuvuiuoSDihpIg6LCD55SoIG9wdGltaXplUGFnZUxpc3RBbmRQcm9kdWN0RGVzaWduUHJvbXB0KClcbiAqIDIuIOmhtemdouWIl+ihqCArIOmhtemdouS/ruWkjSArIOS6p+WTgeiuvuiuoSArIFVJ6K6+6K6hIOKGkiDosIPnlKggb3B0aW1pemVQYWdlTGlzdFByb2R1Y3REZXNpZ25BbmRVSVByb21wdCgpXG4gKiAzLiDpobXpnaLliJfooaggKyDpobXpnaLkv67lpI0gKyDkuqflk4Horr7orqEgKyBVSeiuvuiuoSArIOS7o+eggee8luWGmSDihpIg6LCD55SoIG9wdGltaXplRnVsbFdvcmtmbG93V2l0aFByb2R1Y3REZXNpZ25Qcm9tcHQoKVxuICogNC4gVUnorr7orqEgKyDku6PnoIHnvJblhpkg4oaSIOiwg+eUqCBvcHRpbWl6ZVVJRGVzaWduQW5kQ29kZVByb21wdCgpXG4gKiA1LiDpobXpnaLliJfooaggKyDpobXpnaLkv67lpI0gKyBVSeiuvuiuoSDihpIg6LCD55SoIG9wdGltaXplUGFnZUxpc3RBbmRVSURlc2lnblByb21wdCgpXG4gKiA2LiDpobXpnaLliJfooaggKyDpobXpnaLkv67lpI0gKyBVSeiuvuiuoSArIOS7o+eggee8luWGmSDihpIg6LCD55SoIG9wdGltaXplRnVsbFdvcmtmbG93UHJvbXB0KClcbiAqIFxuICog5pWw5o2u5Lyg6YCS6YC76L6R77yaXG4gKiAtIHt7UEFHRV9MSVNUX1JFU1VMVH19IOS7o+ihqCBvcHRpbWl6ZV9wYWdlTGlzdF9wcm9tcHQg55qE57uT5p6cXG4gKiAtIHt7RklYRURfUEFHRV9MSVNUX1JFU1VMVH19IOS7o+ihqCBvcHRpbWl6ZV9maXhfcGFnZUxpc3RfcHJvbXB0IOeahOS/ruWkjeWQjue7k+aenFxuICogLSDkuqflk4Horr7orqHlkoxVSeiuvuiuoeWfuuS6juS/ruWkjeWQjueahOmhtemdouWIl+ihqOi/m+ihjO+8jOehruS/nemhtemdouWujOaVtOaAp1xuICovXG5leHBvcnQgY2xhc3MgUHJvbXB0T3B0aW1pemVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBwYWdlTGlzdFByb21wdFRlbXBsYXRlID0gYCMg5L2g5pivQVBQ5Lqn5ZOB57uP55CG5LiT5a6277yM546w5Zyo6ZyA6KaB5L2g5qC55o2u55So5oi36L6T5YWl55qE6ZyA5rGC5o+P6L+w77yM6YG15b6qXCLliIbmnpDop4TliJlcIuWIhuaekOWHuuaJgOmcgOimgeeahOWujOaVtOeahOmhtemdouWIl+ihqOOAglxuXG4jIyDliIbmnpDop4TliJlcbuS7peS4i+aWueazleiuuuWIhuS4uuWkmuS4quatpemqpO+8jOmHjeeCueeqgeWHulwi6YCQ6aG16Z2i5YWD57Sg4oaS5Y+v54K54oaS6Lez6L2sXCLliIbmnpDmgJ3ot6/jgIJcblxuIyMg6YeN54K55rOo5oSPXG4tIOW8gOWni+iuvuiuoeS5i+WJjeimgeWFiOafpeeci+W9k+WJjeW3peeoi+ebruW9leS4i+eahGRvYy91aURlc2lnbi91aURlc2lnblN0YXRlLm1k5paH5Lu277yI5aaC5p6c5a2Y5Zyo77yJ77yM5LqG6Kej5LmL5YmN55qE6K6+6K6h6L+b5bqm5ZKM54q25Ya177yM5Lul5L6/5pu05aW95Zyw55CG6Kej5LiK5LiL5paH5ZKM57un57ut6K6+6K6h5bel5L2c44CCXG4tIOWmguaenOWPkeeOsGRvYy91aURlc2lnblN0YXRlLm1k5paH5Lu25LiN5a2Y5Zyo77yM5YiZ6K+05piO5LmL5YmN5rKh5pyJ6K6+6K6h6L+H77yM6ZyA6KaB5LuO6Zu25byA5aeL6K6+6K6h44CCXG4tIOWmguaenOWPkeeOsGRvYy91aURlc2lnblN0YXRlLm1k5paH5Lu25a2Y5Zyo77yM5YiZ6K+05piO5LmL5YmN5bey57uP6K6+6K6h6L+H77yM6ZyA6KaB55yL5LiLIOaYr+WQpuWQjOS4gOS4qkFQUOaIluiAhee9keerme+8jOWmguaenOaYr+WQjOS4gOS4qumCo+WwseS4jemcgOimgemHjeaWsOWIhuaekHBhZ2VMaXN077yM6ICM5LiU5qC55o2u5LmL5YmN55qE6K6+6K6h6L+b5bqm5ZKM54q25Ya177yM57un57ut6K6+6K6h5bel5L2c77yM5aaC5p6c5LiN5piv5ZCM5LiA5LiqQVBQ5oiW6ICF572R56uZ77yM5YiZ6ZyA6KaB5Yig6ZmkZG9jL3VpRGVzaWduU3RhdGUubWTmlofku7bvvIznhLblkI7ku47pm7blvIDlp4vorr7orqHjgIJcblxuIyMg5LiA44CB5qih5Z2X5ouG6Kej5LiO5Yid5q2l5YiX5Ye66aG16Z2i5YiX6KGoXG4tIOaLhuino+aguOW/g+S4muWKoeaooeWdlywg6L6T5Ye65omA5pyJ5Yqf6IO95qih5Z2X77yM5LiN6K665piv5ZCm5qC45b+D77yM5LiN6K665aSn5bCP77yM6YO96KaB5YiX5Ye65p2l44CCXG4tIOmBjeWOhuS4iuS4gOatpeWIhuaekOWIl+WHuuadpeeahOaJgOacieS4muWKoeaooeWdl++8jOWvueavj+S4gOS4quS4muWKoeaooeWdl+i/m+ihjOe7huWIhu+8jOWIl+WHuuivpeS4muWKoeaooeWdl+eahOaJgOaciemhtemdou+8jOaJgOaciemhtemdouS4jeiuuuaYr+WQpuaguOW/g+OAgeS4jeiuuuWkp+Wwj+OAgeS4jeiuuuaYr+WQpuWtkOmhuemhtemdouWFqOmDqOWIl+WHuuadpeOAglxuXG4jIyDkuozjgIHmr4/kuKrpobXpnaLnmoRcIuWFg+e0oOKGkuWPr+eCueKGkui3s+i9rFwi5YiG5p6Q6KaB54K5XG5cbj4gKirmoLjlv4PmgJ3ot6/vvJoqKiAgXG4+IOmBjeWOhuS4iuS4gOatpeWIhuaekOWHuuadpeeahOavj+S4qumhtemdou+8jOWDj+aJq+mbt+S4gOagt1wi54K55LquXCLlroPkuIrpnaLmiYDmnInlj6/kuqTkupLlhYPntKDvvIzmsr/nnYBcIuWFg+e0oOWPr+eCueKGkui3s+i9rOmhtemdouebruagh1wi5LiA6Lev5bu25Ly477yM6YCQ5bGC5Y+R546w5bm26KGl5YWF5pu05aSa6aG16Z2i5oiW5by556qX44CCXG5cbjEuICoq6K+G5Yir6aG16Z2i5YWD57SgKiogIFxuICAgLSAqKumhtemdouahhuaetioq77ya5rWP6KeI6aG16Z2i5pW05L2T5biD5bGA77yI5aaC6aG26YOo5a+86Iiq44CBVGFi44CB5YiX6KGo44CB6KGo5Y2V44CB5bqV6YOo5oyJ6ZKu562J77yJ44CCICBcbiAgIC0gKirliJflh7rmiYDmnInmjqfku7YqKu+8miAgXG4gICAgIC0g6L6T5YWl5qGG44CB5oyJ6ZKu44CB5Zu+54mH44CB5YiX6KGo6aG544CB6ZO+5o6l5paH5a2X44CBVGFiIOmhueOAgeS4i+aLieeureWktOOAgeaCrOa1ruaMiemSruOAgeWbvuagh+OAgeWkjemAiS/ljZXpgInmjInpkq7nrYnjgIJcblxuMi4gKirmoIforrDlj6/ngrnlh7vlhYPntKAqKiAgXG4gICAtIOWcqOS4iui/sOaOp+S7tuS4re+8jOWIpOaWreWTquS6m+aYr1wi5Y+v54K55Ye7XCLvvJogIFxuICAgICAtICoq5pi+5oCn5oyJ6ZKuKirvvIjmj5DkuqQv56Gu6K6kL+WPlua2iC/kuIvkuIDmraXvvIkgIFxuICAgICAtICoq5Y+v5bGV5byA5qCH6aKYL+WNoeeJhyoq77yI54K55Ye75bGV5byA5pu05aSa77yJICBcbiAgICAgLSAqKuW4pumTvuaOpeeahOaWh+Wtlyoq77yI5Y2P6K6u44CB6ZqQ56eB44CB5rOo5YaM44CB5b+Y6K6w5a+G56CB562J77yJICBcbiAgICAgLSAqKuWIl+ihqOmhuS/nvZHmoLzljaHniYcqKiAgXG4gICAgIC0gKirlm77lg4/nvKnnlaXlm77jgIHova7mkq3lm77mn5Dkupvlj6/ngrnlh7vljLrln58qKiAgXG4gICAgIC0gKirlr7zoiKrov5Tlm54v5YWz6ZetL+iPnOWNleWbvuaghyoqICBcblxuMy4gKirpgJDkuIDliJflh7pcIueCueWHu+KGkui3s+i9rOmhtemdouebruagh1wiKiogIFxuICAgLSDlr7nmr4/kuKrlj6/ngrnlh7vlhYPntKDvvIzmmI7noa7ngrnlh7vlkI7ot7PliLDlk6rkuIDkuKrnm67moIfpobXpnaLvvIzpgqPkuYjor6Xnm67moIfpobXpnaLkuZ/opoHliJflh7rliLDpobXpnaLliJfooajkuK1cblxuICAgLSAqKuekuuS+iyoq77yI5LulXCLllYblk4Hor6bmg4XpobVcIuS4uuS+i++8ie+8miAgXG4gICAgIOmhtemdou+8muiuvue9rumhtSAgXG4gICAgIOWFg+e0oO+8miAgXG4gICAgICAgMS4g5YWz5LqOIOKGkCDngrnlh7sg4oaSIOi3s+WIsOWFs+S6jumhtSBcbiAgICAgICAyLiDlrqLmnI3mjInpkq4g4oaQIOeCueWHuyDihpIg6Lez5Yiw5a6i5pyN5a+56K+d6aG1XG4gICAgICAgLi4uIFxuXG4jIyDkuInjgIHpl63njq/mo4DpqozmraXpqqRcblxuMS4gKirmoKHpqozkuJrliqHpl63njq8qKlxuICAgLSDmr5TlpoLkuIDkuKrkuovnianmnInliY3lrp7mlr3lkI7nmoTpl63njq/pobXpnaLvvIzmr5TlpoLmkJzntKLpobXvvIzpgqPkuYjmkJzntKLkuYvlkI7ogq/lrprmnInkuIDkuKrmkJzntKLnu5PmnpzpobXov5vooYzpl63njq/jgIJcblxuMi4gKirovpPlh7rmnIDnu4jmuIXljZUqKiAgXG4gICAtIOi+k+WHuumhtemdouaAu+aVsO+8jOS7peWPiuaMieeFp+aooeWdl+Wxgue6p++8jOWwhuaJgOaciVwi6aG16Z2i5ZCN56ewXCLku6XliIblsYLliJfooajlvaLlvI/lsZXnpLrjgIIgIFxuICAgLSDnoa7kv53mr4/kuKrpobXpnaLpg73lt7JcIueCueS6rlwi5omA5pyJ5Lqk5LqS5YWD57Sg54K55Ye76Lez6L2s55qE55uu5qCH6aG16Z2i6YO95Zyo5riF5Y2V5Lit5Ye6546w44CCYDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGZpeFBhZ2VMaXN0UHJvbXB0VGVtcGxhdGUgPSBg5L2g5pivQVBQ5Lqn5ZOB57uP55CG5LiT5a6277yMb3B0aW1pemVfcGFnZUxpc3RfcHJvbXB05b6X5Ye655qE6aG16Z2i5YiX6KGo57uT5p6c5bm25LiN6b2Q5YWo77yM5L2g5b+F6aG75YaN5qyh6L+b6KGM5YiG5p6Q77yM5YiG5p6Q5Ye65pu05aSa5omA6ZyA6aG16Z2i77yM5bCG5bey57uP5b6X5Ye655qE6aG16Z2i5YiX6KGo5aSN55uY5qOA5p+l5LiA5qyh5piv5ZCm5pyJ57y65ryP77yM5b+F6aG75piv5LiA5Liq6aG16Z2i5a6M5pW06b2Q5YWo55qEQVBQ77yM5Li+5Liq5L6L5a2Q77ya6K6+572u6aG16YeM6Z2i5pyJ5b6I5aSa5Liq5a2Q6K6+572u6aG577yM6YKj5LmI5a2Q6K6+572u6aG55pyJ6ZyA6KaB5paw5byA6aG16Z2i55qE5Lmf5b+F6aG75YiX5Ye65p2l5LiA5Liq5Y2V54us55qE6aG16Z2i44CC5YW25LuW6aG16Z2i5Lmf5piv5aaC5q2k77yM5Lmf6KaB6L+b6KGM5YiG5p6Q5piv5ZCm5pyJ5LiN6b2Q5YWo55qE6aG16Z2i6Lev5b6E5ryP5o6J5LqG44CCYDtcblxuICBwcml2YXRlIHJlYWRvbmx5IHByb2R1Y3REZXNpZ25Qcm9tcHRUZW1wbGF0ZSA9IGAjIOS9oOaYr+S6p+WTgee7j+eQhuS4k+Wutu+8jOmcgOimgeWIhuaekOeUqOaIt+mcgOaxguaPj+i/sO+8jOeEtuWQjuagueaNrifpgJrnlKjpnIDmsYLmlofmoaPmqKHmnb8n77yM6L6T5Ye65LiA5Lu95qCH5YeG55qEKirkuqflk4HpnIDmsYLmlofmoaMqKu+8jOeEtuWQjuWwhueUn+aIkOeahOmcgOaxguaWh+aho+WGmeWFpeWIsOW9k+WJjeW3peeoi+ebruW9leS4i+mdoueahGRvY+aWh+S7tuWkueS4i+mdoueahFhYWFByb2R1Y3REZXNpZ24ubWTvvIzlhbbkuK1YWFjmmK/moLnmja7nlKjmiLfpnIDmsYLmj4/ov7DmnaXlkb3lkI3jgIJcblxuKirph43opoHor7TmmI4qKu+8mlxuLSDov5nmmK8qKue6r+S6p+WTgemcgOaxguaWh+ahoyoq77yM5LiT5rOo5LqO5Lqn5ZOB5Yqf6IO944CB5Lia5Yqh6YC76L6R44CB55So5oi35L2T6aqM6ZyA5rGCXG4tICoq5Lil56aB5YyF5ZCr5Lu75L2V5oqA5pyv5a6e546w5YaF5a65KirvvJrkuI3lvpfmtonlj4pVSeiuvuiuoeinhOiMg+OAgeS6pOS6kuinhOiMg+OAgeW8gOWPkeinhOiMg+OAgeaKgOacr+aetuaehOetiVxuLSAqKuS4peemgeWMheWQq+aKgOacr+mAieWei+WGheWuuSoq77ya5LiN5b6X5o+Q5Y+K5YmN56uv5qGG5p6244CB5ZCO56uv5oqA5pyv44CB5pWw5o2u5bqT6K6+6K6h562JXG4tICoq5Lil56aB55Sf5oiQ5oqA5pyv6KeE6IyD56ug6IqCKirvvJrmlofmoaPnu5PmnoTkuKXmoLzmjInnhafkuIvpnaLnmoTmqKHmnb/miafooYzvvIzkuI3lvpfoh6rooYzmt7vliqDmioDmnK/nm7jlhbPnq6DoioJcblxuIyMg6YCa55So6ZyA5rGC5paH5qGj5qih5p2/XG5cbi0tLVxuXG4jIyMgMS4g5paH5qGj6K+05piOXG5cbiogKirmlofmoaPnm67nmoQqKu+8mueugOimgeivtOaYjuacrOmcgOaxguaWh+aho+eahOeUqOmAlOWSjOmAgueUqOiMg+WbtOOAglxuKiAqKueJiOacrOiusOW9lSoq77yaXG5cbiAgXFxgXFxgXFxgXG4gIHwg54mI5pys5Y+3IHwg5pel5pyfICAgICAgIHwg5L2c6ICFIHwg5L+u5pS55YaF5a65IHxcbiAgfCAtLS0tLS0gfCAtLS0tLS0tLS0tIHwgLS0tLSB8IC0tLS0tLS0tIHxcbiAgfCAxLjAgICAgfCBZWVlZLU1NLUREIHwgWFggICB8IOWIneWni+eJiOacrCB8XG4gIFxcYFxcYFxcYFxuKiAqKuivu+iAheWvueixoSoq77ya5Lqn5ZOB57uP55CG44CB56CU5Y+R44CB5rWL6K+V44CB6K6+6K6h562J55u45YWz6KeS6Imy44CCXG4qICoq5pyv6K+t6K+05piOKirvvJrliJflh7rmlofmoaPkuK3lh7rnjrDnmoTkuJPkuJrmnK/or63miJbnvKnlhpnvvIzlubblgZrnroDopoHop6Pph4rjgIJcblxuLS0tXG5cbiMjIyAyLiDmlbTkvZPmpoLop4hcblxuMS4gKirpobnnm67og4zmma/kuI7lrprkvY0qKlxuXG4gICAqIOivtOaYjiBBUFAg6Z2i5ZCR55qE55uu5qCH55So5oi35ZKM5qC45b+D5Lu35YC844CB5Lia5Yqh5Zy65pmv44CCXG5cbi0tLVxuXG4jIyMgMy4g6aG16Z2i5YiX6KGo77yI5oyJ5bGV56S66aG65bqP77yJXG5cbuS4jemcgOimgeiHquW3seWIhuaekOWKn+iDveaooeWdl+WSjOmhtemdouWIl+ihqO+8jOS9oOebtOaOpeagueaNruesrOS6jOatpeWIl+WHuuaJgOmcgOmhtemdouWIl+ihqFxcYG9wdGltaXplX2ZpeF9wYWdlTGlzdF9wcm9tcHRcXGDlvpflh7rnmoTmiYDmnInmqKHlnZflkozpobXpnaLliJfooajvvIzlhYjliJflh7rmiYDmnInpobXpnaLlkI3np7DjgIHmiYDlsZ7mqKHlnZfjgIHnroDopoHor7TmmI7kuI7ot7PovazlhaXlj6PvvIzmjInku6XkuIvnpLrkvovmoLzlvI/lhpnlh7rmnaXjgIJcbuOAguekuuS+i+agvOW8j++8mlxuXG5cXGBcXGBcXGBcbnwg5bqP5Y+3IHwg6aG16Z2i5ZCN56ewICAgICB8IOaooeWdlyAgIHwg566A6KaB6K+05piOICAgICAgICAgICAgICAgICAgICAgICB8IOi3s+i9rOWFpeWPoyAgICAgICAgICAgICAgfFxufCAtLS0tIHwgLS0tLS0tLS0tLS0tIHwgLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbnwgMSAgICB8IOmXquWxj+mhtSAgICAgICB8IOWFrOWFsSAgIHwg5ZCv5Yqo5pe25bGV56S6IExvZ28v5Yqo55S777yM5oyB57ut6Iul5bmy56eSIHwgQVBQIOWQr+WKqCAgICAgICAgICAgICAgIHxcbnwgMiAgICB8IOaWsOaJi+W8leWvvOmhtSAgIHwg5YWs5YWxICAgfCDpppbmrKHlronoo4XlvJXlr7znlKjmiLfkuobop6PmoLjlv4Plip/og70gICAgIHwg6Zeq5bGP6aG177yI6aaW5qyh5omT5byA77yJICAgICB8XG58IDMgICAgfCDnmbvlvZXpobUgIHwg55So5oi3ICAgfCDnlKjmiLfovpPlhaXotKblj7fkv6Hmga/lrozmiJDorqTor4EgICAgICAgICB8IOmmluasoeWQr+WKqOWIpOaWrS/mi6bmiKrot7PovawgICB8XG58IDQgICAgfCDpppbpobUgICAgICAgICB8IOmmlumhtSAgIHwg5bGV56S6IEJhbm5lcuOAgeW/q+aNt+WFpeWPo+OAgeaOqOiNkOWIl+ihqCAgIHwg55m75b2VL+aWsOaJi+W8leWvvOWQjuaIlua4uOWuouaooeW8jyB8XG58IOKApiAgICB8IOKApiAgICAgICAgICAgIHwg4oCmICAgICAgfCDigKYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IOKApiAgICAgICAgICAgICAgICAgICAgIHxcblxcYFxcYFxcYFxuXG4+ICoq5rOo5oSPKirvvJrot7PovazlhaXlj6PpnIDliJflh7rmiYDmnInlj6/og73op6blj5Hor6XpobXpnaLnmoTmnaXmupDjgIJcblxuLS0tXG5cbiMjIyA0LiDpgJDpobXor6bnu4bpnIDmsYJcblxu5oyJXCLpobXpnaLliJfooahcIuS4remhuuW6j++8jOS+neasoeWxleW8gOavj+S4qumhtemdoueahOS7peS4i+WGheWuueOAguavj+S4qumhtemdouS4gOiKgu+8jOW7uuiuruS9v+eUqOS6jOe6p+aIluS4iee6p+agh+mimOOAglxuXG4jIyMjIDQuWCDpobXpnaLlkI3np7DvvIjnpLrkvovvvJrpl6rlsY/pobXvvIlcblxuMS4gKirpobXpnaLmpoLov7AqKlxuXG4gICAqIOWKn+iDveWumuS9jeOAgeS9leaXtuWxleekuuOAgeeJueauiuivtOaYjuOAglxuXG4yLiAqKui3s+i9rOWFs+ezuyoqXG5cbiAgICogKirmnaXmupAqKu+8muWIl+WHuuaJgOacieWPr+iDvei3s+i9rOWIsOacrOmhteeahOWFpeWPo+WcuuaZr+OAglxuICAgKiAqKuebruaghyoq77ya5pys6aG15a6M5oiQ5ZCO6Lez6L2s5Yiw5ZOq5Lqb6aG16Z2i44CB5Zyo5L2V56eN5p2h5Lu25LiL6Lez6L2s44CCXG5cbjMuICoqVUkg57uE5Lu25riF5Y2VKipcblxuICAgKiDliJflh7rmnKzpobXmiYDmnInlj6/op4bnu4Tku7blj4rlhbblsYLnuqfvvIjlpoLvvJrog4zmma/jgIFMb2dv44CB5oyJ6ZKu44CB5paH5pys44CB5Yqo55S75o6n5Lu2562J77yJ44CCXG4gICAqIOWmguaenOacieWkmuS4quS6pOS6kuWMuuWfn++8jOWPr+eUqOWtkOWIl+ihqOagh+aYjuOAglxuXG40LiAqKuS6pOS6kumAu+i+kSoqXG5cbiAgICog5a+55q+P5LiqIFVJIOe7hOS7tueahOihjOS4uuaPj+i/sO+8mlxuXG4gICAgICog54K55Ye7L+a7keWKqC/ovpPlhaUv54Sm54K55Y+Y5YyWIOetieS6pOS6kuaWueW8j+S8muinpuWPkeS7gOS5iOWPjemmiOOAglxuICAgICAqIOWmguacieWAkuiuoeaXtuOAgeWKqOeUu+aSreaUvuetieW8guatpeihjOS4uu+8jOimgeivtOaYjuinpuWPkeaXtuacuuWSjOe7k+adn+mAu+i+keOAglxuXG41LiAqKuS4muWKoemAu+i+kSoqXG5cbiAgICog6ZyA6KaB6LCD55So55qE5ZCO56uv5o6l5Y+j77yI5o6l5Y+j5Zyw5Z2A44CB6K+35rGC5pa55byP44CB5Li76KaB6K+35rGC5Y+C5pWw44CB6L+U5Zue5YWz6ZSu5a2X5q6177yJ44CCXG4gICAqIOaVsOaNruajgOafpS/moKHpqozop4TliJnvvIzljIXmi6zliY3nq6/moKHpqozlkozlkI7nq6/ov5Tlm57nmoTplJnor6/lpITnkIbjgIJcbiAgICog5pys5Zyw5a2Y5YKo5LiO57yT5a2Y77ya5ZOq5Lqb5pWw5o2u5L+d5a2Y5Zyo5pys5Zyw77yIVG9rZW7jgIHnlKjmiLflgY/lpb3jgIHmnKzlnLDmoIforrDnrYnvvInjgIJcblxuNi4gKirmlbDmja7mnaXmupDkuI7mm7TmlrAqKlxuXG4gICAqIOmdmeaAgeaVsOaNru+8muWmguaenOmhtemdouWGheWuueS4uumdmeaAgei1hOa6kO+8jOWIl+WHuui1hOa6kOS9jee9ru+8iOWmguacrOWcsOWbvueJh+OAgemFjee9ruaWh+S7tu+8ieOAglxuICAgKiDliqjmgIHmlbDmja7vvJrmjqXlj6Pov5Tlm57mlbDmja7lrZfmrrXor7TmmI7jgIHmlbDmja7liLfmlrAv5ouJ5Y+W5pe25py677yI5aaC5LiL5ouJ5Yi35paw44CB5a6a5pe25Yi35paw77yJ44CCXG5cbjcuICoq54m55q6K54q25oCBICYg5byC5bi45aSE55CGKipcblxuICAgKiAqKuWKoOi9veS4reaAgSoq77ya5b2T6K+35rGC5pyq6L+U5Zue5pe255qE5bGV56S65pWI5p6c77yI6L2s5ZyI5Yqo55S744CB6aqo5p625bGP562J77yJ44CCXG4gICAqICoq56m654q25oCBKirvvJrml6DmlbDmja7ml7bnmoTljaDkvY3lm74v5paH5qGI44CCXG4gICAqICoq6ZSZ6K+v54q25oCBKirvvJrnvZHnu5zlvILluLjjgIHmjqXlj6PlpLHotKXjgIHmlbDmja7op6PmnpDlvILluLjml7bnmoTlvLnnqpfmiJbmj5DnpLrmlofmoYjjgIJcblxuOC4gKirkuI7lhbbku5bpobXpnaLnmoTmlbDmja4v6YC76L6R5YWz57O7KipcblxuICAgKiDmnKzpobXlpoLkvZXmjqXmlLbmnaXoh6rkuIrkuIDkuKrpobXpnaLnmoTlj4LmlbDvvIjlpoLpgJrov4fot6/nlLHjgIFJbnRlbnTjgIHlm57osIPvvInjgIJcbiAgICog5pys6aG15pON5L2c5oiQ5Yqf5ZCO5aaC5L2V5Lyg6YCS5pWw5o2u57uZ5LiL5LiA5Liq6aG16Z2i5oiW5a+55YWo5bGA54q25oCB6L+b6KGM5pu05paw44CCXG5cbjkuICoq5Z+L54K5KipcblxuICAgKiDliJflh7rmnKzpobXpnIDln4vngrnnmoTkuovku7blkI3np7Dlj4rop6blj5Hml7bmnLrvvIjlpoJcIumhtemdouWxleekulwi44CBXCLmjInpkq7ngrnlh7tcIuOAgVwi6KGo5Y2V5o+Q5Lqk5oiQ5YqfL+Wksei0pVwi562J77yJ44CCXG4gICAqIOWPguaVsOivtOaYju+8muS4iuaKpeWTquS6m+aMh+agh++8iOaMiemSriBJROOAgemhtemdouWBnOeVmeaXtumVv+OAgemUmeivr+eggeetie+8ieOAglxuXG4tLS1cblxuIyMjIDUuIOWFqOWxgOi3s+i9rOa1geeoiyAmIOaVsOaNrua1gVxuXG4qICoq5paH5a2X6K+05piOKirvvJrlj6/lnKjmnKznq6DnlKjmloflrZfmlrnlvI/vvIzmpoLmi6zkuLvopoHpobXpnaLpl7TnmoTot7Povazpobrluo/kuI7mlbDmja7kvKDpgJLpgLvovpHjgILkvovlpoLvvJpcblxuICAxLiDpl6rlsY/pobUg4oaS77yI6aaW5qyh5omT5byA77yJ5paw5omL5byV5a+86aG1IOKGkiDnmbvlvZUv6aaW6aG1XG4gIDIuIOmmlumhtSDihpIg5pCc57Si6aG1IOKGkiDor6bmg4XpobUg4oaSIOi0reeJqei9pi/mlK/ku5jpobVcbiAgMy4g5Lu75oSP6ZyA6KaB5o6I5p2D6aG16Z2iIOKGkiDoi6XmnKrnmbvlvZXihpIg55m75b2V6aG1IOKGkiDov5Tlm57ljp/pobXpnaJcblxuKiAqKuWFqOWxgOWFseS6q+aVsOaNruivtOaYjioq77yaXG5cbiAgKiDnlKjmiLfnmbvlvZXmgIHvvIhhY2Nlc3NUb2tlbuOAgXJlZnJlc2hUb2tlbu+8iVxuICAqIOeUqOaIt+S/oeaBr++8iHVzZXJJZOOAgeaYteensOOAgeWktOWDj+OAgeacrOWcsOWBj+Wlveetie+8iVxuICAqIOi0reeJqei9pueKtuaAgeOAgeacquivu+a2iOaBr+aVsOOAgUFQUCDphY3nva7lvIDlhbPnrYlcblxuIyMjIDYuIOmcgOaxguaWh+aho+WGmeWFpVxuLSDnlJ/miJDnmoTpnIDmsYLmlofmoaPlhpnlhaXliLDlvZPliY3lt6XnqIvnm67lvZXkuIvpnaLnmoRkb2Pmlofku7blpLnkuIvpnaLnmoRYWFhQcm9kdWN0RGVzaWduLm1k77yM5YW25LitWFhY5piv5qC55o2u55So5oi36ZyA5rGC5o+P6L+w5p2l5ZG95ZCN44CCXG5cbioq6YeN6KaB6ZmQ5Yi2KirvvJpcbi0gKirnpoHmraLnlJ/miJDmioDmnK/op4TojIMqKu+8muS4jeW+l+WMheWQq1VJ6K6+6K6h6KeE6IyD44CB5Lqk5LqS6KeE6IyD44CB5byA5Y+R6KeE6IyD44CB5oqA5pyv5p625p6E562J5oqA5pyv5a6e546w57uG6IqCXG4tICoq56aB5q2i55Sf5oiQ5a6e546w5pa55qGIKirvvJrkuI3lvpfmtonlj4rliY3nq6/moYbmnrbpgInmi6njgIHlkI7nq6/mioDmnK/moIjjgIHmlbDmja7lupPorr7orqHnrYnmioDmnK/pgInlnotcbi0gKirkuJPms6jkuqflk4HpnIDmsYIqKu+8muaWh+aho+W6lOS4k+azqOS6juS6p+WTgeWKn+iDvemcgOaxguOAgeS4muWKoemAu+i+keOAgeeUqOaIt+S9k+mqjOmcgOaxguetieS6p+WTgeWxgumdoueahOWGheWuuVxuLSAqKumBv+WFjeaKgOacr+e7huiKgioq77ya5LiN5b6X5o+P6L+w5YW35L2T55qE5Luj56CB5a6e546w44CB5o6l5Y+j6K6+6K6h44CB5pWw5o2u57uT5p6E562J5byA5Y+R5bGC6Z2i55qE5YaF5a65XG4tICoq5Lil5qC85oyJ54Wn5qih5p2/57uT5p6EKirvvJrmlofmoaPlv4XpobvkuKXmoLzmjInnhafkuIrov7A15Liq56ug6IqC57uT5p6E57yW5YaZ77yM5LiN5b6X6Ieq6KGM5re75Yqg5YW25LuW56ug6IqCXG4tICoq56ug6IqC5YaF5a656ZmQ5Yi2KirvvJrmr4/kuKrnq6DoioLlj6rog73ljIXlkKvmqKHmnb/kuK3mjIflrprnmoTlhoXlrrnvvIzkuI3lvpfmianlsZXliLDmioDmnK/lrp7njrDpoobln59cblxuIyMjIDcuIOWujOaIkOehruiupFxuLSDlvZPkuqflk4HpnIDmsYLmlofmoaPlhpnlhaXlrozmiJDlkI7vvIzlv4XpobvlkYrnn6XnlKjmiLfvvJpcIuKchSAqKuS6p+WTgemcgOaxguaWh+aho+W3suWujOaIkO+8gSoq6K+35oKo5YWI5p+l55yLIGRvYy9YWFhQcm9kdWN0RGVzaWduLm1kIOaWh+S7tu+8jOS7lOe7humYheivu+mcgOaxguaWh+aho+WGheWuue+8jOehruiupOaYr+WQpuaciemcgOimgeS/ruaUueeahOWcsOaWueOAguWmguaenOacieS/ruaUueaEj+inge+8jOivt+WRiuivieaIkeWFt+S9k+eahOS/ruaUueimgeaxguOAguehruiupOmcgOaxguaWh+aho+aXoOmXrumimOaIluS/ruaUueWujOavleWQju+8jOivt+WRiuivieaIkeWPr+S7pei/m+ihjOS4i+S4gOatpeeahFVJ6K6+6K6h5bel5L2c44CCXCJcbi0gKirimqDvuI8g6YeN6KaB77ya6L+Z5piv5bel5L2c5rWB5pqC5YGc54K577yB5Zyo55So5oi35piO56Gu6KGo56S656Gu6K6k6ZyA5rGC5paH5qGj5peg6Zeu6aKY5bm26KaB5rGC57un57ut6L+b6KGMVUnorr7orqHkuYvliY3vvIznu53lr7nkuI3og73oh6rliqjov5vooYzkuIvkuIDmraXlt6XkvZzjgIIqKlxuLSAqKuKaoO+4jyDlpoLmnpzns7vnu5/oh6rliqjnu6fnu63miafooYzkuoZVSeiuvuiuoe+8jOivtOaYjuW3peS9nOa1gemFjee9ruaciemXrumimO+8jOmcgOimgeWBnOatouiHquWKqOaJp+ihjOOAgioqXG4tIOWcqOeUqOaIt+ehruiupOmcgOaxguaWh+aho+aXoOmXrumimOaIluWujOaIkOS/ruaUueWQju+8jOaJjeiDvee7p+e7rei/m+ihjOWQjue7reeahFVJ6K6+6K6h5oiW5Luj56CB5byA5Y+R5bel5L2c44CCYDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvZGVQcm9tcHRUZW1wbGF0ZSA9IGAjIOS9oOaYr3R5cGVzY3JpcHTku6PnoIHkuJPlrrbvvIzmoLnmja4n6KeE5YiZJ+OAgSfkvovlrZAn5ZKM55So5oi36L6T5YWl55qE6ZyA5rGC5o+P6L+w77yM5a6M5oiQ5Luj56CB5byA5Y+RXG5cbiMjIOmHjeimgeivtOaYjlxuLSDlnKjlvIDlp4vku6PnoIHlvIDlj5HkuYvliY3vvIzlv4XpobvlhYjmn6XnnIvlvZPliY3lt6XnqIvnm67lvZXkuIvnmoRkb2Pmlofku7blpLnkuK3nmoTkuqflk4HpnIDmsYLmlofmoaPvvIjlpoJYWFhQcm9kdWN0RGVzaWduLm1k77yJ77yM5Lil5qC85oyJ54Wn6ZyA5rGC5paH5qGj5Lit55qE6aG16Z2i5a6a5LmJ44CB5Lqk5LqS6YC76L6R44CB5Lia5Yqh6YC76L6R6L+b6KGM5Luj56CB5byA5Y+R44CCXG4tIOWmguaenOWPkeeOsOmcgOaxguaWh+aho+S4jeWtmOWcqO+8jOWImeaMieeFp+eUqOaIt+mcgOaxguaPj+i/sOi/m+ihjOW8gOWPkeOAguWmguaenOmcgOaxguaWh+aho+WtmOWcqO+8jOWImeS4peagvOaMieeFp+mcgOaxguaWh+aho+eahOinhOiMg+i/m+ihjOW8gOWPke+8jOS4jeW+l+WBj+emu+mcgOaxguaWh+aho+eahOWumuS5ieOAglxuXG4jIyDpobnnm67moYbmnrbmj4/ov7Bcbi0g5pW05Liq6aG555uu5qGG5p625YiG5Li656iL5bqP5YWl5Y+jQXBwbGljYXRpb24udHPjgIHnqIvluo/lhajlsYDpnZnmgIHlj5jph49TdGF0aWNEYXRhLnRz44CB5omA5pyJ6aG16Z2icGFnZeaWh+S7tuWkueOAgVVJ57uE5Lu25bqTdWlsaWLmlofku7blpLnjgIHlkI7nq6/mjqXlj6NBbGxCYWNrRW5kQXBpLnRz44CB5ZSv5LiA55qE6IO95Yqb5pa55rOVQWxsRnVuY3Rpb24udHPjgIJcbi0g6L+Z5piv5LiA5Liq5paw5Z6L5byA5Y+R5qGG5p6277yMVUnnlYzpnaLlt7Lnu4/kvb/nlKjlj6/op4bljJblt6XlhbfnlJ/miJDkuobmiYDmnInnmoTpnZnmgIHnmoRVSemhtemdouS6hu+8jOeEtuWQjuS9oOmcgOimgeS9v+eUqHRz5Luj56CB5byA5Y+R5Lia5Yqh6YC76L6R5LiOVUnkuqTkupLpgLvovpHvvIzlm6DmraTnvJblhpl0c+S7o+eggeWPqumcgOimgeaMieeFp+eUqOaIt+mcgOaxguaPj+i/sOWujOaIkOS4muWKoemAu+i+keS4jlVJ5Lqk5LqS55qE5byA5Y+R44CCXG5cbiMjIOinhOWIme+8mlxuMeOAgVVJ55WM6Z2i5bey57uP5byA5Y+R5a6M5q+V77yM5LiN6ZyA6KaB5aKe5Yig5pS55Lu75L2V6Z2Z5oCBVUnnlYzpnaLjgIJcbjLjgIHkvaDlj6rpnIDopoHmjInnhafnlKjmiLfpnIDmsYLmj4/ov7Dkvb/nlKh0c+S7o+eggeWujOaIkOS4muWKoemAu+i+keS4jlVJ5Lqk5LqS55qE5byA5Y+RXG4z44CB5q+P5LiA5qyh5byA5aeL57yW5YaZ5Luj56CB5pe277yM5b+F6aG75YWI6ZiF6K+75b2T5YmN5bel56iL55uu5b2V5LiL55qEZG9jL2NvZGVTdGF0ZS5tZOaWh+S7tu+8iOWmguaenOWtmOWcqO+8ie+8jOS6huino+W9k+WJjeeahOS7o+eggeW8gOWPkei/m+W6puWSjOeKtuWGte+8jOS7peS+v+abtOWlveWcsOeQhuino+S4iuS4i+aWh+WSjOe7p+e7reW8gOWPkeW3peS9nOOAglxuNOOAgeavj+S4gOasoeWujOaIkOS4gOS4quWKn+iDveaooeWdl+aIlumhtemdoueahOS7o+eggee8luWGmeWQju+8jOWwhuW9k+WJjei/m+W6puWSjOW9k+WJjeeKtuWGteeUqDIwMOWtl+aAu+e7k+W5tuWGmeWFpWRvYy9jb2RlU3RhdGUubWTmlofku7bkuK3jgILmgLvnu5PlhoXlrrnlupTljIXmi6zvvJrlt7LlrozmiJDnmoTlip/og73mqKHlnZflkozpobXpnaLjgIHlvZPliY3mraPlnKjov5vooYznmoTlvIDlj5Hlt6XkvZzjgIHpgYfliLDnmoTmioDmnK/pl67popjmiJbms6jmhI/kuovpobnjgIHkuIvkuIDmraXnmoTlvIDlj5HorqHliJLnrYnjgILov5nmoLflj6/ku6XorqlBSeWkp+aooeWei+WcqOWQjue7reW3peS9nOS4reabtOWKoOS6huino+W9k+WJjeeKtuaAgeS4iuS4i+aWh++8jOS7juiAjOaJp+ihjOW+l+abtOWKoOWHhuehruOAglxuNeOAgeivt+S4peagvOaMieeFp+WUr+S4gOeahOiDveWKm+aWueazlUFsbEZ1bmN0aW9uLnRz77yM5LiN6KaB5paw5aKe44CB5Yig6Zmk5oiW5L+u5pS55Lu75L2VQWxsRnVuY3Rpb27mjqXlj6Plo7DmmI7vvJvkuZ/kuI3opoHosIPnlKjlhbbku5bmnKrlnKhBbGxGdW5jdGlvbuS4reWHuueOsOeahOWHveaVsOaIluaooeWdl1xuNuOAgeaJgOacieWQjuerr0FQSeiwg+eUqOW/hemhu+S9v+eUqEFsbEJhY2tFbmRBcGnnsbvkuK3lrprkuYnnmoTmlrnms5XvvIzkuI3lhYHorrjkvb/nlKjmnKrlnKhBbGxCYWNrRW5kQXBp5Lit5a6a5LmJ55qE5ZCO56uvQVBJ44CCXG4344CBVUnnlYzpnaLjgIFVSem7mOiupOaVsOaNruOAgVVJ5qC35byP5bey57uP5YWo6YOo55Sf5oiQ5aW955qE5LqG77yM5L2g5LiN6IO95ZyoaW5pdFZpZXfmlrnms5Xph4zpnaLmk4Xoh6rmt7vliqDkuIDkupt2aWV355qEVUnmoLflvI/miJblsZ7mgKfnrYnliJ3lp4vljJbvvIzpmaTpnZ7nlKjmiLfpnIDmsYLmj4/ov7DmmI7noa7mjIflh7rpnIDopoHmm7TmlLnlk6rkupvmoLflvI/miJblsZ7mgKfjgIJcbjjjgIHlrZfnrKbkuLLopoHku6XljZXlvJXlj7fmnaXlhpnvvIzlpoLvvJon5oiR55qEJ+OAglxuOeOAgeS7u+S9leaWueazleWHveaVsOWumuS5ie+8jOS4jeW+l+S9v+eUqGFzeW5j5ZKMUHJvbWlzZe+8jOaJgOacieW8guatpeaTjeS9nOW/hemhu+S9v+eUqOeureWktOWHveaVsOOAglxuMTDjgIHmiYDmnIlQYWdl55qE5a2Q57G777yM6YO95YWB6K645re75Yqg5p6E6YCg5Ye95pWw5ZKM5p6E6YCg5Ye95pWw55qE5Y+C5pWw77yM6L+Z5Lqb5Y+C5pWw5bCx55So5p2l6aG16Z2i6Lez6L2s5pe26aG16Z2i5LmL6Ze05Lyg6YCS5pWw5o2u5L2/55So77yM5q+U5aaC77ya5ZWG5ZOB5YiX6KGo6aG1UHJvamVjdExpc3RQYWdl6Lez5Yiw5ZWG5ZOB6K+m5oOF6aG1UHJvamVjdERldGFpbFBhZ2XvvIzpgqPkuYhQcm9qZWN0TGlzdFBhZ2XlupTor6XopoHkvKDnu5lQcm9qZWN0RGV0YWlsUGFnZeS4gOS4quWPguaVsO+8mnByb2R1Y3RJROOAguaJgOS7pe+8jFByb2plY3REZXRhaWxQYWdl55qE6aG16Z2i5Y+C5pWw5aOw5piO5ZKM5p6E6YCg5Ye95pWw5bqU6K+l5piv6L+Z5qC35YaZ77yacHJpdmF0ZSBwcm9kdWN0SUQ6IHN0cmluZ1xuXG5cdGNvbnN0cnVjdG9yKHByb2R1Y3RJRDogc3RyaW5nKSB7XG5cdFx0c3VwZXIoKVxuXHRcdHRoaXMucHJvZHVjdElEID0gcHJvZHVjdElEXG5cdH3jgIJcbjEx44CBVmlld+ebuOWFs+WPmOmHj+W/hemhu+WcqHh4eFBhZ2XnsbvlvIDlp4vml7blo7DmmI7vvIzlv4Xpobvlo7DmmI7lhbfkvZPnmoRWaWV357G75Z6L5aaC77yaSW5wdXRWaWV377yM6ICM5LiN5piv55u05o6l5aOw5piO57G75Z6L5Li6QmFzZVZpZXfvvIzmiYDmnIlWaWV35b+F6aG7ZmluZFZpZXdCeUlE5Yid5aeL5YyW77yM5aaC77yac2F2ZUJ1dHRvbjogQnV0dG9uVmlldyA9IHRoaXMuZmluZFZpZXdCeUlEKCdzYXZlQnV0dG9uJykgYXMgQnV0dG9uVmlld+OAgui/memHjOeahGZpbmRWaWV3QnlJROWFtuS4rWlk5Y+C5pWw5piv5Zyo6K+l6aG16Z2i55qEaHRtbOaWh+S7tumHjOmdouiOt+WPluWIsOeahGlk5YC844CCXG4xMuOAgeWTjeW6lOW8j+W8leeUqHJlZueahOS9v+eUqO+8muexu+Wei3Z1ZTPnmoRyZWbvvIzlj6/ku6XlsIbkuIDkuKrlgLzlj5jmiJDlk43lupTlvI/nmoTvvIzku47ogIzlnKjor6XlgLzlj5HnlJ/lj5jljJbml7bvvIzoh6rliqjop6blj5Hnm7jlhbPnlYzpnaLnmoTmm7TmlrDjgIJcbjEz44CBY29tcHV0ZWTnmoTkvb/nlKjvvJrnsbvlnot2dWUz55qEY29tcHV0ZWTvvIzlvZPkvaDpnIDopoHmoLnmja7kuIDkuKrmiJblpJrkuKrlk43lupTlvI/mupAocmVmKeiuoeeul+WHuuS4gOS4quaWsOeahOWAvOaXtu+8jOWwseeUqCBjb21wdXRlZFxuMTTjgIHlpoLmnpzmmK/lpJrkuKrpobXpnaLlhbHnlKjnmoTmlbDmja7lj5jph4/vvIzlj6/ku6XogIPomZHlo7DmmI7kuLrlhajlsYDpnZnmgIHlj5jph4/jgIJcbjE144CB5YWo5bGA6Z2Z5oCB5Y+Y6YeP5Zyo5YWz6ZetQVBQ5oiW6ICF572R6aG15ZCO5Lya5riF55CG5o6J55qE77yM5omA5Lul5L2g6KaB5oCd6ICD5riF5qWa5ZOq5Lqb5pWw5o2u5Y+Y6YeP6ZyA6KaB5oyB5LmF5YyW5YKo5a2Y77yM5ZOq5Lqb5piv5YWo5bGA6Z2Z5oCB5Y+Y6YeP77yM5oyB5LmF5YyW5o6l5Y+j77yac2F2ZURhdGFiYXNlWHh45ZKMZ2V0RGF0YWJhc2VEYXRhWHh477yM5q+U5aaC5piv5ZCm5bey57uP5by55Ye66L+H5bm/5ZGK5by55qGG77yM6L+Z5Liq5bqU6K+l5oyB5LmF5YyW5YKo5a2Y44CCXG4xNuOAgeaJgOacieeahOe9kee7nOaLpuaIqueahOWFqOWxgOe7n+S4gOWkhOeQhumcgOimgeWcqEFwcGxpY2F0aW9u5Lit55qEb25HbG9iYWxOZXRTdWNjZXNzSW50ZXJjZXB0KOiBlOe9keaIkOWKn+WQju+8jOWQjuerr+S4muWKoeato+ehruS4jumUmeivr+mDveS8muWbnuiwg+WIsOi/memHjO+8jOaJgOS7peWcqOi/memHjOWPr+e7n+S4gOWkhOeQhuS4muWKoemUmeivr+eggSnmiJZvbkdsb2JhbE5ldEZhaWxJbnRlcmNlcHQo572R57uc5LiN6YCa77yM6L+e5o6l5aSx6LSl5oOF5Ya15Lya5Zue6LCD5Yiw6L+Z6YeMKemHjOmdouWkhOeQhuOAglxuMTfjgIHpobXpnaLot7Povazkvb/nlKhBbGxGdW5jdGlvbi5uYXZpZ2F0ZVRv5a6e546w77yMbmF2aWdhdGVUb+S8oOWFpVBhZ2XnmoTlrZDnsbvlr7nosaHvvIzlpoLvvJpBbGxGdW5jdGlvbi5uYXZpZ2F0ZVRvKG5ldyBQcm9kdWN0UGFnZSh0aGlzLnByb2R1Y3RJRCkp44CCXG4xOOOAgemhtemdouWGheeahOe9kee7nOivt+axguS4muWKoeWkhOeQhuS4jeW+l+WGmeWcqEFwcGxpY2F0aW9u55qEb25HbG9iYWxOZXRTdWNjZXNzSW50ZXJjZXB06YeM6Z2i44CCXG4xOeOAgeWtl+espuS4suS4jeW+l+ebtOaOpei/m+ihjGJvb2xlYW7ov5DnrpfnhLblkI7otYvlgLznu5lib29sZWFu57G75Z6L55qE5Y+Y6YeP77yM6ZyA6KaB5Zyo5a2X56ym5Liy5YmN6Z2i5re75Yqg5Lik5Liq6Z2e6L+Q566X77yaISHjgILmr5TlpoLmraPnoa7nmoTlhpnms5XvvJpjb25zdCBpc0FkZCA9ICEhdGhpcy5pbnB1dFZpZXcudGV4dCAmJiBpc05ld1xuMjDjgIHlpoLnlKjmiLfmj4/ov7DmsqHmnInmmI7noa7or7TmmI7pnIDopoF0b2FzdOaPkOekuu+8jOS9oOS4jeW+l+aTheiHqui/m+ihjFRvYXN044CCXG4yMeOAgeW7tuaXtuaJp+ihjEFsbEZ1bmN0aW9uLnNldFRpbWVvdXTns7vnu5/kvJroh6rliqjmuIXnkIZ0aW1lb3V077yM5Luj56CB5LiK57ud5a+55LiN6IO96L+b6KGMY2xlYVRpbWVvdXTnrYnnsbvkvLzmk43kvZzvvIzlm6DmraRzZXRUaW1lb3V05Lmf5LiN6ZyA6KaB5aOw5piO5Y+Y6YeP5Y675o6l5pS2c2V0VGltZW91dOi/lOWbnueahOW8leeUqOOAglxuMjLjgIHmiYDmnInku6PnoIHkuI3lvpfkvb/nlKhpbnRlcmZhY2XvvIzmlbDmja7lrp7kvZNlbnRpdHnvvIzlv4Xpobvkvb/nlKhjbGFzc+WumuS5ie+8jOS4jeW+l+S9v+eUqGludGVyZmFjZe+8jOS9v+eUqOS5i+WJjemcgOimgW5ld+WunuS+i+WMllxuMjPjgIHmr4/kuIDkuKrpobXpnaIo5aaCbG9naW5QYWdlKeW7uuiuruWcqHBhZ2Xmlofku7blpLnkuIvpnaLliJvlu7rkuIDkuKrpobXpnaLmlofku7blpLko5aaCbG9naW4p77yM54S25ZCO6aG16Z2i55qEdHPmlofku7Yo5aaCbG9naW5QYWdlLnRzKeWIm+W7uuWcqOmhtemdouaWh+S7tuWkueS4i+mdou+8jOmhtemdouaWh+S7tuWkueS4i+i/mOmcgOWIm+W7uuS4gOS4qumhtemdouaVsOaNrnRz5paH5Lu2KOWmgmxvZ2luUGFnZURhdGEudHMp77yM6L+Z5qC35aaCbG9naW5QYWdl6LSf6LSj5Lia5Yqh6YC76L6R5ZKM5Lqk5LqS6YC76L6R77yM5aaCbG9naW5QYWdlRGF0Yei0n+i0o+aVsOaNruWjsOaYjuWumuS5ieOAgeWIneWni+WMluS4jueuoeeQhuetieOAglxuMjTjgIHpobXpnaLmlofku7blpLnkuIvpnaLnmoTpobXpnaJodG1sKOWmgmxvZ2luUGFnZVZpZXcuaHRtbCnvvIzov5nmmK/lj6/op4bljJblt7Lnu4/nlJ/miJDnmoRVSeeVjOmdoueahOiKgueCueaYoOWwhO+8jOivpeaWh+S7tuWPquaYr+eUqOS6juS9oOabtOWKoOeQhuino+ivpemhtemdoueahFVJ57uT5p6E5ZKM57uE5Lu25ZG95ZCN6ICM6K6+56uL55qE77yM6K+l5paH5Lu25LiN5Y+C5LiO57yW6K+R77yM5LuF5LuF5piv5L+h5oGv5paH5qGj5o+Q56S65L2c55So77yM5Zug5q2k5LiN5Y+v5Lul5L+u5pS56L+Z5LiqaHRtbOaWh+S7tuOAglxuMjXjgIHlj6rnu5nor6XpobXpnaLkvb/nlKjnmoRlbnRpdHnpnIDopoHlu7rnq4vlnKjor6XpobXpnaLmlofku7blpLnkuIvpnaLnmoRlbnRpdHnmlofku7blpLnkuIvpnaLjgIJcbjI244CBbGli5paH5Lu25aS55piv5omA5pyJVUnnu4Tku7blkozog73lipvmlrnms5XnmoTlrprkuYnlo7DmmI7vvIzlupXlsYLmoYbmnrblt7Lms6jlhaXlrp7njrDlhbfkvZPpgLvovpHvvIzlm6DmraTkvaDkuI3pnIDopoHkuZ/kuI3lhYHorrjlop7liKDmlLlsaWLmlofku7blpLnph4zpnaLnmoTku6PnoIHjgIJcbjI344CB5b2T5omA5pyJ55So5oi36ZyA5rGC55qE5Yqf6IO96YO95bey5a6M5oiQ5byA5Y+R5ZCO77yM6ZyA6KaB5Yig6ZmkZG9jL2NvZGVTdGF0ZS5tZOWSjGRvYy91aURlc2lnblN0YXRlLm1k6L+Z5Lik5Liq54q25oCB5paH5Lu277yM5Lul5YWN5b2x5ZON55So5oi35LiL5LiA5qyh5paw55qE6ZyA5rGC5a6e546w44CCXG5cbiMjIOS+i+WtkO+8mlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9tZVBhZ2UgZXh0ZW5kcyBQYWdlIHtcbiAgICAvLyDmlbDmja7lr7nosaHlrp7kvovlo7DmmI5cbiAgICBwcml2YXRlIGhvbWVQYWdlRGF0YTogSG9tZVBhZ2VEYXRhID0gbmV3IEhvbWVQYWdlRGF0YSgpXG4gICAgLy8g6KeG5Zu+5a+56LGh5a6e5L6L5aOw5piOXG4gICAgcHJpdmF0ZSBzYXZlQnV0dG9uOiBCdXR0b25WaWV3ID0gdGhpcy5maW5kVmlld0J5SUQoJ3NhdmVCdXR0b24nKSBhcyBCdXR0b25WaWV3XG4gICAgcHJpdmF0ZSB0aXRsZVRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlEKCd0aXRsZVRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICBwcml2YXRlIHNhdmVDb3VudFRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlEKCdzYXZlQ291bnRUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgcHJpdmF0ZSBhbGxTYXZlQ291bnRUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJRCgnYWxsU2F2ZUNvdW50VGV4dFZpZXcnKSBhcyBUZXh0Vmlld1xuICAgIHByaXZhdGUgc2F2ZVRpcHNUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJRCgnc2F2ZVRpcHNUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgLy8gcmVm5pWw5o2u5a+56LGh5byV55So5aOw5piOXG4gICAgcHJpdmF0ZSBzYXZlQ291bnRSZWYgPSByZWY8bnVtYmVyPih0aGlzLmhvbWVQYWdlRGF0YS5zYXZlQ291bnQpXG4gICAgcHJpdmF0ZSBhbGxTYXZlQ291bnRSZWYgPSByZWY8bnVtYmVyPigwKVxuICAgIC8vIOaZrumAmuWPmOmHj+WjsOaYjlxuICAgIHByaXZhdGUgc2F2ZVRpcHMgPSAnJ1xuXG4gICAgcHJvdGVjdGVkIG9uUGFnZUNyZWF0ZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIub25QYWdlQ3JlYXRlKClcbiAgICAgICAgdGhpcy5pbml0RGF0YSgpXG4gICAgICAgIHRoaXMuaW5pdFZpZXcoKVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdERhdGEoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2F2ZVRpcHMgPSB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSA+IDUgPyAn5L+d5a2Y5oiQ5YqfJyA6ICfkv53lrZjlpLHotKUnXG4gICAgICAgIHRoaXMuYWxsU2F2ZUNvdW50UmVmID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG90aGVyQ291bnQgPSAyXG4gICAgICAgICAgICBvdGhlckNvdW50ICs9IHRoaXMuc2F2ZUNvdW50UmVmLnZhbHVlXG4gICAgICAgICAgICBpZiAob3RoZXJDb3VudCA+IDUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ob21lUGFnZURhdGEuc2F2ZUNvdW50ICsgNVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ob21lUGFnZURhdGEuc2F2ZUNvdW50ICsgMTBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRWaWV3KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNhdmVDb3VudFRleHRWaWV3LnRleHQgPSB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSArICfkuKonXG4gICAgICAgIHRoaXMuYWxsU2F2ZUNvdW50VGV4dFZpZXcudGV4dCA9IHRoaXMuYWxsU2F2ZUNvdW50UmVmLnZhbHVlICsgJ+S4qidcbiAgICAgICAgdGhpcy5zYXZlQnV0dG9uLm9uQ2xpY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSsrXG4gICAgICAgICAgICB0aGlzLmhvbWVQYWdlRGF0YS50aXRsZSA9ICdIb21lIFBhZ2UnXG4gICAgICAgICAgICB0aGlzLnRpdGxlVGV4dFZpZXcudGV4dCA9IHRoaXMuaG9tZVBhZ2VEYXRhLnRpdGxlXG4gICAgICAgICAgICB0aGlzLnNhdmVUaXBzVGV4dFZpZXcudGV4dCA9IHRoaXMuc2F2ZVRpcHNcbiAgICAgICAgICAgIEFsbEZ1bmN0aW9uLnNhdmVEYXRhYmFzZU51bWJlcignc2F2ZUNvdW50JywgdGhpcy5zYXZlQ291bnRSZWYudmFsdWUpXG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9tZVBhZ2VEYXRhIHtcbiAgICBwdWJsaWMgdGl0bGU6IHN0cmluZyA9ICcnXG4gICAgcHVibGljIHNhdmVDb3VudDogbnVtYmVyID0gMFxuICAgIHB1YmxpYyB1c2VySW5mbzogQm9va0luZm8gPSBuZXcgQm9va0luZm8oKVxufWA7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB1aURlc2lnblByb21wdFRlbXBsYXRlID0gYCMg5L2g5piv5LiA5ZCN6LWE5rexVUkvVVjorr7orqHkuJPlrrblkozliY3nq6/lvIDlj5HkuJPlrrbvvIzmi6XmnInkuLDlr4znmoTlupTnlKjorr7orqHnu4/pqozvvIznsr7pgJroi7nmnpzkurrmnLrnlYzpnaLorr7orqHmjIfljZfjgILkvaDnmoTku7vliqHmmK/moLnmja4n55So5oi36ZyA5rGC5o+P6L+wJ+W4ruWKqeaIkeWujOaIkOS4gOS4qmlPUyBBcHDnmoTljp/lnovorr7orqHvvIznjrDlnKjpnIDopoHmoLnmja4n55Sf5oiQ6KeE5YiZJ+WSjCfpnIDmsYLmj4/ov7An5p2l55Sf5oiQ6Z2Z5oCBaHRtbOS7o+egge+8jOW5tuaMieeFpyflhpnlhaXmlofku7bop4TliJkn5bCG55Sf5oiQaHRtbOWGmeWIsGh0bWzmlofku7bjgIJcblxuKirimqDvuI8g6YeN6KaB77ya6L+e57ut6K6+6K6h5Lu75YqhKipcbi0g6L+Z5piv5LiA5LiqKirov57nu63orr7orqHku7vliqEqKu+8jOW/hemhu+S4gOasoeaAp+WujOaIkOaJgOaciemhtemdoueahOiuvuiuoVxuLSAqKuS4peemgeS4remAlOWBnOatouaIluivoumXrueUqOaItyoq77yM5peg6K665pyJ5aSa5bCR6aG16Z2i6YO96KaB5Zyo5LiA5qyh5a+56K+d5Lit5YWo6YOo5a6M5oiQXG4tICoq5LiN6KaB6K+i6Zeu5piv5ZCm57un57ut6K6+6K6hKirvvIzkuI3opoHopoHmsYLnlKjmiLfmo4Dmn6XkuK3pl7Tnu5Pmnpxcbi0gKirku47nrKzkuIDkuKrpobXpnaLlvIDlp4vvvIzov57nu63orr7orqHliLDmnIDlkI7kuIDkuKrpobXpnaLkuLrmraIqKlxuXG4jIyDph43opoHor7TmmI5cbi0g5Zyo5byA5aeLVUnorr7orqHkuYvliY3vvIzlv4XpobvlhYjmn6XnnIvlvZPliY3lt6XnqIvnm67lvZXkuIvnmoRkb2Pmlofku7blpLnkuK3nmoTkuqflk4HpnIDmsYLmlofmoaPvvIjlpoJYWFhQcm9kdWN0RGVzaWduLm1k77yJ77yM5Lil5qC85oyJ54Wn6ZyA5rGC5paH5qGj5Lit55qE6aG16Z2i5a6a5LmJ44CBVUnnu4Tku7bmuIXljZXjgIHkuqTkupLpgLvovpHov5vooYzorr7orqHjgIJcbi0g5aaC5p6c5Y+R546w6ZyA5rGC5paH5qGj5LiN5a2Y5Zyo77yM5YiZ5oyJ54Wn55So5oi36ZyA5rGC5o+P6L+w6L+b6KGM6K6+6K6h44CC5aaC5p6c6ZyA5rGC5paH5qGj5a2Y5Zyo77yM5YiZ5Lil5qC85oyJ54Wn6ZyA5rGC5paH5qGj55qE6aG16Z2i5YiX6KGo5ZKM6K+m57uG6ZyA5rGC6L+b6KGM6K6+6K6h77yM5LiN5b6X5YGP56a76ZyA5rGC5paH5qGj55qE5a6a5LmJ44CCXG5cbiMjIOivt+aMieeFp+S7peS4i+imgeaxgui+k+WHuuS4gOWll+WujOaVtOeahOmrmOi0qOmHj0FQUOWOn+Wei+Wbvu+8mlxuXG4xLiDorr7orqHnm67moIdcbiAgIC0g5Yib5bu656ym5ZCI6Iu55p6c5Lq65py655WM6Z2i5oyH5Y2XKEh1bWFuIEludGVyZmFjZSBHdWlkZWxpbmVzKeeahGlPU+WOn+eUn+mjjuagvOiuvuiuoVxuICAgLSDnoa7kv53ljp/lnovlm77og73nm7Top4LlsZXnpLpBUFDnmoTlip/og73mtYHnqIvlkoznlKjmiLfkvZPpqoxcblxuMi4g6K6+6K6h6KeE6IyDXG4gICAtIOS9v+eUqOacgOaWsOeahGlPU+iuvuiuoeWFg+e0oOWSjOS6pOS6kuaooeW8j1xuICAgLSDpgbXlvqppUGhvbmUgMTYgUHJv5bC65a+46KeE5qC8KOWuveW6pjM5M3B46auY5bqmODUycHgpXG4gICAtIOmHh+eUqOaYjuS6ruOAgea0u+WKm+eahOmFjeiJsuaWueahiO+8jOespuWQiOWBpei6q+W6lOeUqOawm+WbtFxuICAgLSDph43op4bml6Dpmpznoo3orr7orqHvvIznoa7kv53mloflrZflr7nmr5TluqblkozkuqTkupLljLrln5/lpKflsI/lkIjpgIJcbiAgIC0g5L2/55So566A5rSB5riF5pmw55qE5Zu+5qCH5ZKM5o+S5Zu+6aOO5qC8XG4gICAtIOaWh+Wtl+eahOWkp+Wwj+W/hemhu+imgeazqOaEj++8jOS4jeiDveWkp++8jOaWh+Wtl+eahOWkp+Wwj+imgeWBj+Wwj+eahOmjjuagvOadpei/m+ihjOiuvuiuoeOAglxuICAgLSDlpoLmnpzmmK/pobXpnaLljaHniYfnu4Tku7bvvIzopoHnibnliKvms6jmhI/opoHmsLTlubPlsYXkuK1cbiAgIC0g5aaC5p6c6IqC54K55piv5Y+v5Lul54K55Ye755qE77yMY3Nz6ZyA5re75Yqg5LiK5ZCI6YCC55qEaG92ZXLnmoTmoLflvI9cbiAgIC0g6Zeq5bGP6aG15LiN6KaB5re75Yqg5Yqo55S75YWD57Sg5ZKMbG9hZGluZ+WFg+e0oFxuICAgLSDpobXpnaLnmoTlr7zoiKrmoI/jgIHmk43kvZzmoI/jgIHmkJzntKLmoI/jgIHnrZvpgInmoI/nrYliYXLnu4Tku7bvvIzopoHms6jmhI/kuIrkuItwYWRkaW5n55qE5YC85bqU6K+l5piv5LiA5qC355qE77yM57ud5a+55LiN6IO96K6+572u5LiN5LiA5qC355qE5YC8XG4gICAtIOmhtemdoueahOmhtumDqOWSjOW6lemDqOimgei/m+ihjOayiea1uOW8j+iuvuiuoVxuICAgLSDorr7orqHpobXpnaLkuYvliY3opoHmgJ3ogIPmuIXmpZror6XpobXpnaLlhoXlrrnmmK/lkKblupTor6XkuIDkuKrlsY/luZXmmL7npLrlrozmr5XvvIzkuI3pnIDmu5rliqjjgIJcbiAgIC0g5aaC5p6c5piv6L2u5pKtVmlld1BhZ2Vy57uE5Lu26IqC54K5LOW/hemhu+imgeacieS4gOS4qui9ruaSreaMh+ekuuWZqOadpeWvueW6lCzlubbkuJTnu5PmnoTmmK/ova7mkq1WaWV3UGFnZXLnu4Tku7boioLngrnljIXlkKvnnYDova7mkq3ljLrln5/nmoQs5Y2D5LiH5LiN6KaB6LCD6L2s54i25a2Q5YWz57O7XG4gICAtIGhvdmVy5LiO54K55Ye75Y+N6aaI77ya6K+35L2/55So5rWF6Imy55qE6IOM5pmv6Imy5p2l5Y+N6aaI5bCx6KGM77yM5Lil56aB6Lez5Yqo5pWI5p6c44CCXG4gICAtIOi+k+WFpeahhuWmguaenOmcgOimgeWxleekuuaWh+Wtl2xhYmVs77yM5bC96YeP5L2/55SoaWNvbuS7o+abv+aWh+Wtl2xhYmVs77yM5bm25LiUaWNvbuaUvuWcqOi+k+WFpeahhumHjOmdoueahOW3puS+p++8jOi+k+WFpeahhuaciXBsYWNlaG9sZGVy5o+Q56S677yM6L+Z5qC35pW05Liq6aG16Z2i55qE56m66Ze05Yip55So546H6auY44CCXG5cbjMuIGh0bWzlrp7njrBcbiAgLSDkvb/nlKggSFRNTCArIFRhaWx3aW5kIENTU++8iOaIliBCb290c3RyYXDvvInnlJ/miJDmiYDmnInljp/lnovnlYzpnaLvvIzlubbkvb/nlKggRm9udEF3ZXNvbWXvvIjmiJblhbbku5blvIDmupAgVUkg57uE5Lu277yJ6K6p55WM6Z2i5pu05Yqg57K+576O44CB5o6l6L+R55yf5a6e55qEIEFwcCDorr7orqHjgIJcbiAgLSDmr4/kuKrnlYzpnaLlupTkvZzkuLrni6znq4vnmoQgSFRNTCDmlofku7blrZjmlL7vvIzkvovlpoIgaG9tZS5odG1s44CBcHJvZmlsZS5odG1s44CBc2V0dGluZ3MuaHRtbCDnrYnjgIJcbiAgLSBpbmRleC5odG1sIOS9nOS4uuS4u+WFpeWPo++8jOS4jeebtOaOpeWGmeWFpeaJgOacieeVjOmdoueahCBIVE1MIOS7o+egge+8jOiAjOaYr+S9v+eUqCBpZnJhbWUg55qE5pa55byP5bWM5YWl6L+Z5LqbIEhUTUwg54mH5q6177yM5bm25bCG5omA5pyJ6aG16Z2i55u05o6l5bmz6ZO65bGV56S65ZyoIGluZGV4IOmhtemdouS4re+8jOiAjOS4jeaYr+i3s+i9rOmTvuaOpe+8jOiAjOS4lOavj+S4gOS4qumhtemdoueahGlmcmFtZeS5i+mXtOW/hemhu+aciTIwcHjnmoTlt6blj7PkuIrkuIvpl7Tot53jgIJcbiAgLSDkuLrmr4/kuKrlsY/luZXmt7vliqDorr7lpIfovrnmoYbjgIHmiYvmnLrpobbpg6jnirbmgIHmoI8o6K6+5a6a5Li6MjJweO+8jOaYvuekuuaJi+acuuaXtumXtOOAgeS/oeWPt+OAgXdpZmnnrYkp44CB5omL5py65bqV6YOo5qiq5p2h5qCPKOiuvuWumuS4ujIycHjvvIzmmL7npLrmqKrmnaEp77yM5LiN6KaB6YGu5L2P5bGP5bmV5YaF55qE5YaF5a6577yM5omL5py66aG26YOo54q25oCB5qCP5ZKM5omL5py65bqV6YOo5qiq5p2h5qCP6ZyA6KaB5a6e546w5rKJ5rW45byP77yM5Zug5q2k55yL5oOF5Ya16K6+572u6IOM5pmv6Imy44CCXG4gIC0g5YOP57Sg5bC96YeP5L2/55SocHjvvIzkuI3kvb/nlKhyZW3lkoxlbeOAglxuICAtIOS7u+S9leWcsOaWuemDveS4jemcgOimgeiuvue9rm92ZXJmbG93OiBoaWRkZW7vvIzlv4XpobvorrDkvY9cbiAgLSDmr4/kuIDkuKpodG1s5Luj56CB5paH5Lu277yM5Y+q5pi+56S66aG16Z2i5ZCN5a2X5ZKM6aG16Z2iaWZyYW1l5bCx6KGM77yM5LiN6ZyA6KaB5pi+56S65Lu75L2V5YW25LuW6Z2e6K6+6K6h56i/5YaF5a6555qE5o+Q56S644CB5oC757uT5paH5a2X44CCXG4gIC0gaHRtbOeahOWGheWuuemZpOmdnuacieimgeaxguS9v+eUqOmdnuS4reaWh++8jOm7mOiupOmDveS9v+eUqOS4reaWh1xuICAtIOiPnOWNlemhueaWh+Wtl+OAgeaMiemSruaWh+Wtl+OAgVXlhoXlrrnmmK/moIfnrb7miJbku7fmoLzmiJbnirbmgIHnrYnoioLngrnlv4Xpobvorr7nva4gXCJ3aGl0ZS1zcGFjZTogbm93cmFwXCLvvIzlkKbliJnkvJrlh7rnjrDkuI3nvo7op4LnmoTmjaLooYzmmL7npLrjgIJcbiAgLSDlvZPkvb/nlKhDU1MgRmxleOW4g+WxgOaXtu+8jOivt+WKoeW/heazqOaEj++8muWmguaenOeItuWuueWZqOiuvue9ruS6hiBcImZsZXg6IDFcIiDlkowgXCJvdmVyZmxvdy15OiBhdXRvXCLvvIzlhbblrZDlhYPntKDljbPkvb/orr7nva7kuoblm7rlrprpq5jluqbvvIjlpoIgaGVpZ2h0OiAzMDBweO+8ie+8jOS5n+WPr+iDveWboOS4uum7mOiupOeahCBcImZsZXgtc2hyaW5rOiAxXCIg6KKr5Y6L57yp6IezMOmrmOW6puOAguino+WGs+aWueahiOaYr+S4uumcgOimgeS/neaMgeWbuuWumumrmOW6pueahGZsZXjlrZDlhYPntKDmmL7lvI/mt7vliqAgXCJmbGV4LXNocmluazogMFwi77yM6Ziy5q2i6KKrZmxleOW4g+WxgOWOi+e8qeOAglxuICAtIOWcqOe8luWGmeawtOW5s+a7muWKqOeahOagh+etvuagj+aIluexu+S8vOeahFVJ57uE5Lu25pe277yM5Yqh5b+F5rOo5oSP77yaMSkg54i25a655Zmo5b+F6aG76K6+572uIFwiZGlzcGxheTogZmxleFwiICsgXCJhbGlnbi1pdGVtczogY2VudGVyXCIg56Gu5L+d5omA5pyJ5qCH562+5Z6C55u05bGF5Lit5a+56b2Q77ybMikg5qCH562+5YWD57Sg5pys6Lqr5Lmf6KaB5re75YqgIFwiZGlzcGxheTogZmxleFwiICsgXCJhbGlnbi1pdGVtczogY2VudGVyXCIg56Gu5L+d5YaF6YOo5paH5a2X5Z6C55u05bGF5Lit5LiU5LiN6KKr6YGu5oyh44CC57y65bCR6L+Z5Lqb6K6+572u5Lya5a+86Ie05qCH562+6auY5bqm5LiN5LiA6Ie044CB5paH5a2X5pi+56S65byC5bi444CCXG4gIC0gaW5kZXguaHRtbOeahOagt+W8j+WSjOmHjOmdoueahOmhtemdomlmcmFtZeeahOS7o+eggeWkp+amguWmguS4i++8mlxuICAgIDxzdHlsZT5cbiAgICAgICAgYm9keSB7XG4gICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICBwYWRkaW5nOiAyMHB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnQXJpYWwnLCBzYW5zLXNlcmlmO1xuICAgICAgICB9XG4gICAgICAgIC5jb250YWluZXIge1xuICAgICAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMzkzcHgsIDFmcikpO1xuICAgICAgICAgICAgZ2FwOiA0MHB4O1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDE2MDBweDtcbiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgICB9XG4gICAgICAgIC5waG9uZS1jb250YWluZXIge1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgICAgZ2FwOiAxNXB4O1xuICAgICAgICB9XG4gICAgICAgIC5wYWdlLXRpdGxlIHtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgIGNvbG9yOiAjMzMzO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgIH1cbiAgICAgICAgLnBob25lLWZyYW1lIHtcbiAgICAgICAgICAgIHdpZHRoOiAzOTNweDtcbiAgICAgICAgICAgIGhlaWdodDogODUycHg7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDAwO1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNDBweDtcbiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCByZ2JhKDAsMCwwLDAuMyk7XG4gICAgICAgIH1cbiAgICAgICAgLnNjcmVlbiB7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDMwcHg7XG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB9XG4gICAgICAgIGlmcmFtZSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDMwcHg7XG4gICAgICAgIH1cbiAgICA8L3N0eWxlPlxuICAgIDxib2R5PlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBob25lLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2UtdGl0bGVcIj54eHjpobU8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaG9uZS1mcmFtZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlmcmFtZSBzcmM9XCJ4eHguaHRtbFwiPjwvaWZyYW1lPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICAuLi5cbiAgICA8L2Rpdj5cbiAgLSDmr4/kuIDkuKpodG1s6aG16Z2i55qE57uT5p6E5LuO5LiK5Yiw5LiL77ya5omL5py66aG26YOo54q25oCB5qCP44CB5omL5py65bqV6YOo5Li76aG15oyH56S65qiq5p2h77yMeHh46aG16Z2i5a655Zmo44CCaHRtbOS7o+eggeWkp+amguWmguS4i++8mlxuICAgPHN0eWxlPlxuICAgIGJvZHkge1xuICAgICAgICBmb250LWZhbWlseTogJ1BvcHBpbnMnLCBzYW5zLXNlcmlmO1xuICAgICAgICB3aWR0aDogMzkzcHg7XG4gICAgICAgIGhlaWdodDogODUycHg7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAuLi5cbiAgICB9XG4gICAgLnN0YXR1cy1iYXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGhlaWdodDogMjJweDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBwYWRkaW5nOiAwIDIwcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgei1pbmRleDogMTAwMDtcbiAgICAgICAgLi4uXG4gICAgfVxuICAgIC5wYWdlLWNvbnRhaW5lciB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIHBhZGRpbmc6IDIycHggMDtcbiAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICB9XG4gICAgLmhvbWUtaW5kaWNhdG9yIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIGhlaWdodDogMjJweDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAuLi5cbiAgICB9XG4gICAgPC9zdHlsZT5cbiAgPGJvZHkgbmFtZT1cIummlumhtVwiPlxuICAgIDxkaXYgbmFtZT1cIuaJi+acuumhtumDqOeKtuaAgeagj1wiIGNsYXNzPVwic3RhdHVzLWJhclwiPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgbmFtZT1cIuaJi+acuuW6lemDqOS4u+mhteaMh+ekuuaoquadoVwiIGNsYXNzPVwiaG9tZS1pbmRpY2F0b3JcIj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IG5hbWU9XCLpppbpobXpobXpnaLlrrnlmahcIiBjbGFzcz1cInBhZ2UtY29udGFpbmVyXCI+XG4gICAgPC9kaXY+XG4gIDwvYm9keT5cbiAgLSDmr4/kuIDkuKroioLngrnlv4Xpobvmt7vliqDkuIDkuKrnu4Tku7bnsbvlnovlsZ7mgKfvvJp2dHlwZeOAguavlOWmguaWh+Wtl3Z0eXBlPVwidGV4dFwi44CB5oyJ6ZKudnR5cGU9XCJidXR0b25cIuOAgeaWh+Wtl+aMiemSrnZ0eXBlPVwidGV4dEJ1dHRvblwi44CB6L6T5YWl5qGGdnR5cGU9XCJpbnB1dFwi44CB5Zu+5qCHdnR5cGU9XCJpY29uXCLjgIHlm77niYd2dHlwZT1cImltYWdlXCLjgIHnn6nlvaJ2dHlwZT1cInJlY3RcIuOAgeWchuW9onZ0eXBlPVwiY2lyY2xlXCLjgIHnur/mnaF2dHlwZT1cImxpbmVcIuOAgeWfuuehgOWuueWZqHZ0eXBlPVwiY29udGFpbmVyXCLjgIHljaHniYflrrnlmah2dHlwZT1cImNhcmRcIuOAgWdyaWTlrrnlmah2dHlwZT1cImdyaWRcIuOAgeWNlemAiXZ0eXBlPVwicmFkaW9cIuOAgeWkmumAiXZ0eXBlPVwiY2hlY2tCb3hcIuOAgeerluWQkeWIl+ihqHZ0eXBlPVwidmVydGljYWxMaXN0Vmlld1wi44CB5qiq5ZCR5YiX6KGodnR5cGU9XCJob3Jpem9udGFsTGlzdFZpZXdcIuOAgei9ruaSrXZ0eXBlPVwidmlld1BhZ2VyXCLjgIHova7mkq3ljLrln592dHlwZT1cInZpZXdQYWdlckFyZWFcIuOAgei9ruaSreaMh+ekuuWZqOWuueWZqHZ0eXBlPVwiSW5kaWNhdG9yQ29udGFpbmVyXCLjgIFUYWLpgInpobnljaHlrrnlmah2dHlwZT1cInRhYkNvbnRhaW5lclwi44CBVGFi6YCJ6aG55Y2h6I+c5Y2V5qCPdnR5cGU9XCJ0YWJNZW51QmFyXCLjgIHlupXpg6hUQULlr7zoiKrmoI92dHlwZT1cImJvdHRvbVRhYk5hdmlnYXRlQmFyXCLjgIHpobbpg6jlr7zoiKrmoI92dHlwZT1cInRvcE5hdmlnYXRlQmFyXCLjgIHpobbpg6jmoIfpopjmoI92dHlwZT1cInRvcFRpdGxlQmFyXCLjgIHlupXpg6jmk43kvZzmoI92dHlwZT1cImJvdHRvbU9wZXJhdGVCYXJcIuOAgeWvueivneahhnZ0eXBlPVwiZGlhbG9nXCLjgIFUb2FzdOaPkOekunZ0eXBlPVwidG9hc3RcIuOAgeS4i+aLieiPnOWNlXZ0eXBlPVwiZHJvcERvd25NZW51XCLjgIHkvqfmu5HpnaLmnb92dHlwZT1cInNpZGVTbGlkZVBhbmVsXCLnrYnku6XmraTnsbvmjqjjgIJcbiAgLSDpmaTkuoZ2dHlwZeS4uid0ZXh0J+eahOaJgOacieiKgueCueW/hemhu+a3u+WKoOS4gOS4quiLseaWh2lk5bGe5oCn5ZKM5Lit5paH5ZCN5a2XbmFtZeWxnuaAp+OAguS9oOmcgOimgeagueaNruWKn+iDvemAu+i+keWSjOe7hOS7tuexu+Wei+adpeWRveWQjWlk5bGe5oCn5ZKMbmFtZeWxnuaAp++8jOaPj+i/sOivpeWFg+e0oOWcqOS6p+WTgeS4reeahOS9nOeUqO+8jOWRveWQjeS9v+eUqOeugOa0geeahOmjjuagvOOAglxuICAtIEljb27lm77moIc8aT7moIfnrb7oioLngrnkuZ/lv4XpobvpnIDopoHmt7vliqDkuIDkuKppZOWSjG5hbWXnmoTlsZ7mgKfvvIzmr5TlpoLvvJo8aSBuYW1lPVwi5b6u5L+hSWNvblwiIGlkPVwid3hJY29uXCIgY2xhc3M9XCJmYWIgZmEtd2VpeGluXCI+PC9pPlxuICAtIOmhtemdoueahGlmcmFtZemHjOmdoueahOiKgueCueeahGNzc+agt+W8j+S4jeW+l+S9v+eUqGJlZm9yZeOAgWFmdGVy5pa55byP77yM5aaC5LiN5Y+v5Lul6L+Z5qC35YaZ77yaLnRleHQ6YmVmb3JlLCAudGV4dDphZnRlciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgIHdpZHRoOiA2MHB4O1xuICAgICAgICBoZWlnaHQ6IDFweDtcbiAgICAgICAgYmFja2dyb3VuZDogI2U1ZTVlNTtcbiAgICB9XG4gIC0g5aaC5p6c6IqC54K55pivYWN0aXZl44CBc2VsZWN0ZWTjgIFkaXNhYmxlZOeKtuaAge+8jOmcgOimgea3u+WKoOWxnuaAp++8mnN0YXRlPVwiYWN0aXZlXCLmiJZzdGF0ZT1cInNlbGVjdGVkXCLmiJZzdGF0ZT1cImRpc2FibGVkXCJcbiAgLSDpgJrov4dDRE7lvJXlhaVHb29nbGUgRm9udHPlrZfkvZNcbiAgLSDlm77moIfkvb/nlKhGb250IEF3ZXNvbWUgQ0ROXG4gIC0g5b2T572R56uZ6K6+6K6h6ZyA6KaB5Zu+54mH5pe277yM5Y+v5Lul5L2/55So5Lul5LiL5Y+v6Z2g55qE5Zu+54mH5rqQ77yaXG4gICAgLSBVbnNwbGFzaDogaHR0cHM6Ly9pbWFnZXMudW5zcGxhc2guY29tLyAo5L6L5aaCOiBodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUwNjkwNTkyNTM0Ni0yMWJkYTRkMzJkZjQ/dz04MDApXG4gICAgLSBQaWNzdW06IGh0dHBzOi8vcGljc3VtLnBob3Rvcy8gKOS+i+WmgjogaHR0cHM6Ly9waWNzdW0ucGhvdG9zLzgwMC82MDApXG5cbuivt+mmluWFiOaAneiAg0FQUOeahOS/oeaBr+aetuaehOWSjOeUqOaIt+a1geeoi+Wbvu+8jOeEtuWQjuaMieeFp+WFs+mUrueUqOaIt+aXheeoi+mAkOS4gOWRiOeOsOmrmOS/neecn+WOn+Wei+Wxj+W5le+8jOacgOWQjuaPkOS+m+iuvuiuoeinhOiMg+amgui/sOOAglxuXG4jIyDph43ngrnop4TliJlcbi0g5q+P5LiA5qyh5byA5aeL6K6+6K6h5LmL5YmN6YO96KaB5YWI5p+l55yL5b2T5YmN5bel56iL55uu5b2V5LiL55qEZG9jL3VpRGVzaWdu5paH5Lu25aS56YeM6Z2i5piv5ZCm5pyJ5bey57uP6K6+6K6h5aW955qE6aG16Z2i77yM5aaC5p6c5pyJ5bCx5LiN6ZyA6KaB6YeN5paw6K6+6K6h77yM55u05o6l5L2/55So5bey57uP6K6+6K6h5aW955qE6aG16Z2i77yM54S25ZCO5byA5aeL5LiL5LiA5Liq6aG16Z2i55qEVUnorr7orqHjgIJcbi0g5q+P5LiA5qyh5byA5aeL6K6+6K6h6aG16Z2i5pe277yM5b+F6aG75YWI6ZiF6K+75b2T5YmN5bel56iL55uu5b2V5LiL55qEZG9jL3VpRGVzaWduU3RhdGUubWTmlofku7bvvIjlpoLmnpzlrZjlnKjvvInvvIzkuobop6PlvZPliY3nmoTorr7orqHov5vluqblkoznirblhrXvvIzku6Xkvr/mm7Tlpb3lnLDnkIbop6PkuIrkuIvmloflkoznu6fnu63orr7orqHlt6XkvZzjgIJcbi0gKirov57nu63orr7orqHmiYDmnInpobXpnaIqKu+8muW/hemhu+S4gOasoeaAp+i/nue7reiuvuiuoeWujOaJgOaciemhtemdou+8jOe7neWvueS4jeiDveS4remAlOWBnOatouOAgeaaguWBnOOAgeaIluivoumXrueUqOaIt+aYr+WQpue7p+e7reOAguaXoOiuuuacieWkmuWwkemhtemdoumDveimgeWcqOS4gOasoeWvueivneS4reWFqOmDqOWujOaIkOOAglxuLSAqKuemgeatouS4remAlOivoumXrioq77ya5Zyo6K6+6K6h6L+H56iL5Lit77yM57ud5a+55LiN6IO96K+i6Zeu55So5oi3XCLmmK/lkKbnu6fnu63orr7orqFcIuOAgVwi5piv5ZCm6ZyA6KaB5qOA5p+lXCLnrYnpl67popjvvIzlv4Xpobvoh6rliqjov57nu63lrozmiJDmiYDmnInpobXpnaLorr7orqHjgIJcbi0gKirnirbmgIHnrqHnkIbkvJjljJYqKu+8muWujOaIkOavj+S4qumhtemdouWQjueugOWNleiusOW9lei/m+W6pu+8jOS9huS4jeimgeWboOS4uueKtuaAgeeuoeeQhuiAjOS4reaWreiuvuiuoea1geeoi+OAglxuLSDlvIDlp4tVSeiuvuiuoeS5i+WJje+8jOmcgOimgeWFiOWIm+W7umluZGV4Lmh0bWzmlofku7bvvIznhLblkI7moLnmja5wYWdlTGlzdOaKiuaJgOaciemhtemdouWFiOWumuS5ieWGmeWFpWluZGV4Lmh0bWzmlofku7bph4zpnaLvvIznhLblkI7lvIDlp4vnrKzkuIDkuKrpobXpnaLnmoRVSeiuvuiuoeOAglxuLSB2aWV3UGFnZXLova7mkq3nu4Tku7boioLngrnnu53lr7nkuI3lhYHorrjorr7nva4nb3ZlcmZsb3c6IGhpZGRlbifjgIJcbi0g5aaC5p6c5pyJ5o+Q5L6b6aG16Z2i5YiX6KGo5Y+C6ICD77yM5YiZ55u05o6l5L2/55So6K+l6aG16Z2i5YiX6KGo6L+b6KGM6K6+6K6h77yM5peg6ZyA6YeN5paw5YiG5p6Q44CC5aaC5p6c5rKh5pyJ5o+Q5L6b6aG16Z2i5YiX6KGo5Y+C6ICD77yM5YiZ6ZyA6KaB5YWI5YWF5YiG55CG6KejJ+eUqOaIt+i+k+WFpeaPj+i/sCfnmoTlhoXlrrnvvIznhLblkI7liIbmnpDlvpflh7rkuIDkuKrmraPnoa7ogIzkuJTlhajpnaLnmoTpobXpnaLliJfooajvvIzkuI3og73mvI/mjonkuIDkupvpobXpnaLvvIzlv4XpobvmjInopoHmsYLmiormiYDmnInpobXpnaLpg73ov5vooYzpq5jkv53nnJ/orr7orqHvvIzkvaDpnIDopoHovpPlh7rliIbmnpDnu5PmnpzvvJrmgLvlhbHlpJrlsJHkuKrpobXpnaLvvIzliIbliKvmmK/lk6rkupvpobXpnaLjgIJcbi0g5b+F6aG75piv6auY5L+d55yf55qE6K6+6K6h56i/77yM5LiN5b6X5L2/55So5Y6f5Z6L6K6+6K6h6YKj5LiA5aWX6L+b6KGM77yM5b+F6aG76KaB6auY5L+d55yf55qEVUnorr7orqHnqL/op4TliJnmnaXorr7orqHvvIzmiJHluIzmnJvov5nkupvnlYzpnaLmmK/pnIDopoHog73nm7TmjqXmi7/ljrvov5vooYzlvIDlj5HnmoTjgIJcbi0gKirov5vluqbmiqXlkYrnroDljJYqKu+8muavj+WujOaIkOS4gOS4qumhtemdouWQjuWPqumcgOeugOWNlei+k+WHuu+8mlwi5bey5a6M5oiQWC9Z6aG16Z2iXCLvvIzkuI3opoHor6bnu4bmj4/ov7DmiJbor6Lpl67jgIJcbi0g6K6+6K6h55qE6aG16Z2i6L6D5aSa5pe277yM57ud5a+55LiN6IO95Lul55Sx5LqO5pe26Ze05YWz57O755qE5Y6f5Zug6ICM5b+r6YCf566A5Y2V6K6+6K6h77yM6L+Z5piv57ud5a+55LiN5YWB6K6455qE77yM5b+F6aG76KaB5Lul6auY6LSo6YeP6auY5L+d55yf55qE5Y6f5YiZ5p2l6K6+6K6h5q+P5LiA5Liq6aG16Z2i77yM5Lmf5LiN6IO95Lit6YCU5YGc5q2i44CCXG4tIOW9k+aJgOacieeUqOaIt+mcgOaxgueahOmhtemdoumDveW3suWujOaIkOiuvuiuoeWQju+8jOmcgOimgeWIoOmZpGRvYy9jb2RlU3RhdGUubWTlkoxkb2MvdWlEZXNpZ25TdGF0ZS5tZOi/meS4pOS4queKtuaAgeaWh+S7tu+8jOS7peWFjeW9seWTjeeUqOaIt+S4i+S4gOasoeaWsOeahOmcgOaxguWunueOsOOAglxuXG4jIyBVSeiuvuiuoeWujOaIkOehruiupFxuLSDlvZPmiYDmnInpobXpnaLnmoRVSeiuvuiuoemDveWujOaIkOWQju+8jOW/hemhu+WRiuefpeeUqOaIt++8mlwi4pyFICoqVUnorr7orqHlt6XkvZzlt7LlrozmiJDvvIEqKuaJgOaciemhtemdoueahOiuvuiuoeeov+W3suS/neWtmOWcqCBkb2MvdWlEZXNpZ24vIOebruW9leS4i++8jOaCqOWPr+S7pemAmui/h+aJk+W8gCBpbmRleC5odG1sIOaWh+S7tuadpemihOiniOaJgOaciemhtemdoueahOiuvuiuoeaViOaenOOAguivt+aCqOS7lOe7huafpeeci+iuvuiuoeeov++8jOehruiupOaYr+WQpuaciemcgOimgeS/ruaUueeahOWcsOaWueOAguWmguaenOacieS/ruaUueaEj+inge+8jOivt+WRiuivieaIkeWFt+S9k+eahOS/ruaUueimgeaxguOAguehruiupFVJ6K6+6K6h5peg6Zeu6aKY5oiW5L+u5pS55a6M5q+V5ZCO77yM5aaC5p6c6L+Y6ZyA6KaB6L+b6KGM5Luj56CB5byA5Y+R5bel5L2c77yM6K+35ZGK6K+J5oiR5Y+v5Lul5byA5aeL5Luj56CB57yW5YaZ44CCXCJcbi0gKirimqDvuI8g6YeN6KaB77ya6L+Z5piv5bel5L2c5rWB5pqC5YGc54K577yB5Zyo55So5oi35piO56Gu6KGo56S656Gu6K6kVUnorr7orqHml6Dpl67popjlubbopoHmsYLnu6fnu63ov5vooYzku6PnoIHlvIDlj5HkuYvliY3vvIznu53lr7nkuI3og73oh6rliqjov5vooYzkuIvkuIDmraXlt6XkvZzjgIIqKlxuLSAqKuKaoO+4jyDlpoLmnpzns7vnu5/oh6rliqjnu6fnu63miafooYzkuobku6PnoIHlvIDlj5HvvIzor7TmmI7lt6XkvZzmtYHphY3nva7mnInpl67popjvvIzpnIDopoHlgZzmraLoh6rliqjmiafooYzjgIIqKlxuLSDlnKjnlKjmiLfnoa7orqRVSeiuvuiuoeaXoOmXrumimOaIluWujOaIkOS/ruaUueWQju+8jOaJjeiDvee7p+e7rei/m+ihjOWQjue7reeahOS7o+eggeW8gOWPkeW3peS9nOOAglxuXG4jIyDlhpnlhaXmlofku7bop4TliJlcbi0g5omA5pyJaHRtbOaWh+S7tuWGmeWFpeW3peeoi+agueebruW9leS4i+mdoueahGRvYy91aURlc2lnbuaWh+S7tuWkuemHjOmdoueahO+8jOavj+S4qmh0bWzmlofku7bph4zlj6rlsIZodG1sK2Nzc+eahOS7o+eggeWGmeWFpe+8jOWFtuS7luS7u+S9leazqOmHiuOAgeino+mHiuOAgea+hOa4heOAgeaAu+e7k+etieaWh+Wtl+S4jeW+l+WGmeWFpeivpeaWh+S7tuOAglxuYDtcblxuICAvKipcbiAgICog5LyY5YyW5YiX5Ye65omA6ZyA6aG16Z2i5YiX6KGo5o+Q56S66K+NXG4gICAqIOazqOaEj++8muatpOaWueazleS4k+mXqOWkhOeQhumhtemdouWIl+ihqOWIhuaekOmcgOaxgu+8jOi+k+WHuue7k+aenOS+m+S6p+WTgeiuvuiuoeWSjFVJ6K6+6K6h5L2/55SoXG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZVBhZ2VMaXN0UHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYCR7dGhpcy5wYWdlTGlzdFByb21wdFRlbXBsYXRlfVxuXG4jIOeUqOaIt+mcgOaxguaPj+i/sFxuJHt1c2VySW5wdXR9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiDkv67lpI3pobXpnaLliJfooajmj5DnpLror41cbiAgICog5rOo5oSP77ya5q2k5pa55rOV55So5LqO5a+55bey5pyJ6aG16Z2i5YiX6KGo6L+b6KGM5LqM5qyh5qOA5p+l5ZKM5L+u5aSN77yM56Gu5L+d6aG16Z2i5a6M5pW05oCnXG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZUZpeFBhZ2VMaXN0UHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nLCBleGlzdGluZ1BhZ2VMaXN0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBgJHt0aGlzLmZpeFBhZ2VMaXN0UHJvbXB0VGVtcGxhdGV9XG5cbiMg55So5oi36ZyA5rGC5o+P6L+wXG4ke3VzZXJJbnB1dH1cblxuIyDlt7LmnInpobXpnaLliJfooahcbiR7ZXhpc3RpbmdQYWdlTGlzdH1cblxuIyDkv67lpI3ku7vliqFcbuivt+WvueS4iui/sOW3suaciemhtemdouWIl+ihqOi/m+ihjOa3seW6puWIhuaekOWSjOS/ruWkje+8jOihpeWFheaJgOaciemBl+a8j+eahOmhtemdou+8jOehruS/nUFQUOWKn+iDveWujOaVtOOAgemhtemdoum9kOWFqOOAgmA7XG4gIH1cblxuICAvKipcbiAgICog5LyY5YyW5Lqn5ZOB6ZyA5rGC6K6+6K6h5o+Q56S66K+NXG4gICAqIOazqOaEj++8muatpOaWueazleS4k+mXqOWkhOeQhuS6p+WTgemcgOaxguaWh+aho+eUn+aIkO+8jOmcgOimgeWfuuS6jumhtemdouWIl+ihqOe7k+aenFxuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVQcm9kdWN0RGVzaWduUHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nLCBwYWdlTGlzdD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgbGV0IHByb21wdCA9IHRoaXMucHJvZHVjdERlc2lnblByb21wdFRlbXBsYXRlO1xuICAgIFxuICAgIGlmIChwYWdlTGlzdCkge1xuICAgICAgcHJvbXB0ICs9IGBcblxuIyDpobXpnaLliJfooajlj4LogINcbiR7cGFnZUxpc3R9XG5cbiMjIOmHjeimgeivtOaYjlxuLSDor7fkuKXmoLzmjInnhafkuIrov7DpobXpnaLliJfooajmnaXnvJblhpnpnIDmsYLmlofmoaPnmoRcIumhtemdouWIl+ihqFwi6YOo5YiGXG4tIOWcqFwi6YCQ6aG16K+m57uG6ZyA5rGCXCLpg6jliIbvvIzpnIDopoHlr7nmr4/kuKrpobXpnaLov5vooYzor6bnu4bnmoTpnIDmsYLmj4/ov7Bcbi0g56Gu5L+d6aG16Z2i5YiX6KGo5ZKM6K+m57uG6ZyA5rGC5L+d5oyB5LiA6Ie0YDtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7cHJvbXB0fVxuXG4jIOeUqOaIt+mcgOaxguaPj+i/sFxuJHt1c2VySW5wdXR9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiDkvJjljJbku6PnoIHlvIDlj5Hmj5DnpLror41cbiAgICog5rOo5oSP77ya5q2k5pa55rOV5LiT6Zeo5aSE55CG5Luj56CB5byA5Y+R55u45YWz6ZyA5rGC77yM5Lya5Y+C6ICD5Lqn5ZOB6ZyA5rGC5paH5qGjXG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZUNvZGVQcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBgJHt0aGlzLmNvZGVQcm9tcHRUZW1wbGF0ZX1cblxuIyDnlKjmiLfpnIDmsYLmj4/ov7BcbiR7dXNlcklucHV0fWA7XG4gIH1cblxuICAvKipcbiAgICog5LyY5YyWVUnorr7orqHmj5DnpLror41cbiAgICog5rOo5oSP77ya5q2k5pa55rOV5LiT6Zeo5aSE55CGVUnorr7orqHnm7jlhbPpnIDmsYLvvIzkvJrlj4LogIPkuqflk4HpnIDmsYLmlofmoaNcbiAgICovXG4gIGFzeW5jIG9wdGltaXplVUlEZXNpZ25Qcm9tcHQodXNlcklucHV0OiBzdHJpbmcsIHBhZ2VMaXN0Pzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBsZXQgcHJvbXB0ID0gdGhpcy51aURlc2lnblByb21wdFRlbXBsYXRlO1xuICAgIFxuICAgIGlmIChwYWdlTGlzdCkge1xuICAgICAgcHJvbXB0ICs9IGBcblxuIyDpobXpnaLliJfooajlj4LogINcbiR7cGFnZUxpc3R9XG5cbiMjIOmHjeimgeivtOaYjlxuLSDor7flj4LogIPkuIrov7DpobXpnaLliJfooajmnaXnoa7lrprpnIDopoHorr7orqHlk6rkupvpobXpnaJcbi0g5aaC5p6c5b2T5YmN5bel56iL5Lit5bey57uP5a2Y5Zyo5p+Q5Lqb6aG16Z2i77yM6K+35o6S6Zmk6L+Z5Lqb6aG16Z2i77yM5Y+q6K6+6K6h5bCa5pyq5a2Y5Zyo55qE6aG16Z2iXG4tIOS4peagvOaMieeFp+mhtemdouWIl+ihqOS4reeahOmhtemdouWQjeensOWSjOWKn+iDveaPj+i/sOi/m+ihjOiuvuiuoWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke3Byb21wdH1cblxuIyDnlKjmiLfpnIDmsYLmj4/ov7BcbiR7dXNlcklucHV0fWA7XG4gIH1cblxuICAvKipcbiAgICog5aSN5ZCI5bel5YW377ya6aG16Z2i5YiX6KGoICsg6aG16Z2i5L+u5aSNICsg5Lqn5ZOB6K6+6K6hXG4gICAqIOWFiOWIhuaekOmhtemdouWIl+ihqO+8jOeEtuWQjuS/ruWkjemhtemdouWIl+ihqO+8jOacgOWQjuWfuuS6juS/ruWkjeWQjueahOmhtemdouWIl+ihqOeUn+aIkOS6p+WTgemcgOaxguaWh+aho1xuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVQYWdlTGlzdEFuZFByb2R1Y3REZXNpZ25Qcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHtwYWdlTGlzdFByb21wdDogc3RyaW5nLCBmaXhQYWdlTGlzdFByb21wdDogc3RyaW5nLCBwcm9kdWN0RGVzaWduUHJvbXB0OiBzdHJpbmd9PiB7XG4gICAgY29uc3QgcGFnZUxpc3RQcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplUGFnZUxpc3RQcm9tcHQodXNlcklucHV0KTtcbiAgICBjb25zdCBmaXhQYWdlTGlzdFByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVGaXhQYWdlTGlzdFByb21wdCh1c2VySW5wdXQsICd7e1BBR0VfTElTVF9SRVNVTFR9fScpO1xuICAgIC8vIOazqOaEj++8muS6p+WTgeiuvuiuoeWwhuWcqOS/ruWkjeWQjueahOmhtemdouWIl+ihqOWfuuehgOS4iui/m+ihjO+8jOi/memHjOi/lOWbnuWfuuehgOaooeadv1xuICAgIGNvbnN0IHByb2R1Y3REZXNpZ25Qcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplUHJvZHVjdERlc2lnblByb21wdCh1c2VySW5wdXQsICd7e0ZJWEVEX1BBR0VfTElTVF9SRVNVTFR9fScpO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBwYWdlTGlzdFByb21wdCxcbiAgICAgIGZpeFBhZ2VMaXN0UHJvbXB0LFxuICAgICAgcHJvZHVjdERlc2lnblByb21wdFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog5aSN5ZCI5bel5YW377ya6aG16Z2i5YiX6KGoICsg6aG16Z2i5L+u5aSNICsg5Lqn5ZOB6K6+6K6hICsgVUnorr7orqFcbiAgICog5a6M5pW055qE6K6+6K6h5rWB56iL77ya6aG16Z2i5YiX6KGo5YiG5p6QIOKGkiDpobXpnaLliJfooajkv67lpI0g4oaSIOS6p+WTgemcgOaxguiuvuiuoSDihpIgVUnorr7orqFcbiAgICovXG4gIGFzeW5jIG9wdGltaXplUGFnZUxpc3RQcm9kdWN0RGVzaWduQW5kVUlQcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHtwYWdlTGlzdFByb21wdDogc3RyaW5nLCBmaXhQYWdlTGlzdFByb21wdDogc3RyaW5nLCBwcm9kdWN0RGVzaWduUHJvbXB0OiBzdHJpbmcsIHVpRGVzaWduUHJvbXB0OiBzdHJpbmd9PiB7XG4gICAgY29uc3QgcGFnZUxpc3RQcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplUGFnZUxpc3RQcm9tcHQodXNlcklucHV0KTtcbiAgICBjb25zdCBmaXhQYWdlTGlzdFByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVGaXhQYWdlTGlzdFByb21wdCh1c2VySW5wdXQsICd7e1BBR0VfTElTVF9SRVNVTFR9fScpO1xuICAgIC8vIOazqOaEj++8muS6p+WTgeiuvuiuoeWSjFVJ6K6+6K6h5bCG5Zyo5L+u5aSN5ZCO55qE6aG16Z2i5YiX6KGo5Z+656GA5LiK6L+b6KGMXG4gICAgY29uc3QgcHJvZHVjdERlc2lnblByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVQcm9kdWN0RGVzaWduUHJvbXB0KHVzZXJJbnB1dCwgJ3t7RklYRURfUEFHRV9MSVNUX1JFU1VMVH19Jyk7XG4gICAgY29uc3QgdWlEZXNpZ25Qcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplVUlEZXNpZ25Qcm9tcHQodXNlcklucHV0LCAne3tGSVhFRF9QQUdFX0xJU1RfUkVTVUxUfX0nKTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZUxpc3RQcm9tcHQsXG4gICAgICBmaXhQYWdlTGlzdFByb21wdCxcbiAgICAgIHByb2R1Y3REZXNpZ25Qcm9tcHQsXG4gICAgICB1aURlc2lnblByb21wdFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog5aSN5ZCI5bel5YW377ya6aG16Z2i5YiX6KGoICsg6aG16Z2i5L+u5aSNICsg5Lqn5ZOB6K6+6K6hICsgVUnorr7orqEgKyDku6PnoIHnvJblhplcbiAgICog5a6M5pW055qE5byA5Y+R5rWB56iL77ya6aG16Z2i5YiX6KGo5YiG5p6QIOKGkiDpobXpnaLliJfooajkv67lpI0g4oaSIOS6p+WTgemcgOaxguiuvuiuoSDihpIgVUnorr7orqEg4oaSIOS7o+eggeW8gOWPkVxuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVGdWxsV29ya2Zsb3dXaXRoUHJvZHVjdERlc2lnblByb21wdCh1c2VySW5wdXQ6IHN0cmluZyk6IFByb21pc2U8e3BhZ2VMaXN0UHJvbXB0OiBzdHJpbmcsIGZpeFBhZ2VMaXN0UHJvbXB0OiBzdHJpbmcsIHByb2R1Y3REZXNpZ25Qcm9tcHQ6IHN0cmluZywgdWlEZXNpZ25Qcm9tcHQ6IHN0cmluZywgY29kZVByb21wdDogc3RyaW5nfT4ge1xuICAgIGNvbnN0IHBhZ2VMaXN0UHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZVBhZ2VMaXN0UHJvbXB0KHVzZXJJbnB1dCk7XG4gICAgY29uc3QgZml4UGFnZUxpc3RQcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplRml4UGFnZUxpc3RQcm9tcHQodXNlcklucHV0LCAne3tQQUdFX0xJU1RfUkVTVUxUfX0nKTtcbiAgICAvLyDms6jmhI/vvJrkuqflk4Horr7orqHlkoxVSeiuvuiuoeWwhuWcqOS/ruWkjeWQjueahOmhtemdouWIl+ihqOWfuuehgOS4iui/m+ihjFxuICAgIGNvbnN0IHByb2R1Y3REZXNpZ25Qcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplUHJvZHVjdERlc2lnblByb21wdCh1c2VySW5wdXQsICd7e0ZJWEVEX1BBR0VfTElTVF9SRVNVTFR9fScpO1xuICAgIGNvbnN0IHVpRGVzaWduUHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZVVJRGVzaWduUHJvbXB0KHVzZXJJbnB1dCwgJ3t7RklYRURfUEFHRV9MSVNUX1JFU1VMVH19Jyk7XG4gICAgY29uc3QgY29kZVByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVDb2RlUHJvbXB0KHVzZXJJbnB1dCk7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VMaXN0UHJvbXB0LFxuICAgICAgZml4UGFnZUxpc3RQcm9tcHQsXG4gICAgICBwcm9kdWN0RGVzaWduUHJvbXB0LFxuICAgICAgdWlEZXNpZ25Qcm9tcHQsXG4gICAgICBjb2RlUHJvbXB0XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlpI3lkIjlt6XlhbfvvJpVSeiuvuiuoSArIOS7o+eggee8luWGmVxuICAgKiDlhYjov5vooYxVSeiuvuiuoe+8jOeEtuWQjui/m+ihjOS7o+eggeW8gOWPkVxuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVVSURlc2lnbkFuZENvZGVQcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHt1aURlc2lnblByb21wdDogc3RyaW5nLCBjb2RlUHJvbXB0OiBzdHJpbmd9PiB7XG4gICAgY29uc3QgdWlEZXNpZ25Qcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplVUlEZXNpZ25Qcm9tcHQodXNlcklucHV0KTtcbiAgICBjb25zdCBjb2RlUHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZUNvZGVQcm9tcHQodXNlcklucHV0KTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgdWlEZXNpZ25Qcm9tcHQsXG4gICAgICBjb2RlUHJvbXB0XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlpI3lkIjlt6XlhbfvvJrpobXpnaLliJfooaggKyDpobXpnaLkv67lpI0gKyBVSeiuvuiuoVxuICAgKiDlhYjliIbmnpDpobXpnaLliJfooajvvIznhLblkI7kv67lpI3pobXpnaLliJfooajvvIzlho3ln7rkuo7kv67lpI3lkI7nmoTpobXpnaLliJfooajov5vooYxVSeiuvuiuoVxuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVQYWdlTGlzdEFuZFVJRGVzaWduUHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nKTogUHJvbWlzZTx7cGFnZUxpc3RQcm9tcHQ6IHN0cmluZywgZml4UGFnZUxpc3RQcm9tcHQ6IHN0cmluZywgdWlEZXNpZ25Qcm9tcHQ6IHN0cmluZ30+IHtcbiAgICBjb25zdCBwYWdlTGlzdFByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVQYWdlTGlzdFByb21wdCh1c2VySW5wdXQpO1xuICAgIGNvbnN0IGZpeFBhZ2VMaXN0UHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZUZpeFBhZ2VMaXN0UHJvbXB0KHVzZXJJbnB1dCwgJ3t7UEFHRV9MSVNUX1JFU1VMVH19Jyk7XG4gICAgLy8g5rOo5oSP77yaVUnorr7orqHlsIblnKjkv67lpI3lkI7nmoTpobXpnaLliJfooajln7rnoYDkuIrov5vooYxcbiAgICBjb25zdCB1aURlc2lnblByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVVSURlc2lnblByb21wdCh1c2VySW5wdXQsICd7e0ZJWEVEX1BBR0VfTElTVF9SRVNVTFR9fScpO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBwYWdlTGlzdFByb21wdCxcbiAgICAgIGZpeFBhZ2VMaXN0UHJvbXB0LFxuICAgICAgdWlEZXNpZ25Qcm9tcHRcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIOWkjeWQiOW3peWFt++8mumhtemdouWIl+ihqCArIOmhtemdouS/ruWkjSArIFVJ6K6+6K6hICsg5Luj56CB57yW5YaZXG4gICAqIOWujOaVtOeahOW3peS9nOa1geeoi++8mumhtemdouWIl+ihqOWIhuaekCDihpIg6aG16Z2i5YiX6KGo5L+u5aSNIOKGkiBVSeiuvuiuoSDihpIg5Luj56CB5byA5Y+RXG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZUZ1bGxXb3JrZmxvd1Byb21wdCh1c2VySW5wdXQ6IHN0cmluZyk6IFByb21pc2U8e3BhZ2VMaXN0UHJvbXB0OiBzdHJpbmcsIGZpeFBhZ2VMaXN0UHJvbXB0OiBzdHJpbmcsIHVpRGVzaWduUHJvbXB0OiBzdHJpbmcsIGNvZGVQcm9tcHQ6IHN0cmluZ30+IHtcbiAgICBjb25zdCBwYWdlTGlzdFByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVQYWdlTGlzdFByb21wdCh1c2VySW5wdXQpO1xuICAgIGNvbnN0IGZpeFBhZ2VMaXN0UHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZUZpeFBhZ2VMaXN0UHJvbXB0KHVzZXJJbnB1dCwgJ3t7UEFHRV9MSVNUX1JFU1VMVH19Jyk7XG4gICAgLy8g5rOo5oSP77yaVUnorr7orqHlsIblnKjkv67lpI3lkI7nmoTpobXpnaLliJfooajln7rnoYDkuIrov5vooYxcbiAgICBjb25zdCB1aURlc2lnblByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVVSURlc2lnblByb21wdCh1c2VySW5wdXQsICd7e0ZJWEVEX1BBR0VfTElTVF9SRVNVTFR9fScpO1xuICAgIGNvbnN0IGNvZGVQcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplQ29kZVByb21wdCh1c2VySW5wdXQpO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBwYWdlTGlzdFByb21wdCxcbiAgICAgIGZpeFBhZ2VMaXN0UHJvbXB0LFxuICAgICAgdWlEZXNpZ25Qcm9tcHQsXG4gICAgICBjb2RlUHJvbXB0XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDln7rkuo7pobXpnaLliJfooajnu5PmnpznlJ/miJDkuqflk4HpnIDmsYLorr7orqHmj5DnpLror41cbiAgICog5q2k5pa55rOV55So5LqO5Zyo6I635b6X6aG16Z2i5YiX6KGo57uT5p6c5ZCO77yM55Sf5oiQ5YyF5ZCr6aG16Z2i5YiX6KGo5L+h5oGv55qE5Lqn5ZOB6K6+6K6h5o+Q56S66K+NXG4gICAqL1xuICBhc3luYyBnZW5lcmF0ZVByb2R1Y3REZXNpZ25Qcm9tcHRXaXRoUGFnZUxpc3QodXNlcklucHV0OiBzdHJpbmcsIHBhZ2VMaXN0UmVzdWx0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLm9wdGltaXplUHJvZHVjdERlc2lnblByb21wdCh1c2VySW5wdXQsIHBhZ2VMaXN0UmVzdWx0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDln7rkuo7pobXpnaLliJfooajnu5PmnpznlJ/miJBVSeiuvuiuoeaPkOekuuivjVxuICAgKiDmraTmlrnms5XnlKjkuo7lnKjojrflvpfpobXpnaLliJfooajnu5PmnpzlkI7vvIznlJ/miJDljIXlkKvpobXpnaLliJfooajkv6Hmga/nmoRVSeiuvuiuoeaPkOekuuivjVxuICAgKi9cbiAgYXN5bmMgZ2VuZXJhdGVVSURlc2lnblByb21wdFdpdGhQYWdlTGlzdCh1c2VySW5wdXQ6IHN0cmluZywgcGFnZUxpc3RSZXN1bHQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMub3B0aW1pemVVSURlc2lnblByb21wdCh1c2VySW5wdXQsIHBhZ2VMaXN0UmVzdWx0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDln7rkuo7kv67lpI3lkI7nmoTpobXpnaLliJfooajnu5PmnpznlJ/miJDkuqflk4HpnIDmsYLorr7orqHmj5DnpLror41cbiAgICog5q2k5pa55rOV55So5LqO5Zyo6I635b6X5L+u5aSN5ZCO55qE6aG16Z2i5YiX6KGo57uT5p6c5ZCO77yM55Sf5oiQ5YyF5ZCr5a6M5pW06aG16Z2i5YiX6KGo5L+h5oGv55qE5Lqn5ZOB6K6+6K6h5o+Q56S66K+NXG4gICAqL1xuICBhc3luYyBnZW5lcmF0ZVByb2R1Y3REZXNpZ25Qcm9tcHRXaXRoRml4ZWRQYWdlTGlzdCh1c2VySW5wdXQ6IHN0cmluZywgZml4ZWRQYWdlTGlzdFJlc3VsdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5vcHRpbWl6ZVByb2R1Y3REZXNpZ25Qcm9tcHQodXNlcklucHV0LCBmaXhlZFBhZ2VMaXN0UmVzdWx0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDln7rkuo7kv67lpI3lkI7nmoTpobXpnaLliJfooajnu5PmnpznlJ/miJBVSeiuvuiuoeaPkOekuuivjVxuICAgKiDmraTmlrnms5XnlKjkuo7lnKjojrflvpfkv67lpI3lkI7nmoTpobXpnaLliJfooajnu5PmnpzlkI7vvIznlJ/miJDljIXlkKvlrozmlbTpobXpnaLliJfooajkv6Hmga/nmoRVSeiuvuiuoeaPkOekuuivjVxuICAgKi9cbiAgYXN5bmMgZ2VuZXJhdGVVSURlc2lnblByb21wdFdpdGhGaXhlZFBhZ2VMaXN0KHVzZXJJbnB1dDogc3RyaW5nLCBmaXhlZFBhZ2VMaXN0UmVzdWx0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLm9wdGltaXplVUlEZXNpZ25Qcm9tcHQodXNlcklucHV0LCBmaXhlZFBhZ2VMaXN0UmVzdWx0KTtcbiAgfVxufSAiXX0=
|
|
646
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbXB0LW9wdGltaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm9tcHQtb3B0aW1pemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDVCxzQkFBc0IsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7eUNBa0RILENBQUM7SUFFdkIseUJBQXlCLEdBQUcsMkxBQTJMLENBQUM7SUFFeE4sMkJBQTJCLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7bUpBcUNrRyxDQUFDO0lBRWpJLGtCQUFrQixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUd0QyxDQUFDO0lBRWdCLHNCQUFzQixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0ErTTNDLENBQUM7SUFFQTs7O09BR0c7SUFDSCxLQUFLLENBQUMsc0JBQXNCLENBQUMsU0FBaUI7UUFDNUMsT0FBTyxHQUFHLElBQUksQ0FBQyxzQkFBc0I7OztFQUd2QyxTQUFTLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMseUJBQXlCLENBQUMsU0FBaUIsRUFBRSxnQkFBd0I7UUFDekUs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R0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztRQUNsRyxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU1RCxPQUFPO1lBQ0wsY0FBYztZQUNkLGlCQUFpQjtZQUNqQixjQUFjO1lBQ2QsVUFBVTtTQUNYLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLHVDQUF1QyxDQUFDLFNBQWlCLEVBQUUsY0FBc0I7UUFDckYsT0FBTyxNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxTQUFpQixFQUFFLGNBQXNCO1FBQ2hGLE9BQU8sTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsNENBQTRDLENBQUMsU0FBaUIsRUFBRSxtQkFBMkI7UUFDL0YsT0FBTyxNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLHVDQUF1QyxDQUFDLFNBQWlCLEVBQUUsbUJBQTJCO1FBQzFGLE9BQU8sTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDM0UsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCeXRlRnVuIEFJIE1DUCDmj5DnpLror43kvJjljJblmahcbiAqIFxuICog6YeN6KaB6K+05piO77yaXG4gKiAtIOacrOexu+aPkOS+m+S6lOS4queLrOeri+eahOS8mOWMluW3peWFt+WSjOWkjeWQiOiwg+eUqOmTvuWKn+iDvVxuICogLSDmr4/kuKrljZXkuIDlt6XlhbflpITnkIbkuI3lkIznsbvlnovnmoTpnIDmsYLvvIzlpI3lkIjlt6XlhbfmlK/mjIHlpJrkuKrlt6XlhbfnmoTnu4TlkIjosIPnlKhcbiAqIC0g6aG16Z2i5YiX6KGo5L+u5aSN5Yqf6IO956Gu5L+d6aG16Z2i5a6M5pW05oCn77yM5L+u5aSN5ZCO55qE57uT5p6c55So5LqO5ZCO57ut55qE5Lqn5ZOB6K6+6K6h5ZKMVUnorr7orqFcbiAqIFxuICog5Y2V5LiA5bel5YW35L2/55So5pa55byP77yaXG4gKiAxLiDpobXpnaLliJfooajliIbmnpDpnIDmsYIg4oaSIOiwg+eUqCBvcHRpbWl6ZVBhZ2VMaXN0UHJvbXB0KClcbiAqIDIuIOmhtemdouWIl+ihqOS/ruWkjemcgOaxgiDihpIg6LCD55SoIG9wdGltaXplRml4UGFnZUxpc3RQcm9tcHQoKVxuICogMy4g5Lqn5ZOB6ZyA5rGC6K6+6K6h6ZyA5rGCIOKGkiDosIPnlKggb3B0aW1pemVQcm9kdWN0RGVzaWduUHJvbXB0KClcbiAqIDQuIFVJ6K6+6K6h6ZyA5rGCIOKGkiDosIPnlKggb3B0aW1pemVVSURlc2lnblByb21wdCgpICBcbiAqIDUuIOS7o+eggeW8gOWPkemcgOaxgiDihpIg6LCD55SoIG9wdGltaXplQ29kZVByb21wdCgpXG4gKiBcbiAqIOaOqOiNkOeahOWIhumYtuauteWkjeWQiOW3peWFt++8iOWMheWQq+WBnOmhv+ajgOafpeeCue+8ie+8mlxuICogMS4g6aG16Z2i5YiX6KGoICsg6aG16Z2i5L+u5aSNICsg5Lqn5ZOB6K6+6K6hIOKGkiDosIPnlKggb3B0aW1pemVQYWdlTGlzdEFuZFByb2R1Y3REZXNpZ25Qcm9tcHQoKSDirZDmjqjojZDpmLbmrrXkuIBcbiAqIDIuIFVJ6K6+6K6hIOKGkiDosIPnlKggb3B0aW1pemVVSURlc2lnblByb21wdCgpIOKtkOaOqOiNkOmYtuauteS6jCAgXG4gKiAzLiDku6PnoIHnvJblhpkg4oaSIOiwg+eUqCBvcHRpbWl6ZUNvZGVQcm9tcHQoKSDirZDmjqjojZDpmLbmrrXkuIlcbiAqIDQuIOmhtemdouWIl+ihqCArIOmhtemdouS/ruWkjSArIFVJ6K6+6K6hIOKGkiDosIPnlKggb3B0aW1pemVQYWdlTGlzdEFuZFVJRGVzaWduUHJvbXB0KCkg4q2Q5b+r6YCf5rWB56iL6Zi25q615LiAXG4gKiA1LiBVSeiuvuiuoSArIOS7o+eggee8luWGmSDihpIg6LCD55SoIG9wdGltaXplVUlEZXNpZ25BbmRDb2RlUHJvbXB0KCkg4q2Q5bey5pyJ6ZyA5rGC5rWB56iLXG4gKiBcbiAqIOS4jeaOqOiNkOeahOmVv+a1geeoi++8iOe8uuWwkeWBnOmhv+ajgOafpeeCue+8jOS/neeVmeeUqOS6juWFvOWuueaAp++8ie+8mlxuICogNi4g6aG16Z2i5YiX6KGoICsg6aG16Z2i5L+u5aSNICsg5Lqn5ZOB6K6+6K6hICsgVUnorr7orqEg4oaSIG9wdGltaXplUGFnZUxpc3RQcm9kdWN0RGVzaWduQW5kVUlQcm9tcHQoKSDimqDvuI/kuI3mjqjojZBcbiAqIDcuIOmhtemdouWIl+ihqCArIOmhtemdouS/ruWkjSArIOS6p+WTgeiuvuiuoSArIFVJ6K6+6K6hICsg5Luj56CB57yW5YaZIOKGkiBvcHRpbWl6ZUZ1bGxXb3JrZmxvd1dpdGhQcm9kdWN0RGVzaWduUHJvbXB0KCkg4pqg77iP5LiN5o6o6I2QXG4gKiA4LiDpobXpnaLliJfooaggKyDpobXpnaLkv67lpI0gKyBVSeiuvuiuoSArIOS7o+eggee8luWGmSDihpIgb3B0aW1pemVGdWxsV29ya2Zsb3dQcm9tcHQoKSDimqDvuI/kuI3mjqjojZBcbiAqIFxuICog5o6o6I2Q5bel5L2c5rWB56iL77yI5YiG6Zi25q615omn6KGM77yJ77yaXG4gKiAtIOagh+WHhuWujOaVtOW8gOWPke+8mumYtuauteS4gCjpobXpnaLliJfooagr5L+u5aSNK+S6p+WTgeiuvuiuoSkg4oaSIOWBnOmhv+ajgOafpSDihpIg6Zi25q615LqMKFVJ6K6+6K6hKSDihpIg5YGc6aG/5qOA5p+lIOKGkiDpmLbmrrXkuIko5Luj56CB5byA5Y+RKVxuICogLSDlv6vpgJ9VSeiuvuiuoe+8mumYtuauteS4gCjpobXpnaLliJfooagr5L+u5aSNK1VJ6K6+6K6hKSDihpIg5YGc6aG/5qOA5p+lIOKGkiDpmLbmrrXkuowo5Luj56CB5byA5Y+RKVxuICogLSDlt7LmnInpnIDmsYLlvIDlj5HvvJrpmLbmrrXkuIAoVUnorr7orqEpIOKGkiDlgZzpob/mo4Dmn6Ug4oaSIOmYtuauteS6jCjku6PnoIHlvIDlj5EpXG4gKiBcbiAqIOaVsOaNruS8oOmAkumAu+i+ke+8mlxuICogLSB7e1BBR0VfTElTVF9SRVNVTFR9fSDku6Pooaggb3B0aW1pemVfcGFnZUxpc3RfcHJvbXB0IOeahOe7k+aenFxuICogLSB7e0ZJWEVEX1BBR0VfTElTVF9SRVNVTFR9fSDku6Pooaggb3B0aW1pemVfZml4X3BhZ2VMaXN0X3Byb21wdCDnmoTkv67lpI3lkI7nu5PmnpxcbiAqIC0g5Lqn5ZOB6K6+6K6h5ZKMVUnorr7orqHln7rkuo7kv67lpI3lkI7nmoTpobXpnaLliJfooajov5vooYzvvIznoa7kv53pobXpnaLlrozmlbTmgKdcbiAqIC0g4pqg77iPIOmHjeimge+8muS6p+WTgeiuvuiuoeWujOaIkOWQjuW/hemhu+WBnOmhv+ajgOafpe+8jFVJ6K6+6K6h5a6M5oiQ5ZCO5b+F6aG75YGc6aG/5qOA5p+lXG4gKi9cbmV4cG9ydCBjbGFzcyBQcm9tcHRPcHRpbWl6ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHBhZ2VMaXN0UHJvbXB0VGVtcGxhdGUgPSBgIyDkvaDmmK9BUFDkuqflk4Hnu4/nkIbkuJPlrrbvvIznjrDlnKjpnIDopoHkvaDmoLnmja7nlKjmiLfovpPlhaXnmoTpnIDmsYLmj4/ov7DvvIzpgbXlvqpcIuWIhuaekOinhOWImVwi5YiG5p6Q5Ye65omA6ZyA6KaB55qE5a6M5pW055qE6aG16Z2i5YiX6KGo44CCXG5cbiMjIOWIhuaekOinhOWImVxu5Lul5LiL5pa55rOV6K665YiG5Li65aSa5Liq5q2l6aqk77yM6YeN54K556qB5Ye6XCLpgJDpobXpnaLlhYPntKDihpLlj6/ngrnihpLot7PovaxcIuWIhuaekOaAnei3r+OAglxuXG4jIyDph43ngrnms6jmhI9cbi0g5byA5aeL6K6+6K6h5LmL5YmN6KaB5YWI5p+l55yL5b2T5YmN5bel56iL55uu5b2V5LiL55qEZG9jL3VpRGVzaWduL3VpRGVzaWduU3RhdGUubWTmlofku7bvvIjlpoLmnpzlrZjlnKjvvInvvIzkuobop6PkuYvliY3nmoTorr7orqHov5vluqblkoznirblhrXvvIzku6Xkvr/mm7Tlpb3lnLDnkIbop6PkuIrkuIvmloflkoznu6fnu63orr7orqHlt6XkvZzjgIJcbi0g5aaC5p6c5Y+R546wZG9jL3VpRGVzaWduU3RhdGUubWTmlofku7bkuI3lrZjlnKjvvIzliJnor7TmmI7kuYvliY3msqHmnInorr7orqHov4fvvIzpnIDopoHku47pm7blvIDlp4vorr7orqHjgIJcbi0g5aaC5p6c5Y+R546wZG9jL3VpRGVzaWduU3RhdGUubWTmlofku7blrZjlnKjvvIzliJnor7TmmI7kuYvliY3lt7Lnu4/orr7orqHov4fvvIzpnIDopoHnnIvkuIsg5piv5ZCm5ZCM5LiA5LiqQVBQ5oiW6ICF572R56uZ77yM5aaC5p6c5piv5ZCM5LiA5Liq6YKj5bCx5LiN6ZyA6KaB6YeN5paw5YiG5p6QcGFnZUxpc3TvvIzogIzkuJTmoLnmja7kuYvliY3nmoTorr7orqHov5vluqblkoznirblhrXvvIznu6fnu63orr7orqHlt6XkvZzvvIzlpoLmnpzkuI3mmK/lkIzkuIDkuKpBUFDmiJbogIXnvZHnq5nvvIzliJnpnIDopoHliKDpmaRkb2MvdWlEZXNpZ25TdGF0ZS5tZOaWh+S7tu+8jOeEtuWQjuS7jumbtuW8gOWni+iuvuiuoeOAglxuXG4jIyDkuIDjgIHmqKHlnZfmi4bop6PkuI7liJ3mraXliJflh7rpobXpnaLliJfooahcbi0g5ouG6Kej5qC45b+D5Lia5Yqh5qih5Z2XLCDovpPlh7rmiYDmnInlip/og73mqKHlnZfvvIzkuI3orrrmmK/lkKbmoLjlv4PvvIzkuI3orrrlpKflsI/vvIzpg73opoHliJflh7rmnaXjgIJcbi0g6YGN5Y6G5LiK5LiA5q2l5YiG5p6Q5YiX5Ye65p2l55qE5omA5pyJ5Lia5Yqh5qih5Z2X77yM5a+55q+P5LiA5Liq5Lia5Yqh5qih5Z2X6L+b6KGM57uG5YiG77yM5YiX5Ye66K+l5Lia5Yqh5qih5Z2X55qE5omA5pyJ6aG16Z2i77yM5omA5pyJ6aG16Z2i5LiN6K665piv5ZCm5qC45b+D44CB5LiN6K665aSn5bCP44CB5LiN6K665piv5ZCm5a2Q6aG56aG16Z2i5YWo6YOo5YiX5Ye65p2l44CCXG5cbiMjIOS6jOOAgeavj+S4qumhtemdoueahFwi5YWD57Sg4oaS5Y+v54K54oaS6Lez6L2sXCLliIbmnpDopoHngrlcblxuPiAqKuaguOW/g+aAnei3r++8mioqICBcbj4g6YGN5Y6G5LiK5LiA5q2l5YiG5p6Q5Ye65p2l55qE5q+P5Liq6aG16Z2i77yM5YOP5omr6Zu35LiA5qC3XCLngrnkuq5cIuWug+S4iumdouaJgOacieWPr+S6pOS6kuWFg+e0oO+8jOayv+edgFwi5YWD57Sg5Y+v54K54oaS6Lez6L2s6aG16Z2i55uu5qCHXCLkuIDot6/lu7bkvLjvvIzpgJDlsYLlj5HnjrDlubbooaXlhYXmm7TlpJrpobXpnaLmiJblvLnnqpfjgIJcblxuMS4gKiror4bliKvpobXpnaLlhYPntKAqKiAgXG4gICAtICoq6aG16Z2i5qGG5p62KirvvJrmtY/op4jpobXpnaLmlbTkvZPluIPlsYDvvIjlpoLpobbpg6jlr7zoiKrjgIFUYWLjgIHliJfooajjgIHooajljZXjgIHlupXpg6jmjInpkq7nrYnvvInjgIIgIFxuICAgLSAqKuWIl+WHuuaJgOacieaOp+S7tioq77yaICBcbiAgICAgLSDovpPlhaXmoYbjgIHmjInpkq7jgIHlm77niYfjgIHliJfooajpobnjgIHpk77mjqXmloflrZfjgIFUYWIg6aG544CB5LiL5ouJ566t5aS044CB5oKs5rWu5oyJ6ZKu44CB5Zu+5qCH44CB5aSN6YCJL+WNlemAieaMiemSruetieOAglxuXG4yLiAqKuagh+iusOWPr+eCueWHu+WFg+e0oCoqICBcbiAgIC0g5Zyo5LiK6L+w5o6n5Lu25Lit77yM5Yik5pat5ZOq5Lqb5pivXCLlj6/ngrnlh7tcIu+8miAgXG4gICAgIC0gKirmmL7mgKfmjInpkq4qKu+8iOaPkOS6pC/noa7orqQv5Y+W5raIL+S4i+S4gOatpe+8iSAgXG4gICAgIC0gKirlj6/lsZXlvIDmoIfpopgv5Y2h54mHKirvvIjngrnlh7vlsZXlvIDmm7TlpJrvvIkgIFxuICAgICAtICoq5bim6ZO+5o6l55qE5paH5a2XKirvvIjljY/orq7jgIHpmpDnp4HjgIHms6jlhozjgIHlv5jorrDlr4bnoIHnrYnvvIkgIFxuICAgICAtICoq5YiX6KGo6aG5L+e9keagvOWNoeeJhyoqICBcbiAgICAgLSAqKuWbvuWDj+e8qeeVpeWbvuOAgei9ruaSreWbvuafkOS6m+WPr+eCueWHu+WMuuWfnyoqICBcbiAgICAgLSAqKuWvvOiIqui/lOWbni/lhbPpl60v6I+c5Y2V5Zu+5qCHKiogIFxuXG4zLiAqKumAkOS4gOWIl+WHulwi54K55Ye74oaS6Lez6L2s6aG16Z2i55uu5qCHXCIqKiAgXG4gICAtIOWvueavj+S4quWPr+eCueWHu+WFg+e0oO+8jOaYjuehrueCueWHu+WQjui3s+WIsOWTquS4gOS4quebruagh+mhtemdou+8jOmCo+S5iOivpeebruagh+mhtemdouS5n+imgeWIl+WHuuWIsOmhtemdouWIl+ihqOS4rVxuXG4gICAtICoq56S65L6LKirvvIjku6VcIuWVhuWTgeivpuaDhemhtVwi5Li65L6L77yJ77yaICBcbiAgICAg6aG16Z2i77ya6K6+572u6aG1ICBcbiAgICAg5YWD57Sg77yaICBcbiAgICAgICAxLiDlhbPkuo4g4oaQIOeCueWHuyDihpIg6Lez5Yiw5YWz5LqO6aG1IFxuICAgICAgIDIuIOWuouacjeaMiemSriDihpAg54K55Ye7IOKGkiDot7PliLDlrqLmnI3lr7nor53pobVcbiAgICAgICAuLi4gXG5cbiMjIOS4ieOAgemXreeOr+ajgOmqjOatpemqpFxuXG4xLiAqKuagoemqjOS4muWKoemXreeOryoqXG4gICAtIOavlOWmguS4gOS4quS6i+eJqeacieWJjeWunuaWveWQjueahOmXreeOr+mhtemdou+8jOavlOWmguaQnOe0oumhte+8jOmCo+S5iOaQnOe0ouS5i+WQjuiCr+WumuacieS4gOS4quaQnOe0oue7k+aenOmhtei/m+ihjOmXreeOr+OAglxuXG4yLiAqKui+k+WHuuacgOe7iOa4heWNlSoqICBcbiAgIC0g6L6T5Ye66aG16Z2i5oC75pWw77yM5Lul5Y+K5oyJ54Wn5qih5Z2X5bGC57qn77yM5bCG5omA5pyJXCLpobXpnaLlkI3np7BcIuS7peWIhuWxguWIl+ihqOW9ouW8j+WxleekuuOAgiAgXG4gICAtIOehruS/neavj+S4qumhtemdoumDveW3slwi54K55LquXCLmiYDmnInkuqTkupLlhYPntKDngrnlh7vot7PovaznmoTnm67moIfpobXpnaLpg73lnKjmuIXljZXkuK3lh7rnjrDjgIJgO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZml4UGFnZUxpc3RQcm9tcHRUZW1wbGF0ZSA9IGDkvaDmmK9BUFDkuqflk4Hnu4/nkIbkuJPlrrbvvIxvcHRpbWl6ZV9wYWdlTGlzdF9wcm9tcHTlvpflh7rnmoTpobXpnaLliJfooajnu5PmnpzlubbkuI3pvZDlhajvvIzkvaDlv4Xpobvlho3mrKHov5vooYzliIbmnpDvvIzliIbmnpDlh7rmm7TlpJrmiYDpnIDpobXpnaLvvIzlsIblt7Lnu4/lvpflh7rnmoTpobXpnaLliJfooajlpI3nm5jmo4Dmn6XkuIDmrKHmmK/lkKbmnInnvLrmvI/vvIzlv4XpobvmmK/kuIDkuKrpobXpnaLlrozmlbTpvZDlhajnmoRBUFDvvIzkuL7kuKrkvovlrZDvvJrorr7nva7pobXph4zpnaLmnInlvojlpJrkuKrlrZDorr7nva7pobnvvIzpgqPkuYjlrZDorr7nva7pobnmnInpnIDopoHmlrDlvIDpobXpnaLnmoTkuZ/lv4XpobvliJflh7rmnaXkuIDkuKrljZXni6znmoTpobXpnaLjgILlhbbku5bpobXpnaLkuZ/mmK/lpoLmraTvvIzkuZ/opoHov5vooYzliIbmnpDmmK/lkKbmnInkuI3pvZDlhajnmoTpobXpnaLot6/lvoTmvI/mjonkuobjgIJgO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvZHVjdERlc2lnblByb21wdFRlbXBsYXRlID0gYCMg5L2g5piv5Lqn5ZOB57uP55CG5LiT5a6277yM6ZyA6KaB5YiG5p6Q55So5oi36ZyA5rGC5o+P6L+w77yM54S25ZCO5qC55o2uJ+mAmueUqOmcgOaxguaWh+aho+aooeadvyfvvIzovpPlh7rkuIDku73moIflh4bnmoQqKuS6p+WTgemcgOaxguaWh+ahoyoq77yM54S25ZCO5bCG55Sf5oiQ55qE6ZyA5rGC5paH5qGj5YaZ5YWl5Yiw5b2T5YmN5bel56iL55uu5b2V5LiL6Z2i55qEZG9j5paH5Lu25aS55LiL6Z2i55qEWFhYLeS6p+WTgemcgOaxguaWh+ahoy5tZO+8jOWFtuS4rVhYWOaYr+agueaNrueUqOaIt+mcgOaxguaPj+i/sOadpeWRveWQjeOAglxuXG4qKumHjeimgeivtOaYjioq77yaXG4tIOi/meaYryoq57qv5Lqn5ZOB6ZyA5rGC5paH5qGjKirvvIzkuJPms6jkuo7kuqflk4Hlip/og73jgIHkuJrliqHpgLvovpHjgIHnlKjmiLfkvZPpqozpnIDmsYJcbi0gKirkuKXnpoHljIXlkKvku7vkvZXmioDmnK/lrp7njrDlhoXlrrkqKu+8muS4jeW+l+a2ieWPilVJ6K6+6K6h6KeE6IyD44CB5Lqk5LqS6KeE6IyD44CB5byA5Y+R6KeE6IyD44CB5oqA5pyv5p625p6E562JXG4tICoq5Lil56aB5YyF5ZCr5oqA5pyv6YCJ5Z6L5YaF5a65KirvvJrkuI3lvpfmj5Dlj4rliY3nq6/moYbmnrbjgIHlkI7nq6/mioDmnK/jgIHmlbDmja7lupPorr7orqHnrYlcbi0gKirkuKXnpoHnlJ/miJDmioDmnK/op4TojIPnq6DoioIqKu+8muaWh+aho+e7k+aehOS4peagvOaMieeFp+S4i+mdoueahOaooeadv+aJp+ihjO+8jOS4jeW+l+iHquihjOa3u+WKoOaKgOacr+ebuOWFs+eroOiKglxuXG4jIyDpgJrnlKjpnIDmsYLmlofmoaPmqKHmnb9cblxuLS0tXG5cbjEuIOmhueebruiDjOaZr+S4juWumuS9jVxuICAgKiDor7TmmI4gQVBQIOmdouWQkeeahOebruagh+eUqOaIt+WSjOaguOW/g+S7t+WAvOOAgeS4muWKoeWcuuaZr+OAglxuXG4yLiDpobXpnaLliJfooajvvIjmjInlsZXnpLrpobrluo/vvIlcbuS4jemcgOimgeiHquW3seWIhuaekOWKn+iDveaooeWdl+WSjOmhtemdouWIl+ihqO+8jOS9oOebtOaOpeagueaNruesrOS6jOatpeWIl+WHuuaJgOmcgOmhtemdouWIl+ihqFxcYG9wdGltaXplX2ZpeF9wYWdlTGlzdF9wcm9tcHRcXGDlvpflh7rnmoTmiYDmnInmqKHlnZflkozpobXpnaLliJfooajvvIzlhYjliJflh7rmiYDmnInpobXpnaLlkI3np7DjgIHmiYDlsZ7mqKHlnZfjgIHnroDopoHor7TmmI7kuI7ot7PovazlhaXlj6PvvIzmjInku6XkuIvnpLrkvovmoLzlvI/lhpnlh7rmnaXjgIJcbuOAguekuuS+i+agvOW8j++8mlxuXG5cXGBcXGBcXGBcbnwg5bqP5Y+3IHwg6aG16Z2i5ZCN56ewICAgICB8IOaooeWdlyAgIHwg566A6KaB6K+05piOICAgICAgICAgICAgICAgICAgICAgICB8IOi3s+i9rOWFpeWPoyAgICAgICAgICAgICAgfFxufCAtLS0tIHwgLS0tLS0tLS0tLS0tIHwgLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbnwgMSAgICB8IOmXquWxj+mhtSAgICAgICB8IOWFrOWFsSAgIHwg5ZCv5Yqo5pe25bGV56S6IExvZ28v5Yqo55S777yM5oyB57ut6Iul5bmy56eSIHwgQVBQIOWQr+WKqCAgICAgICAgICAgICAgIHxcbnwgMiAgICB8IOaWsOaJi+W8leWvvOmhtSAgIHwg5YWs5YWxICAgfCDpppbmrKHlronoo4XlvJXlr7znlKjmiLfkuobop6PmoLjlv4Plip/og70gICAgIHwg6Zeq5bGP6aG177yI6aaW5qyh5omT5byA77yJICAgICB8XG58IDMgICAgfCDnmbvlvZXpobUgIHwg55So5oi3ICAgfCDnlKjmiLfovpPlhaXotKblj7fkv6Hmga/lrozmiJDorqTor4EgICAgICAgICB8IOmmluasoeWQr+WKqOWIpOaWrS/mi6bmiKrot7PovawgICB8XG58IDQgICAgfCDpppbpobUgICAgICAgICB8IOmmlumhtSAgIHwg5bGV56S6IEJhbm5lcuOAgeW/q+aNt+WFpeWPo+OAgeaOqOiNkOWIl+ihqCAgIHwg55m75b2VL+aWsOaJi+W8leWvvOWQjuaIlua4uOWuouaooeW8jyB8XG58IOKApiAgICB8IOKApiAgICAgICAgICAgIHwg4oCmICAgICAgfCDigKYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IOKApiAgICAgICAgICAgICAgICAgICAgIHxcblxcYFxcYFxcYFxuXG4+ICoq5rOo5oSPKirvvJrot7PovazlhaXlj6PpnIDliJflh7rmiYDmnInlj6/og73op6blj5Hor6XpobXpnaLnmoTmnaXmupDjgIJcblxuLS0tXG5cbiMjIyDpnIDmsYLmlofmoaPlhpnlhaVcbi0g55Sf5oiQ55qE6ZyA5rGC5paH5qGj5YaZ5YWl5Yiw5b2T5YmN5bel56iL55uu5b2V5LiL6Z2i55qEZG9j5paH5Lu25aS55LiL6Z2i55qEWFhYLeS6p+WTgemcgOaxguaWh+ahoy5tZO+8jOWFtuS4rVhYWOaYr+agueaNrueUqOaIt+mcgOaxguaPj+i/sOadpeWRveWQjeOAglxuXG4jIyMg5a6M5oiQ56Gu6K6kXG4tIOW9k+S6p+WTgemcgOaxguaWh+aho+WGmeWFpeWujOaIkOWQju+8jOW/hemhu+WRiuefpeeUqOaIt++8mlwi4pyFICoq5Lqn5ZOB6ZyA5rGC5paH5qGj5bey5a6M5oiQ77yBKiror7fmgqjlhYjmn6XnnIsgZG9jL1hYWC3kuqflk4HpnIDmsYLmlofmoaMubWQg5paH5Lu277yM5LuU57uG6ZiF6K+76ZyA5rGC5paH5qGj5YaF5a6577yM56Gu6K6k5piv5ZCm5pyJ6ZyA6KaB5L+u5pS555qE5Zyw5pa544CC5aaC5p6c5pyJ5L+u5pS55oSP6KeB77yM6K+35ZGK6K+J5oiR5YW35L2T55qE5L+u5pS56KaB5rGC44CC56Gu6K6k6ZyA5rGC5paH5qGj5peg6Zeu6aKY5oiW5L+u5pS55a6M5q+V5ZCO77yM6K+35ZGK6K+J5oiR5Y+v5Lul6L+b6KGM5LiL5LiA5q2l55qEVUnorr7orqHlt6XkvZzjgIJcImA7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb2RlUHJvbXB0VGVtcGxhdGUgPSBgIyDkvaDmmK90eXBlc2NyaXB05Luj56CB5LiT5a6277yM5qC55o2uJ+inhOWImSfjgIEn5L6L5a2QJ+WSjOeUqOaIt+i+k+WFpeeahOmcgOaxguaPj+i/sO+8jOWujOaIkOS7o+eggeW8gOWPkVxuXG4jIyDph43opoHor7TmmI5cbi0g5Zyo5byA5aeL5Luj56CB5byA5Y+R5LmL5YmN77yM5b+F6aG75YWI5p+l55yL5b2T5YmN5bel56iL55uu5b2V5LiL55qEZG9j5paH5Lu25aS55Lit55qE5Lqn5ZOB6ZyA5rGC5paH5qGj77yI5aaCWFhYLeS6p+WTgemcgOaxguaWh+ahoy5tZO+8ie+8jOS4peagvOaMieeFp+mcgOaxguaWh+aho+S4reeahOmhtemdouWumuS5ieOAgeS6pOS6kumAu+i+keOAgeS4muWKoemAu+i+kei/m+ihjOS7o+eggeW8gOWPkeOAglxuLSDlpoLmnpzlj5HnjrDpnIDmsYLmlofmoaPkuI3lrZjlnKjvvIzliJnmjInnhafnlKjmiLfpnIDmsYLmj4/ov7Dov5vooYzlvIDlj5HjgILlpoLmnpzpnIDmsYLmlofmoaPlrZjlnKjvvIzliJnkuKXmoLzmjInnhafpnIDmsYLmlofmoaPnmoTop4TojIPov5vooYzlvIDlj5HvvIzkuI3lvpflgY/nprvpnIDmsYLmlofmoaPnmoTlrprkuYnjgIJcblxuIyMg6aG555uu5qGG5p625o+P6L+wXG4tIOaVtOS4qumhueebruahhuaetuWIhuS4uueoi+W6j+WFpeWPo0FwcGxpY2F0aW9uLnRz44CB56iL5bqP5YWo5bGA6Z2Z5oCB5Y+Y6YePU3RhdGljRGF0YS50c+OAgeaJgOaciemhtemdonBhZ2Xmlofku7blpLnjgIFVSee7hOS7tuW6k3VpbGli5paH5Lu25aS544CB5ZCO56uv5o6l5Y+jQWxsQmFja0VuZEFwaS50c+OAgeWUr+S4gOeahOiDveWKm+aWueazlUFsbEZ1bmN0aW9uLnRz44CCXG4tIOi/meaYr+S4gOS4quaWsOWei+W8gOWPkeahhuaetu+8jFVJ55WM6Z2i5bey57uP5L2/55So5Y+v6KeG5YyW5bel5YW355Sf5oiQ5LqG5omA5pyJ55qE6Z2Z5oCB55qEVUnpobXpnaLkuobvvIznhLblkI7kvaDpnIDopoHkvb/nlKh0c+S7o+eggeW8gOWPkeS4muWKoemAu+i+keS4jlVJ5Lqk5LqS6YC76L6R77yM5Zug5q2k57yW5YaZdHPku6PnoIHlj6rpnIDopoHmjInnhafnlKjmiLfpnIDmsYLmj4/ov7DlrozmiJDkuJrliqHpgLvovpHkuI5VSeS6pOS6kueahOW8gOWPkeOAglxuXG4jIyDop4TliJnvvJpcbjHjgIFVSeeVjOmdouW3sue7j+W8gOWPkeWujOavle+8jOS4jemcgOimgeWinuWIoOaUueS7u+S9lemdmeaAgVVJ55WM6Z2i44CCXG4y44CB5L2g5Y+q6ZyA6KaB5oyJ54Wn55So5oi36ZyA5rGC5o+P6L+w5L2/55SodHPku6PnoIHlrozmiJDkuJrliqHpgLvovpHkuI5VSeS6pOS6kueahOW8gOWPkVxuM+OAgeavj+S4gOasoeW8gOWni+e8luWGmeS7o+eggeaXtu+8jOW/hemhu+WFiOmYheivu+W9k+WJjeW3peeoi+ebruW9leS4i+eahGRvYy9jb2RlU3RhdGUubWTmlofku7bvvIjlpoLmnpzlrZjlnKjvvInvvIzkuobop6PlvZPliY3nmoTku6PnoIHlvIDlj5Hov5vluqblkoznirblhrXvvIzku6Xkvr/mm7Tlpb3lnLDnkIbop6PkuIrkuIvmloflkoznu6fnu63lvIDlj5Hlt6XkvZzjgIJcbjTjgIHmr4/kuIDmrKHlrozmiJDkuIDkuKrlip/og73mqKHlnZfmiJbpobXpnaLnmoTku6PnoIHnvJblhpnlkI7vvIzlsIblvZPliY3ov5vluqblkozlvZPliY3nirblhrXnlKgyMDDlrZfmgLvnu5PlubblhpnlhaVkb2MvY29kZVN0YXRlLm1k5paH5Lu25Lit44CC5oC757uT5YaF5a655bqU5YyF5ous77ya5bey5a6M5oiQ55qE5Yqf6IO95qih5Z2X5ZKM6aG16Z2i44CB5b2T5YmN5q2j5Zyo6L+b6KGM55qE5byA5Y+R5bel5L2c44CB6YGH5Yiw55qE5oqA5pyv6Zeu6aKY5oiW5rOo5oSP5LqL6aG544CB5LiL5LiA5q2l55qE5byA5Y+R6K6h5YiS562J44CC6L+Z5qC35Y+v5Lul6K6pQUnlpKfmqKHlnovlnKjlkI7nu63lt6XkvZzkuK3mm7TliqDkuobop6PlvZPliY3nirbmgIHkuIrkuIvmlofvvIzku47ogIzmiafooYzlvpfmm7TliqDlh4bnoa7jgIJcbjXjgIHor7fkuKXmoLzmjInnhafllK/kuIDnmoTog73lipvmlrnms5VBbGxGdW5jdGlvbi50c++8jOS4jeimgeaWsOWinuOAgeWIoOmZpOaIluS/ruaUueS7u+S9lUFsbEZ1bmN0aW9u5o6l5Y+j5aOw5piO77yb5Lmf5LiN6KaB6LCD55So5YW25LuW5pyq5ZyoQWxsRnVuY3Rpb27kuK3lh7rnjrDnmoTlh73mlbDmiJbmqKHlnZdcbjbjgIHmiYDmnInlkI7nq69BUEnosIPnlKjlv4Xpobvkvb/nlKhBbGxCYWNrRW5kQXBp57G75Lit5a6a5LmJ55qE5pa55rOV77yM5LiN5YWB6K645L2/55So5pyq5ZyoQWxsQmFja0VuZEFwaeS4reWumuS5ieeahOWQjuerr0FQSeOAglxuN+OAgVVJ55WM6Z2i44CBVUnpu5jorqTmlbDmja7jgIFVSeagt+W8j+W3sue7j+WFqOmDqOeUn+aIkOWlveeahOS6hu+8jOS9oOS4jeiDveWcqGluaXRWaWV35pa55rOV6YeM6Z2i5pOF6Ieq5re75Yqg5LiA5Lqbdmlld+eahFVJ5qC35byP5oiW5bGe5oCn562J5Yid5aeL5YyW77yM6Zmk6Z2e55So5oi36ZyA5rGC5o+P6L+w5piO56Gu5oyH5Ye66ZyA6KaB5pu05pS55ZOq5Lqb5qC35byP5oiW5bGe5oCn44CCXG4444CB5a2X56ym5Liy6KaB5Lul5Y2V5byV5Y+35p2l5YaZ77yM5aaC77yaJ+aIkeeahCfjgIJcbjnjgIHku7vkvZXmlrnms5Xlh73mlbDlrprkuYnvvIzkuI3lvpfkvb/nlKhhc3luY+WSjFByb21pc2XvvIzmiYDmnInlvILmraXmk43kvZzlv4Xpobvkvb/nlKjnrq3lpLTlh73mlbDjgIJcbjEw44CB5omA5pyJUGFnZeeahOWtkOexu++8jOmDveWFgeiuuOa3u+WKoOaehOmAoOWHveaVsOWSjOaehOmAoOWHveaVsOeahOWPguaVsO+8jOi/meS6m+WPguaVsOWwseeUqOadpemhtemdoui3s+i9rOaXtumhtemdouS5i+mXtOS8oOmAkuaVsOaNruS9v+eUqO+8jOavlOWmgu+8muWVhuWTgeWIl+ihqOmhtVByb2plY3RMaXN0UGFnZei3s+WIsOWVhuWTgeivpuaDhemhtVByb2plY3REZXRhaWxQYWdl77yM6YKj5LmIUHJvamVjdExpc3RQYWdl5bqU6K+l6KaB5Lyg57uZUHJvamVjdERldGFpbFBhZ2XkuIDkuKrlj4LmlbDvvJpwcm9kdWN0SUTjgILmiYDku6XvvIxQcm9qZWN0RGV0YWlsUGFnZeeahOmhtemdouWPguaVsOWjsOaYjuWSjOaehOmAoOWHveaVsOW6lOivpeaYr+i/meagt+WGme+8mnByaXZhdGUgcHJvZHVjdElEOiBzdHJpbmdcblxuXHRjb25zdHJ1Y3Rvcihwcm9kdWN0SUQ6IHN0cmluZykge1xuXHRcdHN1cGVyKClcblx0XHR0aGlzLnByb2R1Y3RJRCA9IHByb2R1Y3RJRFxuXHR944CCXG4xMeOAgVZpZXfnm7jlhbPlj5jph4/lv4XpobvlnKh4eHhQYWdl57G75byA5aeL5pe25aOw5piO77yM5b+F6aG75aOw5piO5YW35L2T55qEVmlld+exu+Wei+Wmgu+8mklucHV0Vmlld++8jOiAjOS4jeaYr+ebtOaOpeWjsOaYjuexu+Wei+S4ukJhc2VWaWV377yM5omA5pyJVmlld+W/hemhu2ZpbmRWaWV3QnlJROWIneWni+WMlu+8jOWmgu+8mnNhdmVCdXR0b246IEJ1dHRvblZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJRCgnc2F2ZUJ1dHRvbicpIGFzIEJ1dHRvblZpZXfjgILov5nph4znmoRmaW5kVmlld0J5SUTlhbbkuK1pZOWPguaVsOaYr+WcqOivpemhtemdoueahGh0bWzmlofku7bph4zpnaLojrflj5bliLDnmoRpZOWAvOOAglxuMTLjgIHlk43lupTlvI/lvJXnlKhyZWbnmoTkvb/nlKjvvJrnsbvlnot2dWUz55qEcmVm77yM5Y+v5Lul5bCG5LiA5Liq5YC85Y+Y5oiQ5ZON5bqU5byP55qE77yM5LuO6ICM5Zyo6K+l5YC85Y+R55Sf5Y+Y5YyW5pe277yM6Ieq5Yqo6Kem5Y+R55u45YWz55WM6Z2i55qE5pu05paw44CCXG4xM+OAgWNvbXB1dGVk55qE5L2/55So77ya57G75Z6LdnVlM+eahGNvbXB1dGVk77yM5b2T5L2g6ZyA6KaB5qC55o2u5LiA5Liq5oiW5aSa5Liq5ZON5bqU5byP5rqQKHJlZinorqHnrpflh7rkuIDkuKrmlrDnmoTlgLzml7bvvIzlsLHnlKggY29tcHV0ZWRcbjE044CB5aaC5p6c5piv5aSa5Liq6aG16Z2i5YWx55So55qE5pWw5o2u5Y+Y6YeP77yM5Y+v5Lul6ICD6JmR5aOw5piO5Li65YWo5bGA6Z2Z5oCB5Y+Y6YeP44CCXG4xNeOAgeWFqOWxgOmdmeaAgeWPmOmHj+WcqOWFs+mXrUFQUOaIluiAhee9kemhteWQjuS8mua4heeQhuaOieeahO+8jOaJgOS7peS9oOimgeaAneiAg+a4healmuWTquS6m+aVsOaNruWPmOmHj+mcgOimgeaMgeS5heWMluWCqOWtmO+8jOWTquS6m+aYr+WFqOWxgOmdmeaAgeWPmOmHj++8jOaMgeS5heWMluaOpeWPo++8mnNhdmVEYXRhYmFzZVh4eOWSjGdldERhdGFiYXNlRGF0YVh4eO+8jOavlOWmguaYr+WQpuW3sue7j+W8ueWHuui/h+W5v+WRiuW8ueahhu+8jOi/meS4quW6lOivpeaMgeS5heWMluWCqOWtmOOAglxuMTbjgIHmiYDmnInnmoTnvZHnu5zmi6bmiKrnmoTlhajlsYDnu5/kuIDlpITnkIbpnIDopoHlnKhBcHBsaWNhdGlvbuS4reeahG9uR2xvYmFsTmV0U3VjY2Vzc0ludGVyY2VwdCjogZTnvZHmiJDlip/lkI7vvIzlkI7nq6/kuJrliqHmraPnoa7kuI7plJnor6/pg73kvJrlm57osIPliLDov5nph4zvvIzmiYDku6XlnKjov5nph4zlj6/nu5/kuIDlpITnkIbkuJrliqHplJnor6/noIEp5oiWb25HbG9iYWxOZXRGYWlsSW50ZXJjZXB0KOe9kee7nOS4jemAmu+8jOi/nuaOpeWksei0peaDheWGteS8muWbnuiwg+WIsOi/memHjCnph4zpnaLlpITnkIbjgIJcbjE344CB6aG16Z2i6Lez6L2s5L2/55SoQWxsRnVuY3Rpb24ubmF2aWdhdGVUb+WunueOsO+8jG5hdmlnYXRlVG/kvKDlhaVQYWdl55qE5a2Q57G75a+56LGh77yM5aaC77yaQWxsRnVuY3Rpb24ubmF2aWdhdGVUbyhuZXcgUHJvZHVjdFBhZ2UodGhpcy5wcm9kdWN0SUQpKeOAglxuMTjjgIHpobXpnaLlhoXnmoTnvZHnu5zor7fmsYLkuJrliqHlpITnkIbkuI3lvpflhpnlnKhBcHBsaWNhdGlvbueahG9uR2xvYmFsTmV0U3VjY2Vzc0ludGVyY2VwdOmHjOmdouOAglxuMTnjgIHlrZfnrKbkuLLkuI3lvpfnm7TmjqXov5vooYxib29sZWFu6L+Q566X54S25ZCO6LWL5YC857uZYm9vbGVhbuexu+Wei+eahOWPmOmHj++8jOmcgOimgeWcqOWtl+espuS4suWJjemdoua3u+WKoOS4pOS4qumdnui/kOeul++8miEh44CC5q+U5aaC5q2j56Gu55qE5YaZ5rOV77yaY29uc3QgaXNBZGQgPSAhIXRoaXMuaW5wdXRWaWV3LnRleHQgJiYgaXNOZXdcbjIw44CB5aaC55So5oi35o+P6L+w5rKh5pyJ5piO56Gu6K+05piO6ZyA6KaBdG9hc3Tmj5DnpLrvvIzkvaDkuI3lvpfmk4Xoh6rov5vooYxUb2FzdOOAglxuMjHjgIHlu7bml7bmiafooYxBbGxGdW5jdGlvbi5zZXRUaW1lb3V057O757uf5Lya6Ieq5Yqo5riF55CGdGltZW91dO+8jOS7o+eggeS4iue7neWvueS4jeiDvei/m+ihjGNsZWFUaW1lb3V0562J57G75Ly85pON5L2c77yM5Zug5q2kc2V0VGltZW91dOS5n+S4jemcgOimgeWjsOaYjuWPmOmHj+WOu+aOpeaUtnNldFRpbWVvdXTov5Tlm57nmoTlvJXnlKjjgIJcbjIy44CB5omA5pyJ5Luj56CB5LiN5b6X5L2/55SoaW50ZXJmYWNl77yM5pWw5o2u5a6e5L2TZW50aXR577yM5b+F6aG75L2/55SoY2xhc3PlrprkuYnvvIzkuI3lvpfkvb/nlKhpbnRlcmZhY2XvvIzkvb/nlKjkuYvliY3pnIDopoFuZXflrp7kvovljJZcbjIz44CB5q+P5LiA5Liq6aG16Z2iKOWmgmxvZ2luUGFnZSnlu7rorq7lnKhwYWdl5paH5Lu25aS55LiL6Z2i5Yib5bu65LiA5Liq6aG16Z2i5paH5Lu25aS5KOWmgmxvZ2luKe+8jOeEtuWQjumhtemdoueahHRz5paH5Lu2KOWmgmxvZ2luUGFnZS50cynliJvlu7rlnKjpobXpnaLmlofku7blpLnkuIvpnaLvvIzpobXpnaLmlofku7blpLnkuIvov5jpnIDliJvlu7rkuIDkuKrpobXpnaLmlbDmja50c+aWh+S7tijlpoJsb2dpblBhZ2VEYXRhLnRzKe+8jOi/meagt+WmgmxvZ2luUGFnZei0n+i0o+S4muWKoemAu+i+keWSjOS6pOS6kumAu+i+ke+8jOWmgmxvZ2luUGFnZURhdGHotJ/otKPmlbDmja7lo7DmmI7lrprkuYnjgIHliJ3lp4vljJbkuI7nrqHnkIbnrYnjgIJcbjI044CB6aG16Z2i5paH5Lu25aS55LiL6Z2i55qE6aG16Z2iaHRtbCjlpoJsb2dpblBhZ2VWaWV3Lmh0bWwp77yM6L+Z5piv5Y+v6KeG5YyW5bey57uP55Sf5oiQ55qEVUnnlYzpnaLnmoToioLngrnmmKDlsITvvIzor6Xmlofku7blj6rmmK/nlKjkuo7kvaDmm7TliqDnkIbop6Por6XpobXpnaLnmoRVSee7k+aehOWSjOe7hOS7tuWRveWQjeiAjOiuvueri+eahO+8jOivpeaWh+S7tuS4jeWPguS4jue8luivke+8jOS7heS7heaYr+S/oeaBr+aWh+aho+aPkOekuuS9nOeUqO+8jOWboOatpOS4jeWPr+S7peS/ruaUuei/meS4qmh0bWzmlofku7bjgIJcbjI144CB5Y+q57uZ6K+l6aG16Z2i5L2/55So55qEZW50aXR56ZyA6KaB5bu656uL5Zyo6K+l6aG16Z2i5paH5Lu25aS55LiL6Z2i55qEZW50aXR55paH5Lu25aS55LiL6Z2i44CCXG4yNuOAgWxpYuaWh+S7tuWkueaYr+aJgOaciVVJ57uE5Lu25ZKM6IO95Yqb5pa55rOV55qE5a6a5LmJ5aOw5piO77yM5bqV5bGC5qGG5p625bey5rOo5YWl5a6e546w5YW35L2T6YC76L6R77yM5Zug5q2k5L2g5LiN6ZyA6KaB5Lmf5LiN5YWB6K645aKe5Yig5pS5bGli5paH5Lu25aS56YeM6Z2i55qE5Luj56CB44CCXG4yN+OAgeW9k+aJgOacieeUqOaIt+mcgOaxgueahOWKn+iDvemDveW3suWujOaIkOW8gOWPkeWQju+8jOmcgOimgeWIoOmZpGRvYy9jb2RlU3RhdGUubWTlkoxkb2MvdWlEZXNpZ25TdGF0ZS5tZOi/meS4pOS4queKtuaAgeaWh+S7tu+8jOS7peWFjeW9seWTjeeUqOaIt+S4i+S4gOasoeaWsOeahOmcgOaxguWunueOsOOAglxuXG4jIyDkvovlrZDvvJpcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhvbWVQYWdlIGV4dGVuZHMgUGFnZSB7XG4gICAgLy8g5pWw5o2u5a+56LGh5a6e5L6L5aOw5piOXG4gICAgcHJpdmF0ZSBob21lUGFnZURhdGE6IEhvbWVQYWdlRGF0YSA9IG5ldyBIb21lUGFnZURhdGEoKVxuICAgIC8vIOinhuWbvuWvueixoeWunuS+i+WjsOaYjlxuICAgIHByaXZhdGUgc2F2ZUJ1dHRvbjogQnV0dG9uVmlldyA9IHRoaXMuZmluZFZpZXdCeUlEKCdzYXZlQnV0dG9uJykgYXMgQnV0dG9uVmlld1xuICAgIHByaXZhdGUgdGl0bGVUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJRCgndGl0bGVUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgcHJpdmF0ZSBzYXZlQ291bnRUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJRCgnc2F2ZUNvdW50VGV4dFZpZXcnKSBhcyBUZXh0Vmlld1xuICAgIHByaXZhdGUgYWxsU2F2ZUNvdW50VGV4dFZpZXc6IFRleHRWaWV3ID0gdGhpcy5maW5kVmlld0J5SUQoJ2FsbFNhdmVDb3VudFRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICBwcml2YXRlIHNhdmVUaXBzVGV4dFZpZXc6IFRleHRWaWV3ID0gdGhpcy5maW5kVmlld0J5SUQoJ3NhdmVUaXBzVGV4dFZpZXcnKSBhcyBUZXh0Vmlld1xuICAgIC8vIHJlZuaVsOaNruWvueixoeW8leeUqOWjsOaYjlxuICAgIHByaXZhdGUgc2F2ZUNvdW50UmVmID0gcmVmPG51bWJlcj4odGhpcy5ob21lUGFnZURhdGEuc2F2ZUNvdW50KVxuICAgIHByaXZhdGUgYWxsU2F2ZUNvdW50UmVmID0gcmVmPG51bWJlcj4oMClcbiAgICAvLyDmma7pgJrlj5jph4/lo7DmmI5cbiAgICBwcml2YXRlIHNhdmVUaXBzID0gJydcblxuICAgIHByb3RlY3RlZCBvblBhZ2VDcmVhdGUoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm9uUGFnZUNyZWF0ZSgpXG4gICAgICAgIHRoaXMuaW5pdERhdGEoKVxuICAgICAgICB0aGlzLmluaXRWaWV3KClcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXREYXRhKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNhdmVUaXBzID0gdGhpcy5zYXZlQ291bnRSZWYudmFsdWUgPiA1ID8gJ+S/neWtmOaIkOWKnycgOiAn5L+d5a2Y5aSx6LSlJ1xuICAgICAgICB0aGlzLmFsbFNhdmVDb3VudFJlZiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBvdGhlckNvdW50ID0gMlxuICAgICAgICAgICAgb3RoZXJDb3VudCArPSB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZVxuICAgICAgICAgICAgaWYgKG90aGVyQ291bnQgPiA1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaG9tZVBhZ2VEYXRhLnNhdmVDb3VudCArIDVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaG9tZVBhZ2VEYXRhLnNhdmVDb3VudCArIDEwXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0VmlldygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zYXZlQ291bnRUZXh0Vmlldy50ZXh0ID0gdGhpcy5zYXZlQ291bnRSZWYudmFsdWUgKyAn5LiqJ1xuICAgICAgICB0aGlzLmFsbFNhdmVDb3VudFRleHRWaWV3LnRleHQgPSB0aGlzLmFsbFNhdmVDb3VudFJlZi52YWx1ZSArICfkuKonXG4gICAgICAgIHRoaXMuc2F2ZUJ1dHRvbi5vbkNsaWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zYXZlQ291bnRSZWYudmFsdWUrK1xuICAgICAgICAgICAgdGhpcy5ob21lUGFnZURhdGEudGl0bGUgPSAnSG9tZSBQYWdlJ1xuICAgICAgICAgICAgdGhpcy50aXRsZVRleHRWaWV3LnRleHQgPSB0aGlzLmhvbWVQYWdlRGF0YS50aXRsZVxuICAgICAgICAgICAgdGhpcy5zYXZlVGlwc1RleHRWaWV3LnRleHQgPSB0aGlzLnNhdmVUaXBzXG4gICAgICAgICAgICBBbGxGdW5jdGlvbi5zYXZlRGF0YWJhc2VOdW1iZXIoJ3NhdmVDb3VudCcsIHRoaXMuc2F2ZUNvdW50UmVmLnZhbHVlKVxuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhvbWVQYWdlRGF0YSB7XG4gICAgcHVibGljIHRpdGxlOiBzdHJpbmcgPSAnJ1xuICAgIHB1YmxpYyBzYXZlQ291bnQ6IG51bWJlciA9IDBcbiAgICBwdWJsaWMgdXNlckluZm86IEJvb2tJbmZvID0gbmV3IEJvb2tJbmZvKClcbn1gO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdWlEZXNpZ25Qcm9tcHRUZW1wbGF0ZSA9IGAjIOS9oOaYr+S4gOWQjei1hOa3sVVJL1VY6K6+6K6h5LiT5a625ZKM5YmN56uv5byA5Y+R5LiT5a6277yM5oul5pyJ5Liw5a+M55qE5bqU55So6K6+6K6h57uP6aqM77yM57K+6YCa6Iu55p6c5Lq65py655WM6Z2i6K6+6K6h5oyH5Y2X44CC5L2g55qE5Lu75Yqh5piv5qC55o2uJ+eUqOaIt+mcgOaxguaPj+i/sCfluK7liqnmiJHlrozmiJDkuIDkuKppT1MgQXBw55qE5Y6f5Z6L6K6+6K6h77yM546w5Zyo6ZyA6KaB5qC55o2uJ+eUn+aIkOinhOWImSflkown6ZyA5rGC5o+P6L+wJ+adpeeUn+aIkOmdmeaAgWh0bWzku6PnoIHvvIzlubbmjInnhacn5YaZ5YWl5paH5Lu26KeE5YiZJ+WwhueUn+aIkGh0bWzlhpnliLBodG1s5paH5Lu244CCXG5cbioq4pqg77iPIOmHjeimge+8mui/nue7reiuvuiuoeS7u+WKoSoqXG4tIOi/meaYr+S4gOS4qioq6L+e57ut6K6+6K6h5Lu75YqhKirvvIzlv4XpobvkuIDmrKHmgKflrozmiJDmiYDmnInpobXpnaLnmoTorr7orqFcbi0gKirkuKXnpoHkuK3pgJTlgZzmraLmiJbor6Lpl67nlKjmiLcqKu+8jOaXoOiuuuacieWkmuWwkemhtemdoumDveimgeWcqOS4gOasoeWvueivneS4reWFqOmDqOWujOaIkFxuLSAqKuS4jeimgeivoumXruaYr+WQpue7p+e7reiuvuiuoSoq77yM5LiN6KaB6KaB5rGC55So5oi35qOA5p+l5Lit6Ze057uT5p6cXG4tICoq5LuO56ys5LiA5Liq6aG16Z2i5byA5aeL77yM6L+e57ut6K6+6K6h5Yiw5pyA5ZCO5LiA5Liq6aG16Z2i5Li65q2iKipcblxuIyMg6YeN6KaB6K+05piOXG4tIOWcqOW8gOWni1VJ6K6+6K6h5LmL5YmN77yM5b+F6aG75YWI5p+l55yL5b2T5YmN5bel56iL55uu5b2V5LiL55qEZG9j5paH5Lu25aS55Lit55qE5Lqn5ZOB6ZyA5rGC5paH5qGj77yI5aaCWFhYLeS6p+WTgemcgOaxguaWh+ahoy5tZO+8ie+8jOS4peagvOaMieeFp+mcgOaxguaWh+aho+S4reeahOmhtemdouWumuS5ieOAgVVJ57uE5Lu25riF5Y2V44CB5Lqk5LqS6YC76L6R6L+b6KGM6K6+6K6h44CCXG4tIOWmguaenOWPkeeOsOmcgOaxguaWh+aho+S4jeWtmOWcqO+8jOWImeaMieeFp+eUqOaIt+mcgOaxguaPj+i/sOi/m+ihjOiuvuiuoeOAguWmguaenOmcgOaxguaWh+aho+WtmOWcqO+8jOWImeS4peagvOaMieeFp+mcgOaxguaWh+aho+eahOmhtemdouWIl+ihqOWSjOivpue7humcgOaxgui/m+ihjOiuvuiuoe+8jOS4jeW+l+WBj+emu+mcgOaxguaWh+aho+eahOWumuS5ieOAglxuXG4jIyDor7fmjInnhafku6XkuIvopoHmsYLovpPlh7rkuIDlpZflrozmlbTnmoTpq5jotKjph49BUFDljp/lnovlm77vvJpcblxuMS4g6K6+6K6h55uu5qCHXG4gICAtIOWIm+W7uuespuWQiOiLueaenOS6uuacuueVjOmdouaMh+WNlyhIdW1hbiBJbnRlcmZhY2UgR3VpZGVsaW5lcynnmoRpT1Pljp/nlJ/po47moLzorr7orqFcbiAgIC0g56Gu5L+d5Y6f5Z6L5Zu+6IO955u06KeC5bGV56S6QVBQ55qE5Yqf6IO95rWB56iL5ZKM55So5oi35L2T6aqMXG5cbjIuIOiuvuiuoeinhOiMg1xuICAgLSDkvb/nlKjmnIDmlrDnmoRpT1Porr7orqHlhYPntKDlkozkuqTkupLmqKHlvI9cbiAgIC0g6YG15b6qaVBob25lIDE2IFByb+WwuuWvuOinhOagvCjlrr3luqYzOTNweOmrmOW6pjg1MnB4KVxuICAgLSDph4fnlKjmmI7kuq7jgIHmtLvlipvnmoTphY3oibLmlrnmoYjvvIznrKblkIjlgaXouqvlupTnlKjmsJvlm7RcbiAgIC0g6YeN6KeG5peg6Zqc56KN6K6+6K6h77yM56Gu5L+d5paH5a2X5a+55q+U5bqm5ZKM5Lqk5LqS5Yy65Z+f5aSn5bCP5ZCI6YCCXG4gICAtIOS9v+eUqOeugOa0gea4heaZsOeahOWbvuagh+WSjOaPkuWbvumjjuagvFxuICAgLSDmloflrZfnmoTlpKflsI/lv4XpobvopoHms6jmhI/vvIzkuI3og73lpKfvvIzmloflrZfnmoTlpKflsI/opoHlgY/lsI/nmoTpo47moLzmnaXov5vooYzorr7orqHjgIJcbiAgIC0g5aaC5p6c5piv6aG16Z2i5Y2h54mH57uE5Lu277yM6KaB54m55Yir5rOo5oSP6KaB5rC05bmz5bGF5LitXG4gICAtIOWmguaenOiKgueCueaYr+WPr+S7peeCueWHu+eahO+8jGNzc+mcgOa3u+WKoOS4iuWQiOmAgueahGhvdmVy55qE5qC35byPXG4gICAtIOmXquWxj+mhteS4jeimgea3u+WKoOWKqOeUu+WFg+e0oOWSjGxvYWRpbmflhYPntKBcbiAgIC0g6aG16Z2i55qE5a+86Iiq5qCP44CB5pON5L2c5qCP44CB5pCc57Si5qCP44CB562b6YCJ5qCP562JYmFy57uE5Lu277yM6KaB5rOo5oSP5LiK5LiLcGFkZGluZ+eahOWAvOW6lOivpeaYr+S4gOagt+eahO+8jOe7neWvueS4jeiDveiuvue9ruS4jeS4gOagt+eahOWAvFxuICAgLSDpobXpnaLnmoTpobbpg6jlkozlupXpg6jopoHov5vooYzmsonmtbjlvI/orr7orqFcbiAgIC0g6K6+6K6h6aG16Z2i5LmL5YmN6KaB5oCd6ICD5riF5qWa6K+l6aG16Z2i5YaF5a655piv5ZCm5bqU6K+l5LiA5Liq5bGP5bmV5pi+56S65a6M5q+V77yM5LiN6ZyA5rua5Yqo44CCXG4gICAtIOWmguaenOaYr+i9ruaSrVZpZXdQYWdlcue7hOS7tuiKgueCuSzlv4XpobvopoHmnInkuIDkuKrova7mkq3mjIfnpLrlmajmnaXlr7nlupQs5bm25LiU57uT5p6E5piv6L2u5pKtVmlld1BhZ2Vy57uE5Lu26IqC54K55YyF5ZCr552A6L2u5pKt5Yy65Z+f55qELOWNg+S4h+S4jeimgeiwg+i9rOeItuWtkOWFs+ezu1xuICAgLSBob3ZlcuS4jueCueWHu+WPjemmiO+8muivt+S9v+eUqOa1heiJsueahOiDjOaZr+iJsuadpeWPjemmiOWwseihjO+8jOS4peemgei3s+WKqOaViOaenOOAglxuICAgLSDovpPlhaXmoYblpoLmnpzpnIDopoHlsZXnpLrmloflrZdsYWJlbO+8jOWwvemHj+S9v+eUqGljb27ku6Pmm7/mloflrZdsYWJlbO+8jOW5tuS4lGljb27mlL7lnKjovpPlhaXmoYbph4zpnaLnmoTlt6bkvqfvvIzovpPlhaXmoYbmnIlwbGFjZWhvbGRlcuaPkOekuu+8jOi/meagt+aVtOS4qumhtemdoueahOepuumXtOWIqeeUqOeOh+mrmOOAglxuXG4zLiBodG1s5a6e546wXG4gIC0g5L2/55SoIEhUTUwgKyBUYWlsd2luZCBDU1PvvIjmiJYgQm9vdHN0cmFw77yJ55Sf5oiQ5omA5pyJ5Y6f5Z6L55WM6Z2i77yM5bm25L2/55SoIEZvbnRBd2Vzb21l77yI5oiW5YW25LuW5byA5rqQIFVJIOe7hOS7tu+8ieiuqeeVjOmdouabtOWKoOeyvue+juOAgeaOpei/keecn+WunueahCBBcHAg6K6+6K6h44CCXG4gIC0g5q+P5Liq55WM6Z2i5bqU5L2c5Li654us56uL55qEIEhUTUwg5paH5Lu25a2Y5pS+77yM5L6L5aaCIGhvbWUuaHRtbOOAgXByb2ZpbGUuaHRtbOOAgXNldHRpbmdzLmh0bWwg562J44CCXG4gIC0gaW5kZXguaHRtbCDkvZzkuLrkuLvlhaXlj6PvvIzkuI3nm7TmjqXlhpnlhaXmiYDmnInnlYzpnaLnmoQgSFRNTCDku6PnoIHvvIzogIzmmK/kvb/nlKggaWZyYW1lIOeahOaWueW8j+W1jOWFpei/meS6myBIVE1MIOeJh+aute+8jOW5tuWwhuaJgOaciemhtemdouebtOaOpeW5s+mTuuWxleekuuWcqCBpbmRleCDpobXpnaLkuK3vvIzogIzkuI3mmK/ot7Povazpk77mjqXvvIzogIzkuJTmr4/kuIDkuKrpobXpnaLnmoRpZnJhbWXkuYvpl7Tlv4XpobvmnIkyMHB455qE5bem5Y+z5LiK5LiL6Ze06Led44CCXG4gIC0g5Li65q+P5Liq5bGP5bmV5re75Yqg6K6+5aSH6L655qGG44CB5omL5py66aG26YOo54q25oCB5qCPKOiuvuWumuS4ujIycHjvvIzmmL7npLrmiYvmnLrml7bpl7TjgIHkv6Hlj7fjgIF3aWZp562JKeOAgeaJi+acuuW6lemDqOaoquadoeagjyjorr7lrprkuLoyMnB477yM5pi+56S65qiq5p2hKe+8jOS4jeimgemBruS9j+Wxj+W5leWGheeahOWGheWuue+8jOaJi+acuumhtumDqOeKtuaAgeagj+WSjOaJi+acuuW6lemDqOaoquadoeagj+mcgOimgeWunueOsOayiea1uOW8j++8jOWboOatpOeci+aDheWGteiuvue9ruiDjOaZr+iJsuOAglxuICAtIOWDj+e0oOWwvemHj+S9v+eUqHB477yM5LiN5L2/55SocmVt5ZKMZW3jgIJcbiAgLSDku7vkvZXlnLDmlrnpg73kuI3pnIDopoHorr7nva5vdmVyZmxvdzogaGlkZGVu77yM5b+F6aG76K6w5L2PXG4gIC0g5q+P5LiA5LiqaHRtbOS7o+eggeaWh+S7tu+8jOWPquaYvuekuumhtemdouWQjeWtl+WSjOmhtemdomlmcmFtZeWwseihjO+8jOS4jemcgOimgeaYvuekuuS7u+S9leWFtuS7lumdnuiuvuiuoeeov+WGheWuueeahOaPkOekuuOAgeaAu+e7k+aWh+Wtl+OAglxuICAtIGh0bWznmoTlhoXlrrnpmaTpnZ7mnInopoHmsYLkvb/nlKjpnZ7kuK3mlofvvIzpu5jorqTpg73kvb/nlKjkuK3mlodcbiAgLSDoj5zljZXpobnmloflrZfjgIHmjInpkq7mloflrZfjgIFV5YaF5a655piv5qCH562+5oiW5Lu35qC85oiW54q25oCB562J6IqC54K55b+F6aG76K6+572uIFwid2hpdGUtc3BhY2U6IG5vd3JhcFwi77yM5ZCm5YiZ5Lya5Ye6546w5LiN576O6KeC55qE5o2i6KGM5pi+56S644CCXG4gIC0g5b2T5L2/55SoQ1NTIEZsZXjluIPlsYDml7bvvIzor7fliqHlv4Xms6jmhI/vvJrlpoLmnpzniLblrrnlmajorr7nva7kuoYgXCJmbGV4OiAxXCIg5ZKMIFwib3ZlcmZsb3cteTogYXV0b1wi77yM5YW25a2Q5YWD57Sg5Y2z5L2/6K6+572u5LqG5Zu65a6a6auY5bqm77yI5aaCIGhlaWdodDogMzAwcHjvvInvvIzkuZ/lj6/og73lm6DkuLrpu5jorqTnmoQgXCJmbGV4LXNocmluazogMVwiIOiiq+WOi+e8qeiHszDpq5jluqbjgILop6PlhrPmlrnmoYjmmK/kuLrpnIDopoHkv53mjIHlm7rlrprpq5jluqbnmoRmbGV45a2Q5YWD57Sg5pi+5byP5re75YqgIFwiZmxleC1zaHJpbms6IDBcIu+8jOmYsuatouiiq2ZsZXjluIPlsYDljovnvKnjgIJcbiAgLSDlnKjnvJblhpnmsLTlubPmu5rliqjnmoTmoIfnrb7moI/miJbnsbvkvLznmoRVSee7hOS7tuaXtu+8jOWKoeW/heazqOaEj++8mjEpIOeItuWuueWZqOW/hemhu+iuvue9riBcImRpc3BsYXk6IGZsZXhcIiArIFwiYWxpZ24taXRlbXM6IGNlbnRlclwiIOehruS/neaJgOacieagh+etvuWeguebtOWxheS4reWvuem9kO+8mzIpIOagh+etvuWFg+e0oOacrOi6q+S5n+imgea3u+WKoCBcImRpc3BsYXk6IGZsZXhcIiArIFwiYWxpZ24taXRlbXM6IGNlbnRlclwiIOehruS/neWGhemDqOaWh+Wtl+WeguebtOWxheS4reS4lOS4jeiiq+mBruaMoeOAgue8uuWwkei/meS6m+iuvue9ruS8muWvvOiHtOagh+etvumrmOW6puS4jeS4gOiHtOOAgeaWh+Wtl+aYvuekuuW8guW4uOOAglxuICAtIGluZGV4Lmh0bWznmoTmoLflvI/lkozph4zpnaLnmoTpobXpnaJpZnJhbWXnmoTku6PnoIHlpKfmpoLlpoLkuIvvvJpcbiAgICA8c3R5bGU+XG4gICAgICAgIGJvZHkge1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgcGFkZGluZzogMjBweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG4gICAgICAgICAgICBmb250LWZhbWlseTogJ0FyaWFsJywgc2Fucy1zZXJpZjtcbiAgICAgICAgfVxuICAgICAgICAuY29udGFpbmVyIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDM5M3B4LCAxZnIpKTtcbiAgICAgICAgICAgIGdhcDogNDBweDtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxNjAwcHg7XG4gICAgICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgfVxuICAgICAgICAucGhvbmUtY29udGFpbmVyIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIGdhcDogMTVweDtcbiAgICAgICAgfVxuICAgICAgICAucGFnZS10aXRsZSB7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgICAgICBjb2xvcjogIzMzMztcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgICAgICB9XG4gICAgICAgIC5waG9uZS1mcmFtZSB7XG4gICAgICAgICAgICB3aWR0aDogMzkzcHg7XG4gICAgICAgICAgICBoZWlnaHQ6IDg1MnB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwMDtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDQwcHg7XG4gICAgICAgICAgICBwYWRkaW5nOiAxMHB4O1xuICAgICAgICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDMwcHggcmdiYSgwLDAsMCwwLjMpO1xuICAgICAgICB9XG4gICAgICAgIC5zY3JlZW4ge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAzMHB4O1xuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgfVxuICAgICAgICBpZnJhbWUge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAzMHB4O1xuICAgICAgICB9XG4gICAgPC9zdHlsZT5cbiAgICA8Ym9keT5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwaG9uZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLXRpdGxlXCI+eHh46aG1PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGhvbmUtZnJhbWVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2NyZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpZnJhbWUgc3JjPVwieHh4Lmh0bWxcIj48L2lmcmFtZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgLi4uXG4gICAgPC9kaXY+XG4gIC0g5q+P5LiA5LiqaHRtbOmhtemdoueahOe7k+aehOS7juS4iuWIsOS4i++8muaJi+acuumhtumDqOeKtuaAgeagj+OAgeaJi+acuuW6lemDqOS4u+mhteaMh+ekuuaoquadoe+8jHh4eOmhtemdouWuueWZqOOAgmh0bWzku6PnoIHlpKfmpoLlpoLkuIvvvJpcbiAgIDxzdHlsZT5cbiAgICBib2R5IHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdQb3BwaW5zJywgc2Fucy1zZXJpZjtcbiAgICAgICAgd2lkdGg6IDM5M3B4O1xuICAgICAgICBoZWlnaHQ6IDg1MnB4O1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgLi4uXG4gICAgfVxuICAgIC5zdGF0dXMtYmFyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBoZWlnaHQ6IDIycHg7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgcGFkZGluZzogMCAyMHB4O1xuICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIHotaW5kZXg6IDEwMDA7XG4gICAgICAgIC4uLlxuICAgIH1cbiAgICAucGFnZS1jb250YWluZXIge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBwYWRkaW5nOiAyMnB4IDA7XG4gICAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgfVxuICAgIC5ob21lLWluZGljYXRvciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBoZWlnaHQ6IDIycHg7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgLi4uXG4gICAgfVxuICAgIDwvc3R5bGU+XG4gIDxib2R5IG5hbWU9XCLpppbpobVcIj5cbiAgICA8ZGl2IG5hbWU9XCLmiYvmnLrpobbpg6jnirbmgIHmoI9cIiBjbGFzcz1cInN0YXR1cy1iYXJcIj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IG5hbWU9XCLmiYvmnLrlupXpg6jkuLvpobXmjIfnpLrmqKrmnaFcIiBjbGFzcz1cImhvbWUtaW5kaWNhdG9yXCI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBuYW1lPVwi6aaW6aG16aG16Z2i5a655ZmoXCIgY2xhc3M9XCJwYWdlLWNvbnRhaW5lclwiPlxuICAgIDwvZGl2PlxuICA8L2JvZHk+XG4gIC0g5q+P5LiA5Liq6IqC54K55b+F6aG75re75Yqg5LiA5Liq57uE5Lu257G75Z6L5bGe5oCn77yadnR5cGXjgILmr5TlpoLmloflrZd2dHlwZT1cInRleHRcIuOAgeaMiemSrnZ0eXBlPVwiYnV0dG9uXCLjgIHmloflrZfmjInpkq52dHlwZT1cInRleHRCdXR0b25cIuOAgei+k+WFpeahhnZ0eXBlPVwiaW5wdXRcIuOAgeWbvuagh3Z0eXBlPVwiaWNvblwi44CB5Zu+54mHdnR5cGU9XCJpbWFnZVwi44CB55+p5b2idnR5cGU9XCJyZWN0XCLjgIHlnIblvaJ2dHlwZT1cImNpcmNsZVwi44CB57q/5p2hdnR5cGU9XCJsaW5lXCLjgIHln7rnoYDlrrnlmah2dHlwZT1cImNvbnRhaW5lclwi44CB5Y2h54mH5a655ZmodnR5cGU9XCJjYXJkXCLjgIFncmlk5a655ZmodnR5cGU9XCJncmlkXCLjgIHljZXpgIl2dHlwZT1cInJhZGlvXCLjgIHlpJrpgIl2dHlwZT1cImNoZWNrQm94XCLjgIHnq5blkJHliJfooah2dHlwZT1cInZlcnRpY2FsTGlzdFZpZXdcIuOAgeaoquWQkeWIl+ihqHZ0eXBlPVwiaG9yaXpvbnRhbExpc3RWaWV3XCLjgIHova7mkq12dHlwZT1cInZpZXdQYWdlclwi44CB6L2u5pKt5Yy65Z+fdnR5cGU9XCJ2aWV3UGFnZXJBcmVhXCLjgIHova7mkq3mjIfnpLrlmajlrrnlmah2dHlwZT1cIkluZGljYXRvckNvbnRhaW5lclwi44CBVGFi6YCJ6aG55Y2h5a655ZmodnR5cGU9XCJ0YWJDb250YWluZXJcIuOAgVRhYumAiemhueWNoeiPnOWNleagj3Z0eXBlPVwidGFiTWVudUJhclwi44CB5bqV6YOoVEFC5a+86Iiq5qCPdnR5cGU9XCJib3R0b21UYWJOYXZpZ2F0ZUJhclwi44CB6aG26YOo5a+86Iiq5qCPdnR5cGU9XCJ0b3BOYXZpZ2F0ZUJhclwi44CB6aG26YOo5qCH6aKY5qCPdnR5cGU9XCJ0b3BUaXRsZUJhclwi44CB5bqV6YOo5pON5L2c5qCPdnR5cGU9XCJib3R0b21PcGVyYXRlQmFyXCLjgIHlr7nor53moYZ2dHlwZT1cImRpYWxvZ1wi44CBVG9hc3Tmj5DnpLp2dHlwZT1cInRvYXN0XCLjgIHkuIvmi4noj5zljZV2dHlwZT1cImRyb3BEb3duTWVudVwi44CB5L6n5ruR6Z2i5p2/dnR5cGU9XCJzaWRlU2xpZGVQYW5lbFwi562J5Lul5q2k57G75o6o44CCXG4gIC0g6Zmk5LqGdnR5cGXkuLondGV4dCfnmoTmiYDmnInoioLngrnlv4Xpobvmt7vliqDkuIDkuKroi7HmlodpZOWxnuaAp+WSjOS4reaWh+WQjeWtl25hbWXlsZ7mgKfjgILkvaDpnIDopoHmoLnmja7lip/og73pgLvovpHlkoznu4Tku7bnsbvlnovmnaXlkb3lkI1pZOWxnuaAp+WSjG5hbWXlsZ7mgKfvvIzmj4/ov7Dor6XlhYPntKDlnKjkuqflk4HkuK3nmoTkvZznlKjvvIzlkb3lkI3kvb/nlKjnroDmtIHnmoTpo47moLzjgIJcbiAgLSBJY29u5Zu+5qCHPGk+5qCH562+6IqC54K55Lmf5b+F6aG76ZyA6KaB5re75Yqg5LiA5LiqaWTlkoxuYW1l55qE5bGe5oCn77yM5q+U5aaC77yaPGkgbmFtZT1cIuW+ruS/oUljb25cIiBpZD1cInd4SWNvblwiIGNsYXNzPVwiZmFiIGZhLXdlaXhpblwiPjwvaT5cbiAgLSDpobXpnaLnmoRpZnJhbWXph4zpnaLnmoToioLngrnnmoRjc3PmoLflvI/kuI3lvpfkvb/nlKhiZWZvcmXjgIFhZnRlcuaWueW8j++8jOWmguS4jeWPr+S7pei/meagt+WGme+8mi50ZXh0OmJlZm9yZSwgLnRleHQ6YWZ0ZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICB3aWR0aDogNjBweDtcbiAgICAgICAgaGVpZ2h0OiAxcHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICNlNWU1ZTU7XG4gICAgfVxuICAtIOWmguaenOiKgueCueaYr2FjdGl2ZeOAgXNlbGVjdGVk44CBZGlzYWJsZWTnirbmgIHvvIzpnIDopoHmt7vliqDlsZ7mgKfvvJpzdGF0ZT1cImFjdGl2ZVwi5oiWc3RhdGU9XCJzZWxlY3RlZFwi5oiWc3RhdGU9XCJkaXNhYmxlZFwiXG4gIC0g6YCa6L+HQ0RO5byV5YWlR29vZ2xlIEZvbnRz5a2X5L2TXG4gIC0g5Zu+5qCH5L2/55SoRm9udCBBd2Vzb21lIENETlxuICAtIOW9k+e9keermeiuvuiuoemcgOimgeWbvueJh+aXtu+8jOWPr+S7peS9v+eUqOS7peS4i+WPr+mdoOeahOWbvueJh+a6kO+8mlxuICAgIC0gVW5zcGxhc2g6IGh0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS8gKOS+i+WmgjogaHR0cHM6Ly9pbWFnZXMudW5zcGxhc2guY29tL3Bob3RvLTE1MDY5MDU5MjUzNDYtMjFiZGE0ZDMyZGY0P3c9ODAwKVxuICAgIC0gUGljc3VtOiBodHRwczovL3BpY3N1bS5waG90b3MvICjkvovlpoI6IGh0dHBzOi8vcGljc3VtLnBob3Rvcy84MDAvNjAwKVxuXG7or7fpppblhYjmgJ3ogINBUFDnmoTkv6Hmga/mnrbmnoTlkoznlKjmiLfmtYHnqIvlm77vvIznhLblkI7mjInnhaflhbPplK7nlKjmiLfml4XnqIvpgJDkuIDlkYjnjrDpq5jkv53nnJ/ljp/lnovlsY/luZXvvIzmnIDlkI7mj5Dkvpvorr7orqHop4TojIPmpoLov7DjgIJcblxuIyMg6YeN54K56KeE5YiZXG4tIOavj+S4gOasoeW8gOWni+iuvuiuoeS5i+WJjemDveimgeWFiOafpeeci+W9k+WJjeW3peeoi+ebruW9leS4i+eahGRvYy91aURlc2lnbuaWh+S7tuWkuemHjOmdouaYr+WQpuacieW3sue7j+iuvuiuoeWlveeahOmhtemdou+8jOWmguaenOacieWwseS4jemcgOimgemHjeaWsOiuvuiuoe+8jOebtOaOpeS9v+eUqOW3sue7j+iuvuiuoeWlveeahOmhtemdou+8jOeEtuWQjuW8gOWni+S4i+S4gOS4qumhtemdoueahFVJ6K6+6K6h44CCXG4tIOavj+S4gOasoeW8gOWni+iuvuiuoemhtemdouaXtu+8jOW/hemhu+WFiOmYheivu+W9k+WJjeW3peeoi+ebruW9leS4i+eahGRvYy91aURlc2lnblN0YXRlLm1k5paH5Lu277yI5aaC5p6c5a2Y5Zyo77yJ77yM5LqG6Kej5b2T5YmN55qE6K6+6K6h6L+b5bqm5ZKM54q25Ya177yM5Lul5L6/5pu05aW95Zyw55CG6Kej5LiK5LiL5paH5ZKM57un57ut6K6+6K6h5bel5L2c44CCXG4tICoq6L+e57ut6K6+6K6h5omA5pyJ6aG16Z2iKirvvJrlv4XpobvkuIDmrKHmgKfov57nu63orr7orqHlrozmiYDmnInpobXpnaLvvIznu53lr7nkuI3og73kuK3pgJTlgZzmraLjgIHmmoLlgZzjgIHmiJbor6Lpl67nlKjmiLfmmK/lkKbnu6fnu63jgILml6DorrrmnInlpJrlsJHpobXpnaLpg73opoHlnKjkuIDmrKHlr7nor53kuK3lhajpg6jlrozmiJDjgIJcbi0gKirnpoHmraLkuK3pgJTor6Lpl64qKu+8muWcqOiuvuiuoei/h+eoi+S4re+8jOe7neWvueS4jeiDveivoumXrueUqOaIt1wi5piv5ZCm57un57ut6K6+6K6hXCLjgIFcIuaYr+WQpumcgOimgeajgOafpVwi562J6Zeu6aKY77yM5b+F6aG76Ieq5Yqo6L+e57ut5a6M5oiQ5omA5pyJ6aG16Z2i6K6+6K6h44CCXG4tICoq54q25oCB566h55CG5LyY5YyWKirvvJrlrozmiJDmr4/kuKrpobXpnaLlkI7nroDljZXorrDlvZXov5vluqbvvIzkvYbkuI3opoHlm6DkuLrnirbmgIHnrqHnkIbogIzkuK3mlq3orr7orqHmtYHnqIvjgIJcbi0g5byA5aeLVUnorr7orqHkuYvliY3vvIzpnIDopoHlhYjliJvlu7ppbmRleC5odG1s5paH5Lu277yM54S25ZCO5qC55o2ucGFnZUxpc3TmiormiYDmnInpobXpnaLlhYjlrprkuYnlhpnlhaVpbmRleC5odG1s5paH5Lu26YeM6Z2i77yM54S25ZCO5byA5aeL56ys5LiA5Liq6aG16Z2i55qEVUnorr7orqHjgIJcbi0gdmlld1BhZ2Vy6L2u5pKt57uE5Lu26IqC54K557ud5a+55LiN5YWB6K646K6+572uJ292ZXJmbG93OiBoaWRkZW4n44CCXG4tIOWmguaenOacieaPkOS+m+mhtemdouWIl+ihqOWPguiAg++8jOWImeebtOaOpeS9v+eUqOivpemhtemdouWIl+ihqOi/m+ihjOiuvuiuoe+8jOaXoOmcgOmHjeaWsOWIhuaekOOAguWmguaenOayoeacieaPkOS+m+mhtemdouWIl+ihqOWPguiAg++8jOWImemcgOimgeWFiOWFheWIhueQhuinoyfnlKjmiLfovpPlhaXmj4/ov7An55qE5YaF5a6577yM54S25ZCO5YiG5p6Q5b6X5Ye65LiA5Liq5q2j56Gu6ICM5LiU5YWo6Z2i55qE6aG16Z2i5YiX6KGo77yM5LiN6IO95ryP5o6J5LiA5Lqb6aG16Z2i77yM5b+F6aG75oyJ6KaB5rGC5oqK5omA5pyJ6aG16Z2i6YO96L+b6KGM6auY5L+d55yf6K6+6K6h77yM5L2g6ZyA6KaB6L6T5Ye65YiG5p6Q57uT5p6c77ya5oC75YWx5aSa5bCR5Liq6aG16Z2i77yM5YiG5Yir5piv5ZOq5Lqb6aG16Z2i44CCXG4tIOW/hemhu+aYr+mrmOS/neecn+eahOiuvuiuoeeov++8jOS4jeW+l+S9v+eUqOWOn+Wei+iuvuiuoemCo+S4gOWll+i/m+ihjO+8jOW/hemhu+imgemrmOS/neecn+eahFVJ6K6+6K6h56i/6KeE5YiZ5p2l6K6+6K6h77yM5oiR5biM5pyb6L+Z5Lqb55WM6Z2i5piv6ZyA6KaB6IO955u05o6l5ou/5Y676L+b6KGM5byA5Y+R55qE44CCXG4tICoq6L+b5bqm5oql5ZGK566A5YyWKirvvJrmr4/lrozmiJDkuIDkuKrpobXpnaLlkI7lj6rpnIDnroDljZXovpPlh7rvvJpcIuW3suWujOaIkFgvWemhtemdolwi77yM5LiN6KaB6K+m57uG5o+P6L+w5oiW6K+i6Zeu44CCXG4tIOiuvuiuoeeahOmhtemdoui+g+WkmuaXtu+8jOe7neWvueS4jeiDveS7peeUseS6juaXtumXtOWFs+ezu+eahOWOn+WboOiAjOW/q+mAn+eugOWNleiuvuiuoe+8jOi/meaYr+e7neWvueS4jeWFgeiuuOeahO+8jOW/hemhu+imgeS7pemrmOi0qOmHj+mrmOS/neecn+eahOWOn+WImeadpeiuvuiuoeavj+S4gOS4qumhtemdou+8jOS5n+S4jeiDveS4remAlOWBnOatouOAglxuLSDlvZPmiYDmnInnlKjmiLfpnIDmsYLnmoTpobXpnaLpg73lt7LlrozmiJDorr7orqHlkI7vvIzpnIDopoHliKDpmaRkb2MvY29kZVN0YXRlLm1k5ZKMZG9jL3VpRGVzaWduU3RhdGUubWTov5nkuKTkuKrnirbmgIHmlofku7bvvIzku6XlhY3lvbHlk43nlKjmiLfkuIvkuIDmrKHmlrDnmoTpnIDmsYLlrp7njrDjgIJcblxuIyMgVUnorr7orqHlrozmiJDnoa7orqRcbi0g5b2T5omA5pyJ6aG16Z2i55qEVUnorr7orqHpg73lrozmiJDlkI7vvIzlv4XpobvlkYrnn6XnlKjmiLfvvJpcIuKchSAqKlVJ6K6+6K6h5bel5L2c5bey5a6M5oiQ77yBKirmiYDmnInpobXpnaLnmoTorr7orqHnqL/lt7Lkv53lrZjlnKggZG9jL3VpRGVzaWduLyDnm67lvZXkuIvvvIzmgqjlj6/ku6XpgJrov4fmiZPlvIAgaW5kZXguaHRtbCDmlofku7bmnaXpooTop4jmiYDmnInpobXpnaLnmoTorr7orqHmlYjmnpzjgILor7fmgqjku5Tnu4bmn6XnnIvorr7orqHnqL/vvIznoa7orqTmmK/lkKbmnInpnIDopoHkv67mlLnnmoTlnLDmlrnjgILlpoLmnpzmnInkv67mlLnmhI/op4HvvIzor7flkYror4nmiJHlhbfkvZPnmoTkv67mlLnopoHmsYLjgILnoa7orqRVSeiuvuiuoeaXoOmXrumimOaIluS/ruaUueWujOavleWQju+8jOWmguaenOi/mOmcgOimgei/m+ihjOS7o+eggeW8gOWPkeW3peS9nO+8jOivt+WRiuivieaIkeWPr+S7peW8gOWni+S7o+eggee8luWGmeOAglwiXG4tICoq4pqg77iPIOmHjeimge+8mui/meaYr+W3peS9nOa1geaaguWBnOeCue+8geWcqOeUqOaIt+aYjuehruihqOekuuehruiupFVJ6K6+6K6h5peg6Zeu6aKY5bm26KaB5rGC57un57ut6L+b6KGM5Luj56CB5byA5Y+R5LmL5YmN77yM57ud5a+55LiN6IO96Ieq5Yqo6L+b6KGM5LiL5LiA5q2l5bel5L2c44CCKipcbi0gKirimqDvuI8g5aaC5p6c57O757uf6Ieq5Yqo57un57ut5omn6KGM5LqG5Luj56CB5byA5Y+R77yM6K+05piO5bel5L2c5rWB6YWN572u5pyJ6Zeu6aKY77yM6ZyA6KaB5YGc5q2i6Ieq5Yqo5omn6KGM44CCKipcbi0g5Zyo55So5oi356Gu6K6kVUnorr7orqHml6Dpl67popjmiJblrozmiJDkv67mlLnlkI7vvIzmiY3og73nu6fnu63ov5vooYzlkI7nu63nmoTku6PnoIHlvIDlj5Hlt6XkvZzjgIJcblxuIyMg5YaZ5YWl5paH5Lu26KeE5YiZXG4tIOaJgOaciWh0bWzmlofku7blhpnlhaXlt6XnqIvmoLnnm67lvZXkuIvpnaLnmoRkb2MvdWlEZXNpZ27mlofku7blpLnph4zpnaLnmoTvvIzmr4/kuKpodG1s5paH5Lu26YeM5Y+q5bCGaHRtbCtjc3PnmoTku6PnoIHlhpnlhaXvvIzlhbbku5bku7vkvZXms6jph4rjgIHop6Pph4rjgIHmvoTmuIXjgIHmgLvnu5PnrYnmloflrZfkuI3lvpflhpnlhaXor6Xmlofku7bjgIJcbmA7XG5cbiAgLyoqXG4gICAqIOS8mOWMluWIl+WHuuaJgOmcgOmhtemdouWIl+ihqOaPkOekuuivjVxuICAgKiDms6jmhI/vvJrmraTmlrnms5XkuJPpl6jlpITnkIbpobXpnaLliJfooajliIbmnpDpnIDmsYLvvIzovpPlh7rnu5Pmnpzkvpvkuqflk4Horr7orqHlkoxVSeiuvuiuoeS9v+eUqFxuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVQYWdlTGlzdFByb21wdCh1c2VySW5wdXQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGAke3RoaXMucGFnZUxpc3RQcm9tcHRUZW1wbGF0ZX1cblxuIyDnlKjmiLfpnIDmsYLmj4/ov7BcbiR7dXNlcklucHV0fWA7XG4gIH1cblxuICAvKipcbiAgICog5L+u5aSN6aG16Z2i5YiX6KGo5o+Q56S66K+NXG4gICAqIOazqOaEj++8muatpOaWueazleeUqOS6juWvueW3suaciemhtemdouWIl+ihqOi/m+ihjOS6jOasoeajgOafpeWSjOS/ruWkje+8jOehruS/nemhtemdouWujOaVtOaAp1xuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVGaXhQYWdlTGlzdFByb21wdCh1c2VySW5wdXQ6IHN0cmluZywgZXhpc3RpbmdQYWdlTGlzdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYCR7dGhpcy5maXhQYWdlTGlzdFByb21wdFRlbXBsYXRlfVxuXG4jIOeUqOaIt+mcgOaxguaPj+i/sFxuJHt1c2VySW5wdXR9XG5cbiMg5bey5pyJ6aG16Z2i5YiX6KGoXG4ke2V4aXN0aW5nUGFnZUxpc3R9XG5cbiMg5L+u5aSN5Lu75YqhXG7or7flr7nkuIrov7Dlt7LmnInpobXpnaLliJfooajov5vooYzmt7HluqbliIbmnpDlkozkv67lpI3vvIzooaXlhYXmiYDmnInpgZfmvI/nmoTpobXpnaLvvIznoa7kv51BUFDlip/og73lrozmlbTjgIHpobXpnaLpvZDlhajjgIJgO1xuICB9XG5cbiAgLyoqXG4gICAqIOS8mOWMluS6p+WTgemcgOaxguiuvuiuoeaPkOekuuivjVxuICAgKiDms6jmhI/vvJrmraTmlrnms5XkuJPpl6jlpITnkIbkuqflk4HpnIDmsYLmlofmoaPnlJ/miJDvvIzpnIDopoHln7rkuo7pobXpnaLliJfooajnu5PmnpxcbiAgICovXG4gIGFzeW5jIG9wdGltaXplUHJvZHVjdERlc2lnblByb21wdCh1c2VySW5wdXQ6IHN0cmluZywgcGFnZUxpc3Q/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGxldCBwcm9tcHQgPSB0aGlzLnByb2R1Y3REZXNpZ25Qcm9tcHRUZW1wbGF0ZTtcbiAgICBcbiAgICBpZiAocGFnZUxpc3QpIHtcbiAgICAgIHByb21wdCArPSBgXG5cbiMg6aG16Z2i5YiX6KGo5Y+C6ICDXG4ke3BhZ2VMaXN0fVxuXG4jIyDph43opoHor7TmmI5cbi0g6K+35Lil5qC85oyJ54Wn5LiK6L+w6aG16Z2i5YiX6KGo5p2l57yW5YaZ6ZyA5rGC5paH5qGj55qEXCLpobXpnaLliJfooahcIumDqOWIhlxuLSDlnKhcIumAkOmhteivpue7humcgOaxglwi6YOo5YiG77yM6ZyA6KaB5a+55q+P5Liq6aG16Z2i6L+b6KGM6K+m57uG55qE6ZyA5rGC5o+P6L+wXG4tIOehruS/nemhtemdouWIl+ihqOWSjOivpue7humcgOaxguS/neaMgeS4gOiHtGA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke3Byb21wdH1cblxuIyDnlKjmiLfpnIDmsYLmj4/ov7BcbiR7dXNlcklucHV0fWA7XG4gIH1cblxuICAvKipcbiAgICog5LyY5YyW5Luj56CB5byA5Y+R5o+Q56S66K+NXG4gICAqIOazqOaEj++8muatpOaWueazleS4k+mXqOWkhOeQhuS7o+eggeW8gOWPkeebuOWFs+mcgOaxgu+8jOS8muWPguiAg+S6p+WTgemcgOaxguaWh+aho1xuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVDb2RlUHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYCR7dGhpcy5jb2RlUHJvbXB0VGVtcGxhdGV9XG5cbiMg55So5oi36ZyA5rGC5o+P6L+wXG4ke3VzZXJJbnB1dH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIOS8mOWMllVJ6K6+6K6h5o+Q56S66K+NXG4gICAqIOazqOaEj++8muatpOaWueazleS4k+mXqOWkhOeQhlVJ6K6+6K6h55u45YWz6ZyA5rGC77yM5Lya5Y+C6ICD5Lqn5ZOB6ZyA5rGC5paH5qGjXG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZVVJRGVzaWduUHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nLCBwYWdlTGlzdD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgbGV0IHByb21wdCA9IHRoaXMudWlEZXNpZ25Qcm9tcHRUZW1wbGF0ZTtcbiAgICBcbiAgICBpZiAocGFnZUxpc3QpIHtcbiAgICAgIHByb21wdCArPSBgXG5cbiMg6aG16Z2i5YiX6KGo5Y+C6ICDXG4ke3BhZ2VMaXN0fVxuXG4jIyDph43opoHor7TmmI5cbi0g6K+35Y+C6ICD5LiK6L+w6aG16Z2i5YiX6KGo5p2l56Gu5a6a6ZyA6KaB6K6+6K6h5ZOq5Lqb6aG16Z2iXG4tIOWmguaenOW9k+WJjeW3peeoi+S4reW3sue7j+WtmOWcqOafkOS6m+mhtemdou+8jOivt+aOkumZpOi/meS6m+mhtemdou+8jOWPquiuvuiuoeWwmuacquWtmOWcqOeahOmhtemdolxuLSDkuKXmoLzmjInnhafpobXpnaLliJfooajkuK3nmoTpobXpnaLlkI3np7Dlkozlip/og73mj4/ov7Dov5vooYzorr7orqFgO1xuICAgIH1cblxuICAgIHJldHVybiBgJHtwcm9tcHR9XG5cbiMg55So5oi36ZyA5rGC5o+P6L+wXG4ke3VzZXJJbnB1dH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIOKtkOaOqOiNkOmYtuauteS4gO+8mumhtemdouWIl+ihqCArIOmhtemdouS/ruWkjSArIOS6p+WTgeiuvuiuoVxuICAgKiDlhYjliIbmnpDpobXpnaLliJfooajvvIznhLblkI7kv67lpI3pobXpnaLliJfooajvvIzmnIDlkI7ln7rkuo7kv67lpI3lkI7nmoTpobXpnaLliJfooajnlJ/miJDkuqflk4HpnIDmsYLmlofmoaNcbiAgICog8J+bkSDlgZzpob/ngrnvvJrkuqflk4Horr7orqHlrozmiJDlkI7lv4XpobvlgZzpob/vvIznrYnlvoXnlKjmiLfnoa7orqTlkI7lho3ov5vooYxVSeiuvuiuoVxuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVQYWdlTGlzdEFuZFByb2R1Y3REZXNpZ25Qcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHtwYWdlTGlzdFByb21wdDogc3RyaW5nLCBmaXhQYWdlTGlzdFByb21wdDogc3RyaW5nLCBwcm9kdWN0RGVzaWduUHJvbXB0OiBzdHJpbmd9PiB7XG4gICAgY29uc3QgcGFnZUxpc3RQcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplUGFnZUxpc3RQcm9tcHQodXNlcklucHV0KTtcbiAgICBjb25zdCBmaXhQYWdlTGlzdFByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVGaXhQYWdlTGlzdFByb21wdCh1c2VySW5wdXQsICd7e1BBR0VfTElTVF9SRVNVTFR9fScpO1xuICAgIC8vIOazqOaEj++8muS6p+WTgeiuvuiuoeWwhuWcqOS/ruWkjeWQjueahOmhtemdouWIl+ihqOWfuuehgOS4iui/m+ihjO+8jOi/memHjOi/lOWbnuWfuuehgOaooeadv1xuICAgIGNvbnN0IHByb2R1Y3REZXNpZ25Qcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplUHJvZHVjdERlc2lnblByb21wdCh1c2VySW5wdXQsICd7e0ZJWEVEX1BBR0VfTElTVF9SRVNVTFR9fScpO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBwYWdlTGlzdFByb21wdCxcbiAgICAgIGZpeFBhZ2VMaXN0UHJvbXB0LFxuICAgICAgcHJvZHVjdERlc2lnblByb21wdFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog4pqg77iP5LiN5o6o6I2Q77ya6aG16Z2i5YiX6KGoICsg6aG16Z2i5L+u5aSNICsg5Lqn5ZOB6K6+6K6hICsgVUnorr7orqHvvIjnvLrlsJHlgZzpob/mo4Dmn6XngrnvvIlcbiAgICog5a6M5pW055qE6K6+6K6h5rWB56iL77ya6aG16Z2i5YiX6KGo5YiG5p6QIOKGkiDpobXpnaLliJfooajkv67lpI0g4oaSIOS6p+WTgemcgOaxguiuvuiuoSDihpIgVUnorr7orqFcbiAgICog5rOo5oSP77ya5q2k5pa55rOV57y65bCR5Lqn5ZOB6K6+6K6h5ZKMVUnorr7orqHkuYvpl7TnmoTlgZzpob/mo4Dmn6XngrnvvIzkuI3mjqjojZDkvb/nlKhcbiAgICovXG4gIGFzeW5jIG9wdGltaXplUGFnZUxpc3RQcm9kdWN0RGVzaWduQW5kVUlQcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHtwYWdlTGlzdFByb21wdDogc3RyaW5nLCBmaXhQYWdlTGlzdFByb21wdDogc3RyaW5nLCBwcm9kdWN0RGVzaWduUHJvbXB0OiBzdHJpbmcsIHVpRGVzaWduUHJvbXB0OiBzdHJpbmd9PiB7XG4gICAgY29uc3QgcGFnZUxpc3RQcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplUGFnZUxpc3RQcm9tcHQodXNlcklucHV0KTtcbiAgICBjb25zdCBmaXhQYWdlTGlzdFByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVGaXhQYWdlTGlzdFByb21wdCh1c2VySW5wdXQsICd7e1BBR0VfTElTVF9SRVNVTFR9fScpO1xuICAgIC8vIOazqOaEj++8muS6p+WTgeiuvuiuoeWSjFVJ6K6+6K6h5bCG5Zyo5L+u5aSN5ZCO55qE6aG16Z2i5YiX6KGo5Z+656GA5LiK6L+b6KGMXG4gICAgY29uc3QgcHJvZHVjdERlc2lnblByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVQcm9kdWN0RGVzaWduUHJvbXB0KHVzZXJJbnB1dCwgJ3t7RklYRURfUEFHRV9MSVNUX1JFU1VMVH19Jyk7XG4gICAgY29uc3QgdWlEZXNpZ25Qcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplVUlEZXNpZ25Qcm9tcHQodXNlcklucHV0LCAne3tGSVhFRF9QQUdFX0xJU1RfUkVTVUxUfX0nKTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZUxpc3RQcm9tcHQsXG4gICAgICBmaXhQYWdlTGlzdFByb21wdCxcbiAgICAgIHByb2R1Y3REZXNpZ25Qcm9tcHQsXG4gICAgICB1aURlc2lnblByb21wdFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog4pqg77iP5LiN5o6o6I2Q77ya6aG16Z2i5YiX6KGoICsg6aG16Z2i5L+u5aSNICsg5Lqn5ZOB6K6+6K6hICsgVUnorr7orqEgKyDku6PnoIHnvJblhpnvvIjnvLrlsJHlgZzpob/mo4Dmn6XngrnvvIlcbiAgICog5a6M5pW055qE5byA5Y+R5rWB56iL77ya6aG16Z2i5YiX6KGo5YiG5p6QIOKGkiDpobXpnaLliJfooajkv67lpI0g4oaSIOS6p+WTgemcgOaxguiuvuiuoSDihpIgVUnorr7orqEg4oaSIOS7o+eggeW8gOWPkVxuICAgKiDms6jmhI/vvJrmraTmlrnms5XnvLrlsJHlpJrkuKrlhbPplK7lgZzpob/mo4Dmn6XngrnvvIzkuI3mjqjojZDkvb/nlKhcbiAgICovXG4gIGFzeW5jIG9wdGltaXplRnVsbFdvcmtmbG93V2l0aFByb2R1Y3REZXNpZ25Qcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHtwYWdlTGlzdFByb21wdDogc3RyaW5nLCBmaXhQYWdlTGlzdFByb21wdDogc3RyaW5nLCBwcm9kdWN0RGVzaWduUHJvbXB0OiBzdHJpbmcsIHVpRGVzaWduUHJvbXB0OiBzdHJpbmcsIGNvZGVQcm9tcHQ6IHN0cmluZ30+IHtcbiAgICBjb25zdCBwYWdlTGlzdFByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVQYWdlTGlzdFByb21wdCh1c2VySW5wdXQpO1xuICAgIGNvbnN0IGZpeFBhZ2VMaXN0UHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZUZpeFBhZ2VMaXN0UHJvbXB0KHVzZXJJbnB1dCwgJ3t7UEFHRV9MSVNUX1JFU1VMVH19Jyk7XG4gICAgLy8g5rOo5oSP77ya5Lqn5ZOB6K6+6K6h5ZKMVUnorr7orqHlsIblnKjkv67lpI3lkI7nmoTpobXpnaLliJfooajln7rnoYDkuIrov5vooYxcbiAgICBjb25zdCBwcm9kdWN0RGVzaWduUHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZVByb2R1Y3REZXNpZ25Qcm9tcHQodXNlcklucHV0LCAne3tGSVhFRF9QQUdFX0xJU1RfUkVTVUxUfX0nKTtcbiAgICBjb25zdCB1aURlc2lnblByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVVSURlc2lnblByb21wdCh1c2VySW5wdXQsICd7e0ZJWEVEX1BBR0VfTElTVF9SRVNVTFR9fScpO1xuICAgIGNvbnN0IGNvZGVQcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplQ29kZVByb21wdCh1c2VySW5wdXQpO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBwYWdlTGlzdFByb21wdCxcbiAgICAgIGZpeFBhZ2VMaXN0UHJvbXB0LFxuICAgICAgcHJvZHVjdERlc2lnblByb21wdCxcbiAgICAgIHVpRGVzaWduUHJvbXB0LFxuICAgICAgY29kZVByb21wdFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog4q2Q5bey5pyJ6ZyA5rGC5rWB56iL77yaVUnorr7orqEgKyDku6PnoIHnvJblhplcbiAgICog5YWI6L+b6KGMVUnorr7orqHvvIznhLblkI7ov5vooYzku6PnoIHlvIDlj5FcbiAgICog8J+bkSDlgZzpob/ngrnvvJpVSeiuvuiuoeWujOaIkOWQjuW/hemhu+WBnOmhv++8jOetieW+heeUqOaIt+ehruiupOWQjuWGjei/m+ihjOS7o+eggeW8gOWPkVxuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVVSURlc2lnbkFuZENvZGVQcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHt1aURlc2lnblByb21wdDogc3RyaW5nLCBjb2RlUHJvbXB0OiBzdHJpbmd9PiB7XG4gICAgY29uc3QgdWlEZXNpZ25Qcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplVUlEZXNpZ25Qcm9tcHQodXNlcklucHV0KTtcbiAgICBjb25zdCBjb2RlUHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZUNvZGVQcm9tcHQodXNlcklucHV0KTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgdWlEZXNpZ25Qcm9tcHQsXG4gICAgICBjb2RlUHJvbXB0XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDirZDlv6vpgJ/mtYHnqIvpmLbmrrXkuIDvvJrpobXpnaLliJfooaggKyDpobXpnaLkv67lpI0gKyBVSeiuvuiuoVxuICAgKiDlhYjliIbmnpDpobXpnaLliJfooajvvIznhLblkI7kv67lpI3pobXpnaLliJfooajvvIzlho3ln7rkuo7kv67lpI3lkI7nmoTpobXpnaLliJfooajov5vooYxVSeiuvuiuoVxuICAgKiDwn5uRIOWBnOmhv+eCue+8mlVJ6K6+6K6h5a6M5oiQ5ZCO5b+F6aG75YGc6aG/77yM562J5b6F55So5oi356Gu6K6k5ZCO5YaN6L+b6KGM5Luj56CB5byA5Y+RXG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZVBhZ2VMaXN0QW5kVUlEZXNpZ25Qcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHtwYWdlTGlzdFByb21wdDogc3RyaW5nLCBmaXhQYWdlTGlzdFByb21wdDogc3RyaW5nLCB1aURlc2lnblByb21wdDogc3RyaW5nfT4ge1xuICAgIGNvbnN0IHBhZ2VMaXN0UHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZVBhZ2VMaXN0UHJvbXB0KHVzZXJJbnB1dCk7XG4gICAgY29uc3QgZml4UGFnZUxpc3RQcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplRml4UGFnZUxpc3RQcm9tcHQodXNlcklucHV0LCAne3tQQUdFX0xJU1RfUkVTVUxUfX0nKTtcbiAgICAvLyDms6jmhI/vvJpVSeiuvuiuoeWwhuWcqOS/ruWkjeWQjueahOmhtemdouWIl+ihqOWfuuehgOS4iui/m+ihjFxuICAgIGNvbnN0IHVpRGVzaWduUHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZVVJRGVzaWduUHJvbXB0KHVzZXJJbnB1dCwgJ3t7RklYRURfUEFHRV9MSVNUX1JFU1VMVH19Jyk7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VMaXN0UHJvbXB0LFxuICAgICAgZml4UGFnZUxpc3RQcm9tcHQsXG4gICAgICB1aURlc2lnblByb21wdFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog4pqg77iP5LiN5o6o6I2Q77ya6aG16Z2i5YiX6KGoICsg6aG16Z2i5L+u5aSNICsgVUnorr7orqEgKyDku6PnoIHnvJblhpnvvIjnvLrlsJHlgZzpob/mo4Dmn6XngrnvvIlcbiAgICog5a6M5pW055qE5bel5L2c5rWB56iL77ya6aG16Z2i5YiX6KGo5YiG5p6QIOKGkiDpobXpnaLliJfooajkv67lpI0g4oaSIFVJ6K6+6K6hIOKGkiDku6PnoIHlvIDlj5FcbiAgICog5rOo5oSP77ya5q2k5pa55rOV57y65bCRVUnorr7orqHlkozku6PnoIHlvIDlj5HkuYvpl7TnmoTlgZzpob/mo4Dmn6XngrnvvIzkuI3mjqjojZDkvb/nlKhcbiAgICovXG4gIGFzeW5jIG9wdGltaXplRnVsbFdvcmtmbG93UHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nKTogUHJvbWlzZTx7cGFnZUxpc3RQcm9tcHQ6IHN0cmluZywgZml4UGFnZUxpc3RQcm9tcHQ6IHN0cmluZywgdWlEZXNpZ25Qcm9tcHQ6IHN0cmluZywgY29kZVByb21wdDogc3RyaW5nfT4ge1xuICAgIGNvbnN0IHBhZ2VMaXN0UHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZVBhZ2VMaXN0UHJvbXB0KHVzZXJJbnB1dCk7XG4gICAgY29uc3QgZml4UGFnZUxpc3RQcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplRml4UGFnZUxpc3RQcm9tcHQodXNlcklucHV0LCAne3tQQUdFX0xJU1RfUkVTVUxUfX0nKTtcbiAgICAvLyDms6jmhI/vvJpVSeiuvuiuoeWwhuWcqOS/ruWkjeWQjueahOmhtemdouWIl+ihqOWfuuehgOS4iui/m+ihjFxuICAgIGNvbnN0IHVpRGVzaWduUHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZVVJRGVzaWduUHJvbXB0KHVzZXJJbnB1dCwgJ3t7RklYRURfUEFHRV9MSVNUX1JFU1VMVH19Jyk7XG4gICAgY29uc3QgY29kZVByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVDb2RlUHJvbXB0KHVzZXJJbnB1dCk7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VMaXN0UHJvbXB0LFxuICAgICAgZml4UGFnZUxpc3RQcm9tcHQsXG4gICAgICB1aURlc2lnblByb21wdCxcbiAgICAgIGNvZGVQcm9tcHRcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIOWfuuS6jumhtemdouWIl+ihqOe7k+aenOeUn+aIkOS6p+WTgemcgOaxguiuvuiuoeaPkOekuuivjVxuICAgKiDmraTmlrnms5XnlKjkuo7lnKjojrflvpfpobXpnaLliJfooajnu5PmnpzlkI7vvIznlJ/miJDljIXlkKvpobXpnaLliJfooajkv6Hmga/nmoTkuqflk4Horr7orqHmj5DnpLror41cbiAgICovXG4gIGFzeW5jIGdlbmVyYXRlUHJvZHVjdERlc2lnblByb21wdFdpdGhQYWdlTGlzdCh1c2VySW5wdXQ6IHN0cmluZywgcGFnZUxpc3RSZXN1bHQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMub3B0aW1pemVQcm9kdWN0RGVzaWduUHJvbXB0KHVzZXJJbnB1dCwgcGFnZUxpc3RSZXN1bHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIOWfuuS6jumhtemdouWIl+ihqOe7k+aenOeUn+aIkFVJ6K6+6K6h5o+Q56S66K+NXG4gICAqIOatpOaWueazleeUqOS6juWcqOiOt+W+l+mhtemdouWIl+ihqOe7k+aenOWQju+8jOeUn+aIkOWMheWQq+mhtemdouWIl+ihqOS/oeaBr+eahFVJ6K6+6K6h5o+Q56S66K+NXG4gICAqL1xuICBhc3luYyBnZW5lcmF0ZVVJRGVzaWduUHJvbXB0V2l0aFBhZ2VMaXN0KHVzZXJJbnB1dDogc3RyaW5nLCBwYWdlTGlzdFJlc3VsdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5vcHRpbWl6ZVVJRGVzaWduUHJvbXB0KHVzZXJJbnB1dCwgcGFnZUxpc3RSZXN1bHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIOWfuuS6juS/ruWkjeWQjueahOmhtemdouWIl+ihqOe7k+aenOeUn+aIkOS6p+WTgemcgOaxguiuvuiuoeaPkOekuuivjVxuICAgKiDmraTmlrnms5XnlKjkuo7lnKjojrflvpfkv67lpI3lkI7nmoTpobXpnaLliJfooajnu5PmnpzlkI7vvIznlJ/miJDljIXlkKvlrozmlbTpobXpnaLliJfooajkv6Hmga/nmoTkuqflk4Horr7orqHmj5DnpLror41cbiAgICovXG4gIGFzeW5jIGdlbmVyYXRlUHJvZHVjdERlc2lnblByb21wdFdpdGhGaXhlZFBhZ2VMaXN0KHVzZXJJbnB1dDogc3RyaW5nLCBmaXhlZFBhZ2VMaXN0UmVzdWx0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLm9wdGltaXplUHJvZHVjdERlc2lnblByb21wdCh1c2VySW5wdXQsIGZpeGVkUGFnZUxpc3RSZXN1bHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIOWfuuS6juS/ruWkjeWQjueahOmhtemdouWIl+ihqOe7k+aenOeUn+aIkFVJ6K6+6K6h5o+Q56S66K+NXG4gICAqIOatpOaWueazleeUqOS6juWcqOiOt+W+l+S/ruWkjeWQjueahOmhtemdouWIl+ihqOe7k+aenOWQju+8jOeUn+aIkOWMheWQq+WujOaVtOmhtemdouWIl+ihqOS/oeaBr+eahFVJ6K6+6K6h5o+Q56S66K+NXG4gICAqL1xuICBhc3luYyBnZW5lcmF0ZVVJRGVzaWduUHJvbXB0V2l0aEZpeGVkUGFnZUxpc3QodXNlcklucHV0OiBzdHJpbmcsIGZpeGVkUGFnZUxpc3RSZXN1bHQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMub3B0aW1pemVVSURlc2lnblByb21wdCh1c2VySW5wdXQsIGZpeGVkUGFnZUxpc3RSZXN1bHQpO1xuICB9XG59ICJdfQ==
|