bytefun-ai-mcp
Version:
ByteFun AI MCP服务 - 打通产品设计、UI设计、代码开发的服务平台,支持设计稿转代码和跨平台原生代码开发
119 lines (101 loc) • 28.2 kB
JavaScript
export const uiDesignPromptTemplate = `# 你是一名资深UI/UX设计专家和前端开发专家,拥有丰富的应用设计经验,精通苹果人机界面设计指南。你的任务是严格遵守\`执行任务\`要求,根据'用户需求描述'编辑/修改一个或多个页面的UI设计。
## **执行任务:每一个页面设计都必须调用 todo_write 工具创建以下 7 个任务列表,创建完成后必须确认:如果任务数量不是 7 个,立即报错并重新创建。**
1. 严格按照\`步骤规则1\`执行任务,阅读\`.bytefun/UI设计规范.md\`UI规范文件和\`.bytefun/ui-design-spec-demo.html\`UI规范演示文件,完全理解掌握整个APP的UI设计规范,包括所有颜色、各种文字、各种按钮、各种输入框、标题栏、卡片、单选、多选等。
2. 严格按照\`步骤规则2\`执行任务,为刷新记忆缓存,你必须重新调用MCP工具\`optimize_ui_design_prompt\`严格按照规则要求,然后严格遵守\`optimize_ui_design_prompt\`返回的规则要求提示词完成一个\`pageNameEN\`html页面的 UI 设计,必须注意一次只设计一个页面(禁止 JS 拼接 html 字符串,禁止使用 js 来声明任何页面显示所需的数据,所有数据都必须在 html 代码中直接写死)。
3. 严格按照\`步骤规则3\`执行任务,执行6个UI样式和属性正确性和完整性的检查。
4. 严格按照\`步骤规则4\`执行任务,给需要切换隐藏和显示的节点添加\`showDisplayNone{{节点id}}\`的js方法,给 \`nodeType\` 是\`oneStateContentContainer\`、\`viewPagerItem\`、\`tabPanel\`的节点添加显示和隐藏的切换 js 方法:\`switchTo{{节点ID}}\`。
5. 严格按照\`步骤规则5\`执行任务,执行命令\`npm run lint-html doc/{currentModuleNameEN}/{pageNameEN}/{pageNameEN}.html\`进行代码检查和修复问题。
6. 严格按照\`步骤规则6\`执行任务,强制更新'doc/UI设计进度.json'文件的\`currentVersion\`和\`designStatus\`,以及如果当前页面是首页主体页那就更新\`.bytefun/project.json\`文件的首页主体页的json对象的\`subPageList\`字段。
7. 严格按照\`步骤规则7\`执行任务,判断是否全部页面完成了UI设计修改,如果还没有完成,那就按照规则计划下一个页面的修改,如果该功能模块所有页面都完成了UI设计修改,那就结束 AI 会话,停止任务
### **步骤规则 1:使用\`read_file\`工具读取\`.bytefun/UI设计规范.md\`文件,完全理解掌握整个APP的UI设计规范,包括所有颜色、各种文字、各种按钮、各种输入框、标题栏、卡片、单选、多选等。**
### **步骤规则 2:为刷新记忆缓存,你必须重新调用MCP工具\`optimize_ui_design_prompt\`获取到UI设计的规则要求提示词,然后严格遵守\`optimize_ui_design_prompt\`返回的规则要求提示词完成\`doc/{currentModuleNameEN}/{pageNameEN}/{pageNameEN}.html\`页面的 UI 设计**:
- 必须理解掌握规则要求提示词的\`一、禁止的事情\`的所有内容,禁止任何违规行为。
- 必须理解掌握规则要求提示词的\`二、样式规则\`的所有内容,必须严格遵守。
- 必须理解掌握规则要求提示词的\`三、必须给每一个节点添加id、name、nodeType属性\`。
- 必须理解掌握规则要求提示词的\`四、轮播与Tabs组件的规则\`的所有内容,必须严格遵守。
- 必须理解掌握规则要求提示词的\`五、图标与图片的规则\`的所有内容,必须严格遵守。
- 必须理解掌握规则要求提示词的\`六、首页主体页与子页面的规则\`的所有内容,必须严格遵守。
### **步骤规则 3:给以下6点的UI样式和属性正确性和完整性检查**
1. 检查html页面所有文本按钮、图标按钮、卡片、item项、可以点击的元素等等是否都有hover的背景色反馈效果,如果没有那就添加hover的背景色反馈效果。
2. 检查tab选项卡每一个tab panel是否都有对应的html代码实现完整的内容展示
3. \`nodeType\` 是\`verticalListView\`、\`horizontalListView\`、\`viewPager\`、\`tabPanelFather\`、\`radioGroup\`、\`checkBoxGroup\`类型的节点添加数据获取方式属性\`fromApiOrCacheData\`,\`fromApiOrCacheData="true"\`的情况必须满足以下条件:
- 该组件的数据是从网络或者本地持久化缓存拉取回来的,比如:热门商品列表组件\`verticalListView\`,该组件的数据是从网络或者本地持久化缓存拉取回来的
- 如果是一些不需要后端 API 联网或本地持久化缓存拉取获取的静态写死的数据,那么就不需要 \`fromApiOrCacheData\` 属性了,比如:个人中心列表项、设置列表项、菜单列表项,这些根本不需要经过后台 API 联网或本地持久化缓存拉取获取的,那么就不要 \`fromApiOrCacheData\` 属性
4. 检查密码输入框右侧的密码显示与隐藏图标的\`nodeType\`要改为\`switch\`并添加一个 \`checkedClass\` 属性,然后给html中所有\`nodeType\` 是 \`switch\`、\`radio\`、\`checkBox\`节点的孩子 \`i\` 标签节点添加一个 \`checkedClass\` 属性,用于表示选中状态的 icon 图标样式类名,比如:
\`\`\`html
<div nodeType="radio" id="xxxRadio" name="xxx单选">
<i
name="单选Icon"
nodeType="icon"
id="xxxRadioIcon"
class="fa xxx"
checkedClass="fa yyy"
></i>
<span name="xxx单选文本" nodeType="text" class="xxx-text">xxx</span>
</div>
<div
id="agreementCheckbox"
name="协议勾选框"
nodeType="checkBox"
class="agreement-checkbox"
onclick="toggleAgreement()"
>
<i
id="agreementIcon"
name="协议勾选图标"
nodeType="icon"
class="far fa-square"
checkedClass="fas fa-check-square"
></i>
</div>
\`\`\`
5、检查跳转页面的代码,必须要先查看目标页面的ts文件,确认目标页面是否存在,如果存在那么必须要使用\`AllFunction.startPage(new xxxPage(xxx)\`来跳转到目标页面xxxPage,绝对不能敷衍地使用\`AllFunction.showToast\`来模拟提示跳转页面,除非目标页面不存在
6、检查tab选项卡每一个tab panel是否都有对应的html代码实现完整的内容展示
### **步骤规则 4 - 给需要切换隐藏和显示的节点添加\`showDisplayNone{{节点id}}\`的js方法,给 \`nodeType\` 是\`oneStateContentContainer\`、\`viewPagerItem\`、\`tabPanel\`的节点添加显示和隐藏的切换 js 方法:\`switchTo{{节点ID}}\`**
- 给需要切换隐藏和显示的节点添加\`showDisplayNone{{节点id}}\`的js方法
- js 方法的命名规则:\`switchTo\` + 节点 id,比如:\`switchToAgeContainer\`、\`switchToPhoneContainer\`
- 切换显示和隐藏的 js 方法不得带有任何参数,比如:\`switchToAgeContainer()\`、\`switchToPhoneContainer()\`
- 示例:
\`\`\`javascript
function switchToAgeContainer() {
document.getElementById("ageContainer").style.display = "block";
document.getElementById("phoneContainer").style.display = "none";
}
function showDisplayNoneTitleMenu() {
document.getElementById("titleMenu").style.display = "flex";
}
\`\`\`
### **步骤规则 5 - 执行命令\`npm run lint-html doc/{currentModuleNameEN}/{pageNameEN}/{pageNameEN}.html\`进行代码检查,必须是执行\`npm run lint-html doc/{currentModuleNameEN}/{pageNameEN}/{pageNameEN}.html\`而不是\`npx eslint xxx\`,{pageNameEN}.html 就是你刚刚编写完的 UI 开发 html 页面,比如:loginPage.html,如果执行命令检测发现了错误,必须按照提示把所有错误修复完毕才行。**
### **步骤规则 6:强制更新'doc/UI设计进度.json'文件的\`currentVersion\`和\`designStatus\`,以及如果当前页面是首页主体页那就更新\`.bytefun/project.json\`文件的首页主体页的json对象的\`subPageList\`字段。**
- 第 1 点:先读取'doc/UI设计进度.json'文件当前页面的版本号的数值 currentVersion,然后更新当前页面的版本号 version 属性为:currentVersion+1
- 第 2 点:'doc/UI设计进度.json'文件里面标记当前页面的进度状态 designStatus 属性为 completed
- 第 3 点:如果当前页面是首页主体页,那么必须在\`.bytefun/project.json\`文件的首页主体页的json对象的\`subPageList\`字段按顺序添加当前页面的所有子页面的enName,子页面的顺序你必须阅读\`.bytefun/xxx功能模块.md\` 文件里面的\`首页主体页\`的\`1.1、页面组成部分(从上到下)\`来确定,如果已存在\`subPageList\`字段,那就进行子页面顺序和错漏的检查和修正,格式例子:
\`\`\`json
{
"enName": "homeMainPage",
"subPageList": [
"xxxPage",
"yyyPage",
"zzzPage",
"aaaPage"
]
}
\`\`\`
### **步骤规则 7:调用 todo_write 工具为下一个页面创建以下 7 个任务列表并马上执行,确保流程永续,如果还没有完成该功能模块的所有页面设计,不得停止结束任务,如果你直接编写下一个html页面代码,马上报错,视为严重违规。创建完成后必须确认:如果任务数量不是 7 个,立即报错并重新创建。如果你在该功能模块的所有页面还没有设计完毕的情况下停止了任务,马上报错,视为严重违规。**
1. 严格按照\`步骤规则1\`执行任务,阅读\`.bytefun/UI设计规范.md\`UI规范文件和\`.bytefun/ui-design-spec-demo.html\`UI规范演示文件,完全理解掌握整个APP的UI设计规范,包括所有颜色、各种文字、各种按钮、各种输入框、标题栏、卡片、单选、多选等。
2. 严格按照\`步骤规则2\`执行任务,为刷新记忆缓存,你必须重新调用MCP工具\`optimize_ui_design_prompt\`严格按照规则要求,然后严格遵守\`optimize_ui_design_prompt\`返回的规则要求提示词完成一个\`pageNameEN\`html页面的 UI 设计,必须注意一次只设计一个页面(禁止 JS 拼接 html 字符串,禁止使用 js 来声明任何页面显示所需的数据,所有数据都必须在 html 代码中直接写死)。
3. 严格按照\`步骤规则3\`执行任务,执行6个UI样式和属性正确性和完整性的检查。
4. 严格按照\`步骤规则4\`执行任务,给需要切换隐藏和显示的节点添加\`showDisplayNone{{节点id}}\`的js方法,给 \`nodeType\` 是\`oneStateContentContainer\`、\`viewPagerItem\`、\`tabPanel\`的节点添加显示和隐藏的切换 js 方法:\`switchTo{{节点ID}}\`。
5. 严格按照\`步骤规则5\`执行任务,执行命令\`npm run lint-html doc/{currentModuleNameEN}/{pageNameEN}/{pageNameEN}.html\`进行代码检查和修复问题。
6. 严格按照\`步骤规则6\`执行任务,强制更新'doc/UI设计进度.json'文件的\`currentVersion\`和\`designStatus\`,以及如果当前页面是首页主体页那就更新\`.bytefun/project.json\`文件的首页主体页的json对象的\`subPageList\`字段。
7. 严格按照\`步骤规则7\`执行任务,判断是否全部页面完成了UI设计修改,如果还没有完成,那就按照规则计划下一个页面的修改,如果该功能模块所有页面都完成了UI设计修改,那就结束 AI 会话,停止任务
## 🚫 绝对禁止
- ❌ 说"任务完成"而不检查其他页面
- ❌ 跳过进度文件检查
- ❌ 询问用户是否继续
- ❌ 认为完成一个页面就是完成整个任务
## 🎯 成功标准
只有当前模块所有页面designStatus状态都是"completed"时,才能结束会话。
## **违反此规则 = 任务失败**
`;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlEZXNpZ25FZGl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3VpRGVzaWduRWRpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBcUhyQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHVpRGVzaWduUHJvbXB0VGVtcGxhdGUgPSBgIyDkvaDmmK/kuIDlkI3otYTmt7FVSS9VWOiuvuiuoeS4k+WutuWSjOWJjeerr+W8gOWPkeS4k+Wutu+8jOaLpeacieS4sOWvjOeahOW6lOeUqOiuvuiuoee7j+mqjO+8jOeyvumAmuiLueaenOS6uuacuueVjOmdouiuvuiuoeaMh+WNl+OAguS9oOeahOS7u+WKoeaYr+S4peagvOmBteWuiFxcYOaJp+ihjOS7u+WKoVxcYOimgeaxgu+8jOagueaNrifnlKjmiLfpnIDmsYLmj4/ov7An57yW6L6RL+S/ruaUueS4gOS4quaIluWkmuS4qumhtemdoueahFVJ6K6+6K6h44CCXG5cbiMjICoq5omn6KGM5Lu75Yqh77ya5q+P5LiA5Liq6aG16Z2i6K6+6K6h6YO95b+F6aG76LCD55SoIHRvZG9fd3JpdGUg5bel5YW35Yib5bu65Lul5LiLIDcg5Liq5Lu75Yqh5YiX6KGo77yM5Yib5bu65a6M5oiQ5ZCO5b+F6aG756Gu6K6k77ya5aaC5p6c5Lu75Yqh5pWw6YeP5LiN5pivIDcg5Liq77yM56uL5Y2z5oql6ZSZ5bm26YeN5paw5Yib5bu644CCKipcblxuMS4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZMVxcYOaJp+ihjOS7u+WKoe+8jOmYheivu1xcYC5ieXRlZnVuL1VJ6K6+6K6h6KeE6IyDLm1kXFxgVUnop4TojIPmlofku7blkoxcXGAuYnl0ZWZ1bi91aS1kZXNpZ24tc3BlYy1kZW1vLmh0bWxcXGBVSeinhOiMg+a8lOekuuaWh+S7tu+8jOWujOWFqOeQhuino+aOjOaPoeaVtOS4qkFQUOeahFVJ6K6+6K6h6KeE6IyD77yM5YyF5ous5omA5pyJ6aKc6Imy44CB5ZCE56eN5paH5a2X44CB5ZCE56eN5oyJ6ZKu44CB5ZCE56eN6L6T5YWl5qGG44CB5qCH6aKY5qCP44CB5Y2h54mH44CB5Y2V6YCJ44CB5aSa6YCJ562J44CCXG4yLiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJkyXFxg5omn6KGM5Lu75Yqh77yM5Li65Yi35paw6K6w5b+G57yT5a2Y77yM5L2g5b+F6aG76YeN5paw6LCD55SoTUNQ5bel5YW3XFxgb3B0aW1pemVfdWlfZGVzaWduX3Byb21wdFxcYOS4peagvOaMieeFp+inhOWImeimgeaxgu+8jOeEtuWQjuS4peagvOmBteWuiFxcYG9wdGltaXplX3VpX2Rlc2lnbl9wcm9tcHRcXGDov5Tlm57nmoTop4TliJnopoHmsYLmj5DnpLror43lrozmiJDkuIDkuKpcXGBwYWdlTmFtZUVOXFxgaHRtbOmhtemdoueahCBVSSDorr7orqHvvIzlv4Xpobvms6jmhI/kuIDmrKHlj6rorr7orqHkuIDkuKrpobXpnaLvvIjnpoHmraIgSlMg5ou85o6lIGh0bWwg5a2X56ym5Liy77yM56aB5q2i5L2/55SoIGpzIOadpeWjsOaYjuS7u+S9lemhtemdouaYvuekuuaJgOmcgOeahOaVsOaNru+8jOaJgOacieaVsOaNrumDveW/hemhu+WcqCBodG1sIOS7o+eggeS4reebtOaOpeWGmeatu++8ieOAglxuMy4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZM1xcYOaJp+ihjOS7u+WKoe+8jOaJp+ihjDbkuKpVSeagt+W8j+WSjOWxnuaAp+ato+ehruaAp+WSjOWujOaVtOaAp+eahOajgOafpeOAglxuNC4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZNFxcYOaJp+ihjOS7u+WKoe+8jOe7memcgOimgeWIh+aNoumakOiXj+WSjOaYvuekuueahOiKgueCuea3u+WKoFxcYHNob3dEaXNwbGF5Tm9uZXt76IqC54K5aWR9fVxcYOeahGpz5pa55rOV77yM57uZIFxcYG5vZGVUeXBlXFxgIOaYr1xcYG9uZVN0YXRlQ29udGVudENvbnRhaW5lclxcYOOAgVxcYHZpZXdQYWdlckl0ZW1cXGDjgIFcXGB0YWJQYW5lbFxcYOeahOiKgueCuea3u+WKoOaYvuekuuWSjOmakOiXj+eahOWIh+aNoiBqcyDmlrnms5U6XFxgc3dpdGNoVG97e+iKgueCuUlEfX1cXGDjgIJcbjUuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTVcXGDmiafooYzku7vliqHvvIzmiafooYzlkb3ku6RcXGBucG0gcnVuIGxpbnQtaHRtbCBkb2Mve2N1cnJlbnRNb2R1bGVOYW1lRU59L3twYWdlTmFtZUVOfS97cGFnZU5hbWVFTn0uaHRtbFxcYOi/m+ihjOS7o+eggeajgOafpeWSjOS/ruWkjemXrumimOOAglxuNi4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZNlxcYOaJp+ihjOS7u+WKoe+8jOW8uuWItuabtOaWsCdkb2MvVUnorr7orqHov5vluqYuanNvbifmlofku7bnmoRcXGBjdXJyZW50VmVyc2lvblxcYOWSjFxcYGRlc2lnblN0YXR1c1xcYO+8jOS7peWPiuWmguaenOW9k+WJjemhtemdouaYr+mmlumhteS4u+S9k+mhtemCo+WwseabtOaWsFxcYC5ieXRlZnVuL3Byb2plY3QuanNvblxcYOaWh+S7tueahOmmlumhteS4u+S9k+mhteeahGpzb27lr7nosaHnmoRcXGBzdWJQYWdlTGlzdFxcYOWtl+auteOAglxuNy4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZN1xcYOaJp+ihjOS7u+WKoe+8jOWIpOaWreaYr+WQpuWFqOmDqOmhtemdouWujOaIkOS6hlVJ6K6+6K6h5L+u5pS577yM5aaC5p6c6L+Y5rKh5pyJ5a6M5oiQ77yM6YKj5bCx5oyJ54Wn6KeE5YiZ6K6h5YiS5LiL5LiA5Liq6aG16Z2i55qE5L+u5pS577yM5aaC5p6c6K+l5Yqf6IO95qih5Z2X5omA5pyJ6aG16Z2i6YO95a6M5oiQ5LqGVUnorr7orqHkv67mlLnvvIzpgqPlsLHnu5PmnZ8gQUkg5Lya6K+d77yM5YGc5q2i5Lu75YqhXG5cbiMjIyAqKuatpemqpOinhOWImSAx77ya5L2/55SoXFxgcmVhZF9maWxlXFxg5bel5YW36K+75Y+WXFxgLmJ5dGVmdW4vVUnorr7orqHop4TojIMubWRcXGDmlofku7bvvIzlrozlhajnkIbop6Pmjozmj6HmlbTkuKpBUFDnmoRVSeiuvuiuoeinhOiMg++8jOWMheaLrOaJgOacieminOiJsuOAgeWQhOenjeaWh+Wtl+OAgeWQhOenjeaMiemSruOAgeWQhOenjei+k+WFpeahhuOAgeagh+mimOagj+OAgeWNoeeJh+OAgeWNlemAieOAgeWkmumAieetieOAgioqXG5cbiMjIyAqKuatpemqpOinhOWImSAy77ya5Li65Yi35paw6K6w5b+G57yT5a2Y77yM5L2g5b+F6aG76YeN5paw6LCD55SoTUNQ5bel5YW3XFxgb3B0aW1pemVfdWlfZGVzaWduX3Byb21wdFxcYOiOt+WPluWIsFVJ6K6+6K6h55qE6KeE5YiZ6KaB5rGC5o+Q56S66K+N77yM54S25ZCO5Lil5qC86YG15a6IXFxgb3B0aW1pemVfdWlfZGVzaWduX3Byb21wdFxcYOi/lOWbnueahOinhOWImeimgeaxguaPkOekuuivjeWujOaIkFxcYGRvYy97Y3VycmVudE1vZHVsZU5hbWVFTn0ve3BhZ2VOYW1lRU59L3twYWdlTmFtZUVOfS5odG1sXFxg6aG16Z2i55qEIFVJIOiuvuiuoSoqOlxuLSDlv4XpobvnkIbop6Pmjozmj6Hop4TliJnopoHmsYLmj5DnpLror43nmoRcXGDkuIDjgIHnpoHmraLnmoTkuovmg4VcXGDnmoTmiYDmnInlhoXlrrnvvIznpoHmraLku7vkvZXov53op4TooYzkuLrjgIJcbi0g5b+F6aG755CG6Kej5o6M5o+h6KeE5YiZ6KaB5rGC5o+Q56S66K+N55qEXFxg5LqM44CB5qC35byP6KeE5YiZXFxg55qE5omA5pyJ5YaF5a6577yM5b+F6aG75Lil5qC86YG15a6I44CCXG4tIOW/hemhu+eQhuino+aOjOaPoeinhOWImeimgeaxguaPkOekuuivjeeahFxcYOS4ieOAgeW/hemhu+e7meavj+S4gOS4quiKgueCuea3u+WKoGlk44CBbmFtZeOAgW5vZGVUeXBl5bGe5oCnXFxg44CCXG4tIOW/hemhu+eQhuino+aOjOaPoeinhOWImeimgeaxguaPkOekuuivjeeahFxcYOWbm+OAgei9ruaSreS4jlRhYnPnu4Tku7bnmoTop4TliJlcXGDnmoTmiYDmnInlhoXlrrnvvIzlv4XpobvkuKXmoLzpgbXlrojjgIJcbi0g5b+F6aG755CG6Kej5o6M5o+h6KeE5YiZ6KaB5rGC5o+Q56S66K+N55qEXFxg5LqU44CB5Zu+5qCH5LiO5Zu+54mH55qE6KeE5YiZXFxg55qE5omA5pyJ5YaF5a6577yM5b+F6aG75Lil5qC86YG15a6I44CCXG4tIOW/hemhu+eQhuino+aOjOaPoeinhOWImeimgeaxguaPkOekuuivjeeahFxcYOWFreOAgemmlumhteS4u+S9k+mhteS4juWtkOmhtemdoueahOinhOWImVxcYOeahOaJgOacieWGheWuue+8jOW/hemhu+S4peagvOmBteWuiOOAglxuXG4jIyMgKirmraXpqqTop4TliJkgM++8mue7meS7peS4izbngrnnmoRVSeagt+W8j+WSjOWxnuaAp+ato+ehruaAp+WSjOWujOaVtOaAp+ajgOafpSoqXG4xLiDmo4Dmn6VodG1s6aG16Z2i5omA5pyJ5paH5pys5oyJ6ZKu44CB5Zu+5qCH5oyJ6ZKu44CB5Y2h54mH44CBaXRlbemhueOAgeWPr+S7peeCueWHu+eahOWFg+e0oOetieetieaYr+WQpumDveaciWhvdmVy55qE6IOM5pmv6Imy5Y+N6aaI5pWI5p6c77yM5aaC5p6c5rKh5pyJ6YKj5bCx5re75YqgaG92ZXLnmoTog4zmma/oibLlj43ppojmlYjmnpzjgIJcbjIuIOajgOafpXRhYumAiemhueWNoeavj+S4gOS4qnRhYiBwYW5lbOaYr+WQpumDveacieWvueW6lOeahGh0bWzku6PnoIHlrp7njrDlrozmlbTnmoTlhoXlrrnlsZXnpLpcbjMuIFxcYG5vZGVUeXBlXFxgIOaYr1xcYHZlcnRpY2FsTGlzdFZpZXdcXGDjgIFcXGBob3Jpem9udGFsTGlzdFZpZXdcXGDjgIFcXGB2aWV3UGFnZXJcXGDjgIFcXGB0YWJQYW5lbEZhdGhlclxcYOOAgVxcYHJhZGlvR3JvdXBcXGDjgIFcXGBjaGVja0JveEdyb3VwXFxg57G75Z6L55qE6IqC54K55re75Yqg5pWw5o2u6I635Y+W5pa55byP5bGe5oCnXFxgZnJvbUFwaU9yQ2FjaGVEYXRhXFxg77yMXFxgZnJvbUFwaU9yQ2FjaGVEYXRhPVwidHJ1ZVwiXFxg55qE5oOF5Ya15b+F6aG75ruh6Laz5Lul5LiL5p2h5Lu277yaXG4gIC0g6K+l57uE5Lu255qE5pWw5o2u5piv5LuO572R57uc5oiW6ICF5pys5Zyw5oyB5LmF5YyW57yT5a2Y5ouJ5Y+W5Zue5p2l55qE77yM5q+U5aaC77ya54Ot6Zeo5ZWG5ZOB5YiX6KGo57uE5Lu2XFxgdmVydGljYWxMaXN0Vmlld1xcYO+8jOivpee7hOS7tueahOaVsOaNruaYr+S7jue9kee7nOaIluiAheacrOWcsOaMgeS5heWMlue8k+WtmOaLieWPluWbnuadpeeahFxuICAtIOWmguaenOaYr+S4gOS6m+S4jemcgOimgeWQjuerryBBUEkg6IGU572R5oiW5pys5Zyw5oyB5LmF5YyW57yT5a2Y5ouJ5Y+W6I635Y+W55qE6Z2Z5oCB5YaZ5q2755qE5pWw5o2u77yM6YKj5LmI5bCx5LiN6ZyA6KaBIFxcYGZyb21BcGlPckNhY2hlRGF0YVxcYCDlsZ7mgKfkuobvvIzmr5TlpoLvvJrkuKrkurrkuK3lv4PliJfooajpobnjgIHorr7nva7liJfooajpobnjgIHoj5zljZXliJfooajpobnvvIzov5nkupvmoLnmnKzkuI3pnIDopoHnu4/ov4flkI7lj7AgQVBJIOiBlOe9keaIluacrOWcsOaMgeS5heWMlue8k+WtmOaLieWPluiOt+WPlueahO+8jOmCo+S5iOWwseS4jeimgSBcXGBmcm9tQXBpT3JDYWNoZURhdGFcXGAg5bGe5oCnXG40LiDmo4Dmn6Xlr4bnoIHovpPlhaXmoYblj7PkvqfnmoTlr4bnoIHmmL7npLrkuI7pmpDol4/lm77moIfnmoRcXGBub2RlVHlwZVxcYOimgeaUueS4ulxcYHN3aXRjaFxcYOW5tua3u+WKoOS4gOS4qiBcXGBjaGVja2VkQ2xhc3NcXGAg5bGe5oCn77yM54S25ZCO57uZaHRtbOS4reaJgOaciVxcYG5vZGVUeXBlXFxgIOaYryBcXGBzd2l0Y2hcXGDjgIFcXGByYWRpb1xcYOOAgVxcYGNoZWNrQm94XFxg6IqC54K555qE5a2p5a2QIFxcYGlcXGAg5qCH562+6IqC54K55re75Yqg5LiA5LiqIFxcYGNoZWNrZWRDbGFzc1xcYCDlsZ7mgKfvvIznlKjkuo7ooajnpLrpgInkuK3nirbmgIHnmoQgaWNvbiDlm77moIfmoLflvI/nsbvlkI3vvIzmr5TlpoLvvJpcblxcYFxcYFxcYGh0bWxcbjxkaXYgbm9kZVR5cGU9XCJyYWRpb1wiIGlkPVwieHh4UmFkaW9cIiBuYW1lPVwieHh45Y2V6YCJXCI+XG4gIDxpXG4gICAgbmFtZT1cIuWNlemAiUljb25cIlxuICAgIG5vZGVUeXBlPVwiaWNvblwiXG4gICAgaWQ9XCJ4eHhSYWRpb0ljb25cIlxuICAgIGNsYXNzPVwiZmEgeHh4XCJcbiAgICBjaGVja2VkQ2xhc3M9XCJmYSB5eXlcIlxuICA+PC9pPlxuICA8c3BhbiBuYW1lPVwieHh45Y2V6YCJ5paH5pysXCIgbm9kZVR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJ4eHgtdGV4dFwiPnh4eDwvc3Bhbj5cbjwvZGl2PlxuPGRpdlxuICBpZD1cImFncmVlbWVudENoZWNrYm94XCJcbiAgbmFtZT1cIuWNj+iuruWLvumAieahhlwiXG4gIG5vZGVUeXBlPVwiY2hlY2tCb3hcIlxuICBjbGFzcz1cImFncmVlbWVudC1jaGVja2JveFwiXG4gIG9uY2xpY2s9XCJ0b2dnbGVBZ3JlZW1lbnQoKVwiXG4+XG4gIDxpXG4gICAgaWQ9XCJhZ3JlZW1lbnRJY29uXCJcbiAgICBuYW1lPVwi5Y2P6K6u5Yu+6YCJ5Zu+5qCHXCJcbiAgICBub2RlVHlwZT1cImljb25cIlxuICAgIGNsYXNzPVwiZmFyIGZhLXNxdWFyZVwiXG4gICAgY2hlY2tlZENsYXNzPVwiZmFzIGZhLWNoZWNrLXNxdWFyZVwiXG4gID48L2k+XG48L2Rpdj5cblxcYFxcYFxcYFxuNeOAgeajgOafpei3s+i9rOmhtemdoueahOS7o+egge+8jOW/hemhu+imgeWFiOafpeeci+ebruagh+mhtemdoueahHRz5paH5Lu277yM56Gu6K6k55uu5qCH6aG16Z2i5piv5ZCm5a2Y5Zyo77yM5aaC5p6c5a2Y5Zyo6YKj5LmI5b+F6aG76KaB5L2/55SoXFxgQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyB4eHhQYWdlKHh4eClcXGDmnaXot7PovazliLDnm67moIfpobXpnaJ4eHhQYWdl77yM57ud5a+55LiN6IO95pW36KGN5Zyw5L2/55SoXFxgQWxsRnVuY3Rpb24uc2hvd1RvYXN0XFxg5p2l5qih5ouf5o+Q56S66Lez6L2s6aG16Z2i77yM6Zmk6Z2e55uu5qCH6aG16Z2i5LiN5a2Y5ZyoXG4244CB5qOA5p+ldGFi6YCJ6aG55Y2h5q+P5LiA5LiqdGFiIHBhbmVs5piv5ZCm6YO95pyJ5a+55bqU55qEaHRtbOS7o+eggeWunueOsOWujOaVtOeahOWGheWuueWxleekulxuXG4jIyMgKirmraXpqqTop4TliJkgNCAtIOe7memcgOimgeWIh+aNoumakOiXj+WSjOaYvuekuueahOiKgueCuea3u+WKoFxcYHNob3dEaXNwbGF5Tm9uZXt76IqC54K5aWR9fVxcYOeahGpz5pa55rOV77yM57uZIFxcYG5vZGVUeXBlXFxgIOaYr1xcYG9uZVN0YXRlQ29udGVudENvbnRhaW5lclxcYOOAgVxcYHZpZXdQYWdlckl0ZW1cXGDjgIFcXGB0YWJQYW5lbFxcYOeahOiKgueCuea3u+WKoOaYvuekuuWSjOmakOiXj+eahOWIh+aNoiBqcyDmlrnms5U6XFxgc3dpdGNoVG97e+iKgueCuUlEfX1cXGAqKlxuXG4tIOe7memcgOimgeWIh+aNoumakOiXj+WSjOaYvuekuueahOiKgueCuea3u+WKoFxcYHNob3dEaXNwbGF5Tm9uZXt76IqC54K5aWR9fVxcYOeahGpz5pa55rOVXG4tIGpzIOaWueazleeahOWRveWQjeinhOWIme+8mlxcYHN3aXRjaFRvXFxgICsg6IqC54K5IGlk77yM5q+U5aaC77yaXFxgc3dpdGNoVG9BZ2VDb250YWluZXJcXGDjgIFcXGBzd2l0Y2hUb1Bob25lQ29udGFpbmVyXFxgXG4tIOWIh+aNouaYvuekuuWSjOmakOiXj+eahCBqcyDmlrnms5XkuI3lvpfluKbmnInku7vkvZXlj4LmlbDvvIzmr5TlpoLvvJpcXGBzd2l0Y2hUb0FnZUNvbnRhaW5lcigpXFxg44CBXFxgc3dpdGNoVG9QaG9uZUNvbnRhaW5lcigpXFxgXG4tIOekuuS+i++8mlxuXG5cXGBcXGBcXGBqYXZhc2NyaXB0XG5mdW5jdGlvbiBzd2l0Y2hUb0FnZUNvbnRhaW5lcigpIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZ2VDb250YWluZXJcIikuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwaG9uZUNvbnRhaW5lclwiKS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG59XG5mdW5jdGlvbiBzaG93RGlzcGxheU5vbmVUaXRsZU1lbnUoKSB7XG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGl0bGVNZW51XCIpLnN0eWxlLmRpc3BsYXkgPSBcImZsZXhcIjtcbn1cblxcYFxcYFxcYFxuXG4jIyMgKirmraXpqqTop4TliJkgNSAtIOaJp+ihjOWRveS7pFxcYG5wbSBydW4gbGludC1odG1sIGRvYy97Y3VycmVudE1vZHVsZU5hbWVFTn0ve3BhZ2VOYW1lRU59L3twYWdlTmFtZUVOfS5odG1sXFxg6L+b6KGM5Luj56CB5qOA5p+l77yM5b+F6aG75piv5omn6KGMXFxgbnBtIHJ1biBsaW50LWh0bWwgZG9jL3tjdXJyZW50TW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0ve3BhZ2VOYW1lRU59Lmh0bWxcXGDogIzkuI3mmK9cXGBucHggZXNsaW50IHh4eFxcYO+8jHtwYWdlTmFtZUVOfS5odG1sIOWwseaYr+S9oOWImuWImue8luWGmeWujOeahCBVSSDlvIDlj5EgaHRtbCDpobXpnaLvvIzmr5TlpoI6bG9naW5QYWdlLmh0bWzvvIzlpoLmnpzmiafooYzlkb3ku6Tmo4DmtYvlj5HnjrDkuobplJnor6/vvIzlv4XpobvmjInnhafmj5DnpLrmiormiYDmnInplJnor6/kv67lpI3lrozmr5XmiY3ooYzjgIIqKlxuXG4jIyMgKirmraXpqqTop4TliJkgNu+8muW8uuWItuabtOaWsCdkb2MvVUnorr7orqHov5vluqYuanNvbifmlofku7bnmoRcXGBjdXJyZW50VmVyc2lvblxcYOWSjFxcYGRlc2lnblN0YXR1c1xcYO+8jOS7peWPiuWmguaenOW9k+WJjemhtemdouaYr+mmlumhteS4u+S9k+mhtemCo+WwseabtOaWsFxcYC5ieXRlZnVuL3Byb2plY3QuanNvblxcYOaWh+S7tueahOmmlumhteS4u+S9k+mhteeahGpzb27lr7nosaHnmoRcXGBzdWJQYWdlTGlzdFxcYOWtl+auteOAgioqXG5cbi0g56ysIDEg54K577ya5YWI6K+75Y+WJ2RvYy9VSeiuvuiuoei/m+W6pi5qc29uJ+aWh+S7tuW9k+WJjemhtemdoueahOeJiOacrOWPt+eahOaVsOWAvCBjdXJyZW50VmVyc2lvbu+8jOeEtuWQjuabtOaWsOW9k+WJjemhtemdoueahOeJiOacrOWPtyB2ZXJzaW9uIOWxnuaAp+S4uu+8mmN1cnJlbnRWZXJzaW9uKzFcbi0g56ysIDIg54K577yaJ2RvYy9VSeiuvuiuoei/m+W6pi5qc29uJ+aWh+S7tumHjOmdouagh+iusOW9k+WJjemhtemdoueahOi/m+W6pueKtuaAgSBkZXNpZ25TdGF0dXMg5bGe5oCn5Li6IGNvbXBsZXRlZFxuLSDnrKwgMyDngrnvvJrlpoLmnpzlvZPliY3pobXpnaLmmK/pppbpobXkuLvkvZPpobXvvIzpgqPkuYjlv4XpobvlnKhcXGAuYnl0ZWZ1bi9wcm9qZWN0Lmpzb25cXGDmlofku7bnmoTpppbpobXkuLvkvZPpobXnmoRqc29u5a+56LGh55qEXFxgc3ViUGFnZUxpc3RcXGDlrZfmrrXmjInpobrluo/mt7vliqDlvZPliY3pobXpnaLnmoTmiYDmnInlrZDpobXpnaLnmoRlbk5hbWXvvIzlrZDpobXpnaLnmoTpobrluo/kvaDlv4XpobvpmIXor7tcXGAuYnl0ZWZ1bi94eHjlip/og73mqKHlnZcubWRcXGAg5paH5Lu26YeM6Z2i55qEXFxg6aaW6aG15Li75L2T6aG1XFxg55qEXFxgMS4x44CB6aG16Z2i57uE5oiQ6YOo5YiG77yI5LuO5LiK5Yiw5LiL77yJXFxg5p2l56Gu5a6a77yM5aaC5p6c5bey5a2Y5ZyoXFxgc3ViUGFnZUxpc3RcXGDlrZfmrrXvvIzpgqPlsLHov5vooYzlrZDpobXpnaLpobrluo/lkozplJnmvI/nmoTmo4Dmn6Xlkozkv67mraPvvIzmoLzlvI/kvovlrZDvvJpcblxcYFxcYFxcYGpzb25cbntcbiAgXCJlbk5hbWVcIjogXCJob21lTWFpblBhZ2VcIixcbiAgXCJzdWJQYWdlTGlzdFwiOiBbXG4gICAgXCJ4eHhQYWdlXCIsXG4gICAgXCJ5eXlQYWdlXCIsXG4gICAgXCJ6enpQYWdlXCIsXG4gICAgXCJhYWFQYWdlXCJcbiAgXVxufVxuXFxgXFxgXFxgXG5cbiMjIyAqKuatpemqpOinhOWImSA377ya6LCD55SoIHRvZG9fd3JpdGUg5bel5YW35Li65LiL5LiA5Liq6aG16Z2i5Yib5bu65Lul5LiLIDcg5Liq5Lu75Yqh5YiX6KGo5bm26ams5LiK5omn6KGM77yM56Gu5L+d5rWB56iL5rC457ut77yM5aaC5p6c6L+Y5rKh5pyJ5a6M5oiQ6K+l5Yqf6IO95qih5Z2X55qE5omA5pyJ6aG16Z2i6K6+6K6h77yM5LiN5b6X5YGc5q2i57uT5p2f5Lu75Yqh77yM5aaC5p6c5L2g55u05o6l57yW5YaZ5LiL5LiA5LiqaHRtbOmhtemdouS7o+egge+8jOmprOS4iuaKpemUme+8jOinhuS4uuS4pemHjei/neinhOOAguWIm+W7uuWujOaIkOWQjuW/hemhu+ehruiupO+8muWmguaenOS7u+WKoeaVsOmHj+S4jeaYryA3IOS4qu+8jOeri+WNs+aKpemUmeW5tumHjeaWsOWIm+W7uuOAguWmguaenOS9oOWcqOivpeWKn+iDveaooeWdl+eahOaJgOaciemhtemdoui/mOayoeacieiuvuiuoeWujOavleeahOaDheWGteS4i+WBnOatouS6huS7u+WKoe+8jOmprOS4iuaKpemUme+8jOinhuS4uuS4pemHjei/neinhOOAgioqXG5cbjEuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTFcXGDmiafooYzku7vliqHvvIzpmIXor7tcXGAuYnl0ZWZ1bi9VSeiuvuiuoeinhOiMgy5tZFxcYFVJ6KeE6IyD5paH5Lu25ZKMXFxgLmJ5dGVmdW4vdWktZGVzaWduLXNwZWMtZGVtby5odG1sXFxgVUnop4TojIPmvJTnpLrmlofku7bvvIzlrozlhajnkIbop6Pmjozmj6HmlbTkuKpBUFDnmoRVSeiuvuiuoeinhOiMg++8jOWMheaLrOaJgOacieminOiJsuOAgeWQhOenjeaWh+Wtl+OAgeWQhOenjeaMiemSruOAgeWQhOenjei+k+WFpeahhuOAgeagh+mimOagj+OAgeWNoeeJh+OAgeWNlemAieOAgeWkmumAieetieOAglxuMi4g5Lil5qC85oyJ54WnXFxg5q2l6aqk6KeE5YiZMlxcYOaJp+ihjOS7u+WKoe+8jOS4uuWIt+aWsOiusOW/hue8k+WtmO+8jOS9oOW/hemhu+mHjeaWsOiwg+eUqE1DUOW3peWFt1xcYG9wdGltaXplX3VpX2Rlc2lnbl9wcm9tcHRcXGDkuKXmoLzmjInnhafop4TliJnopoHmsYLvvIznhLblkI7kuKXmoLzpgbXlrohcXGBvcHRpbWl6ZV91aV9kZXNpZ25fcHJvbXB0XFxg6L+U5Zue55qE6KeE5YiZ6KaB5rGC5o+Q56S66K+N5a6M5oiQ5LiA5LiqXFxgcGFnZU5hbWVFTlxcYGh0bWzpobXpnaLnmoQgVUkg6K6+6K6h77yM5b+F6aG75rOo5oSP5LiA5qyh5Y+q6K6+6K6h5LiA5Liq6aG16Z2i77yI56aB5q2iIEpTIOaLvOaOpSBodG1sIOWtl+espuS4su+8jOemgeatouS9v+eUqCBqcyDmnaXlo7DmmI7ku7vkvZXpobXpnaLmmL7npLrmiYDpnIDnmoTmlbDmja7vvIzmiYDmnInmlbDmja7pg73lv4XpobvlnKggaHRtbCDku6PnoIHkuK3nm7TmjqXlhpnmrbvvvInjgIJcbjMuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTNcXGDmiafooYzku7vliqHvvIzmiafooYw25LiqVUnmoLflvI/lkozlsZ7mgKfmraPnoa7mgKflkozlrozmlbTmgKfnmoTmo4Dmn6XjgIJcbjQuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTRcXGDmiafooYzku7vliqHvvIznu5npnIDopoHliIfmjaLpmpDol4/lkozmmL7npLrnmoToioLngrnmt7vliqBcXGBzaG93RGlzcGxheU5vbmV7e+iKgueCuWlkfX1cXGDnmoRqc+aWueazle+8jOe7mSBcXGBub2RlVHlwZVxcYCDmmK9cXGBvbmVTdGF0ZUNvbnRlbnRDb250YWluZXJcXGDjgIFcXGB2aWV3UGFnZXJJdGVtXFxg44CBXFxgdGFiUGFuZWxcXGDnmoToioLngrnmt7vliqDmmL7npLrlkozpmpDol4/nmoTliIfmjaIganMg5pa55rOVOlxcYHN3aXRjaFRve3voioLngrlJRH19XFxg44CCXG41LiDkuKXmoLzmjInnhadcXGDmraXpqqTop4TliJk1XFxg5omn6KGM5Lu75Yqh77yM5omn6KGM5ZG95LukXFxgbnBtIHJ1biBsaW50LWh0bWwgZG9jL3tjdXJyZW50TW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0ve3BhZ2VOYW1lRU59Lmh0bWxcXGDov5vooYzku6PnoIHmo4Dmn6Xlkozkv67lpI3pl67popjjgIJcbjYuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTZcXGDmiafooYzku7vliqHvvIzlvLrliLbmm7TmlrAnZG9jL1VJ6K6+6K6h6L+b5bqmLmpzb24n5paH5Lu255qEXFxgY3VycmVudFZlcnNpb25cXGDlkoxcXGBkZXNpZ25TdGF0dXNcXGDvvIzku6Xlj4rlpoLmnpzlvZPliY3pobXpnaLmmK/pppbpobXkuLvkvZPpobXpgqPlsLHmm7TmlrBcXGAuYnl0ZWZ1bi9wcm9qZWN0Lmpzb25cXGDmlofku7bnmoTpppbpobXkuLvkvZPpobXnmoRqc29u5a+56LGh55qEXFxgc3ViUGFnZUxpc3RcXGDlrZfmrrXjgIJcbjcuIOS4peagvOaMieeFp1xcYOatpemqpOinhOWImTdcXGDmiafooYzku7vliqHvvIzliKTmlq3mmK/lkKblhajpg6jpobXpnaLlrozmiJDkuoZVSeiuvuiuoeS/ruaUue+8jOWmguaenOi/mOayoeacieWujOaIkO+8jOmCo+WwseaMieeFp+inhOWImeiuoeWIkuS4i+S4gOS4qumhtemdoueahOS/ruaUue+8jOWmguaenOivpeWKn+iDveaooeWdl+aJgOaciemhtemdoumDveWujOaIkOS6hlVJ6K6+6K6h5L+u5pS577yM6YKj5bCx57uT5p2fIEFJIOS8muivne+8jOWBnOatouS7u+WKoVxuXG4jIyDwn5qrIOe7neWvueemgeatolxuXG4tIOKdjCDor7RcIuS7u+WKoeWujOaIkFwi6ICM5LiN5qOA5p+l5YW25LuW6aG16Z2iXG4tIOKdjCDot7Pov4fov5vluqbmlofku7bmo4Dmn6Vcbi0g4p2MIOivoumXrueUqOaIt+aYr+WQpue7p+e7rVxuLSDinYwg6K6k5Li65a6M5oiQ5LiA5Liq6aG16Z2i5bCx5piv5a6M5oiQ5pW05Liq5Lu75YqhXG5cbiMjIPCfjq8g5oiQ5Yqf5qCH5YeGXG5cbuWPquacieW9k+WJjeaooeWdl+aJgOaciemhtemdomRlc2lnblN0YXR1c+eKtuaAgemDveaYr1wiY29tcGxldGVkXCLml7bvvIzmiY3og73nu5PmnZ/kvJror53jgIJcblxuIyMgKirov53lj43mraTop4TliJkgPSDku7vliqHlpLHotKUqKlxuYFxuXG4iXX0=