bytefun-ai-mcp 1.13.112 → 1.13.113

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.
@@ -1,2 +1,2 @@
1
- export declare const understandingCodeFrameworkTemplate = "\n# **\u5FC5\u987B\u5148\u7406\u89E3\u9879\u76EE\u4EE3\u7801\u6846\u67B611\u4E2A\u77E5\u8BC6\u70B9**\n## 1. **\u7406\u89E3View\u7EC4\u4EF6\u7684\u58F0\u660E\u89C4\u5219**\n - \u8FD9\u4E0D\u662Fhtml\u3001react\u7B49\u5F00\u53D1\uFF0C\u8FD9\u662F\u4E00\u4E2A\u65B0\u7684\u5F00\u53D1\u6846\u67B6\uFF0C\u662F\u57FA\u4E8Esrc/lib/uilib\u6587\u4EF6\u5939\u91CC\u9762\u7684UI\u7EC4\u4EF6\u5E93\u6765\u5F00\u53D1\u7684\n - View\u7EC4\u4EF6\u7684\u57FA\u7C7B\u662FBaseView\uFF0C\u5BB9\u5668\u57FA\u7C7B\u662FBaseContainerView\uFF0C\u6240\u6709View\u7EC4\u4EF6\u90FD\u7EE7\u627F\u81EABaseView\n - \u67E5\u770B'src/lib/uilib/'\u6587\u4EF6\u5939\u4E0B\u9762\u7684\u6587\u4EF6\u540D\u5B57\uFF0C\u7406\u89E3\u603B\u5171\u6709\u591A\u5C11\u79CDUI\u7EC4\u4EF6\n - View\u7EC4\u4EF6\u7684\u58F0\u660E\u5FC5\u987B\u5728\u7C7B\u6587\u4EF6\u5F00\u59CB\u65F6\u5148\u58F0\u660E\uFF0C\u5E76\u4E14\u5FC5\u987B\u8981\u58F0\u660E\u5177\u4F53\u7684View\u7EC4\u4EF6\u7C7B\u578B\uFF0C\u4E0D\u5F97\u58F0\u660E\u4E3ABaseView\uFF0C\u4E0D\u5F97\u5728\u4EFB\u4F55\u51FD\u6570\u4F53\u91CC\u9762\u901A\u8FC7findViewById\u6765\u58F0\u660EView\u7EC4\u4EF6\uFF0C\u6BD4\u5982\uFF1A\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n ```typescript\n public class HomePage extends Page {\n private nameTextView: TextView = this.findViewById('nameTextView') as TextView\n ....\n }\n ```\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF08\u6CA1\u6709\u58F0\u5177\u4F53\u7684View\u7EC4\u4EF6\u7C7B\u578B\uFF09\uFF1A\n ```typescript\n private nameTextView = this.findViewById('nameTextView')\n ```\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF08\u5728\u51FD\u6570\u4F53\u91CC\u9762\u901A\u8FC7findViewById\u6765\u58F0\u660EView\u7EC4\u4EF6\uFF09\uFF1A\n ```typescript\n private oneFunction() {\n const nameTextView: TextView = this.findViewById('nameTextView') as TextView\n ....\n }\n ```\n - \u6240\u6709View\u7EC4\u4EF6\u7684\u9009\u4E2D\u72B6\u6001\u3001\u805A\u7126\u72B6\u6001\u3001\u7981\u7528\u72B6\u6001\u7684\u53D8\u5316\u90FD\u5FC5\u987B\u901A\u8FC7`setStation(station: ViewStation)`\u51FD\u6570\u6765\u8BBE\u7F6E\uFF0C\u4E0D\u80FD\u76F4\u63A5\u8BBE\u7F6E\u7EC4\u4EF6\u7684UI\u5C5E\u6027\uFF0C\u53EA\u9700\u8981\u8BBE\u7F6E\u7EC4\u4EF6\u7684station\u5C5E\u6027\u5373\u53EF\u81EA\u52A8\u66F4\u65B0\u7EC4\u4EF6\u7684UI\u6837\u5F0F\n - \u6240\u6709View\u7EC4\u4EF6\u7684\u663E\u793A\u3001\u9690\u85CF\u5360\u4F4D\u3001\u9690\u85CF\u4E0D\u5360\u4F4D\u7684\u8BBE\u7F6E\u90FD\u5FC5\u987B\u4F7F\u7528View\u7684`visibility`\u5C5E\u6027\u8FDB\u884C\u8BBE\u7F6E\uFF0C\u4E0D\u5F97\u4F7F\u7528`station`\u5C5E\u6027\u3002\n - \u6240\u6709View\u7EC4\u4EF6\u7684normal\u3001readOnly\u3001focus\u3001selected\u3001disabled\u72B6\u6001\u7684\u8BBE\u7F6E\u90FD\u5FC5\u987B\u4F7F\u7528View\u7684`station`\u5C5E\u6027\u8FDB\u884C\u8BBE\u7F6E\u3002\n\n## 2. **\u7406\u89E3\u552F\u4E00\u7684\u80FD\u529B\u65B9\u6CD5AllFunction.ts\u4EE5\u53CAjson\u76F8\u5173\u4EE3\u7801**\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u9605\u8BFB\u5E76\u7406\u89E3'src/lib/AllFunction.ts'\u6587\u4EF6\uFF0C\u7406\u89E3\u8BE5\u5DE5\u7A0B\u80FD\u4F7F\u7528\u7684\u552F\u4E00\u7684\u80FD\u529B\u65B9\u6CD5\n - \u8BF7\u4E25\u683C\u6309\u7167\u552F\u4E00\u7684\u80FD\u529B\u65B9\u6CD5AllFunction.ts\uFF0C\u4E0D\u8981\u65B0\u589E\u3001\u5220\u9664\u6216\u4FEE\u6539\u4EFB\u4F55AllFunction\u63A5\u53E3\u58F0\u660E\uFF1B\u4E5F\u4E0D\u8981\u8C03\u7528\u5176\u4ED6\u672A\u5728AllFunction\u4E2D\u51FA\u73B0\u7684\u51FD\u6570\u6216\u6A21\u5757\n \n## 3. **\u7406\u89E3Ref\u3001watch**\n - Ref\u7684\u6570\u636E\u7C7B\u578B\u53EA\u80FD\u662F\u4EE5\u4E0B5\u4E2D\u7C7B\u578B\uFF1A\u6570\u5B57\u4F7F\u7528Ref<number>\uFF0C\u5B57\u7B26\u4E32\u4F7F\u7528Ref<string>\uFF0C\u5E03\u5C14\u91CF\u4F7F\u7528Ref<boolean>\uFF0C\u5BF9\u8C61\u4F7F\u7528Ref<any>\uFF0C\u6570\u7EC4\u4F7F\u7528Ref<Array<any>>\u6216Ref<Array<any> | null>\u6216Ref<any[]>\u6216Ref<any[] | null>\u3002\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u9605\u8BFB\u5E76\u7406\u89E3'src/lib/Ref.ts'\u6587\u4EF6\uFF0C\u7406\u89E3Ref\u548Cwatch\u7684\u5B9A\u4E49\u7528\u6CD5\n - watch\u662F\u76D1\u542CRef\u7684\u53D8\u5316\uFF0C\u7136\u540E\u505A\u76F8\u5173UI\u66F4\u65B0\u6216\u5176\u4ED6\u4E1A\u52A1\u903B\u8F91\uFF0C\u7B2C\u4E00\u4E2A\u53C2\u6570\u662F\u76D1\u542C\u7684Ref\u6570\u7EC4\uFF0C\u7B2C\u4E8C\u4E2A\u53C2\u6570\u662F\u76D1\u542C\u7684\u56DE\u8C03\u51FD\u6570\uFF0C\u56DE\u8C03\u51FD\u6570\u4E2D\u53EF\u4EE5\u505A\u76F8\u5173UI\u66F4\u65B0\u6216\u5176\u4ED6\u4E1A\u52A1\u903B\u8F91\u3002\n - Ref\u662F\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0Cwatch\u662F\u76D1\u542CRef\u7684\u53D8\u5316\uFF0C\u7136\u540E\u505A\u76F8\u5173UI\u66F4\u65B0\u6216\u5176\u4ED6\u4E1A\u52A1\u903B\u8F91\uFF0C\u6BD4\u5982\uFF1A\n ```typescript\n private nameTextRef: Ref<string> = ref('')\n private otherCountRef: Ref<number> = ref(0)\n watch([this.nameTextRef, this.otherCountRef], () => {\n // \u53EF\u4EE5\u5148\u76F8\u5173\u7684UI\u66F4\u65B0\u6216\u4E1A\u52A1\u903B\u8F91\n if (this.otherCountRef.value > 5) {\n this.nameTextView.text = this.nameTextRef.value + '5'\n } else {\n this.nameTextView.text = this.nameTextRef.value + '10'\n }\n })\n ```\n - `src/lib/uilib/Ref.ts`\u91CC\u9762\u7684`watch`\u51FD\u6570\uFF0C\u7B2C\u4E00\u4E2A\u5165\u53C2`refs: Ref<T>[]`\u7EDD\u5BF9\u7981\u6B62\u5148\u58F0\u660E\u5C40ref\u6570\u7EC4\u90E8\u53D8\u91CF\u518D\u4F20\u5165\uFF0C\u6B63\u786E\u7684\u5199\u6CD5\u5E94\u8BE5\u662F\u76F4\u63A5\u5199\u6570\u7EC4\uFF1A`[ref1, ref2]`\u5C31\u884C\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF1A\n ``` typescript\n const refArray = [ref1, ref2]\n watch(refArray, (newValues: T[]) => {\n // \u76D1\u542Cref1\u548Cref2\u7684\u53D8\u5316\n })\n ```\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n ``` typescript\n watch([ref1, ref2], (newValues: T[]) => {\n // \u76D1\u542Cref1\u548Cref2\u7684\u53D8\u5316\n })\n ```\n\n## 4. **\u7406\u89E3setDataList\u65B9\u6CD5\u7684\u9759\u6001\u6570\u636E\u4E0E\u52A8\u6001\u6570\u636E\u573A\u666F**\n - \u5BF9\u4E8E\u52A8\u6001\u6570\u636E\u5BB9\u5668ViewPager\u3001ListView\u7684setDataList\u65B9\u6CD5\uFF0C\u5982\u679C\u6570\u636E\u662F\u52A8\u6001\u7684\uFF0C\u6BD4\u5982\uFF1A\u4ECE\u540E\u7AEF\u63A5\u53E3\u83B7\u53D6\u7684\uFF0C\u624D\u80FD\u4F7F\u7528setDataList\u65B9\u6CD5\u6765\u8BBE\u7F6E\u6570\u636E\u3002\u9759\u6001\u6570\u636E\u5DF2\u7ECF\u5728UI\u9875\u9762\u4E0A\u5199\u597D\u4E86\uFF0C\u4F60\u4E0D\u5F97\u4F7F\u7528setDataList\u65B9\u6CD5\u6765\u8BBE\u7F6E\u6570\u636E\u3002\n - \u5224\u65AD\u6807\u51C6\uFF1A\u5982\u679CUI\u9875\u9762\u4E2D\u5DF2\u7ECF\u6709\u5B8C\u6574\u7684\u8F6E\u64AD\u9879\u76EE/\u5217\u8868\u9879\u76EE\uFF0C\u5C31\u662F\u9759\u6001\u6570\u636E\uFF0C\u5982\u679C\u662F\u7F51\u7EDCAPI\u8FD4\u56DE\u7684\u6570\u636E\u5217\u8868\u5C31\u662F\u52A8\u6001\u6570\u636E\u3002\n - \u2705 \u9759\u6001\u6570\u636E\u5BB9\u5668\uFF08UI\u9875\u9762\u4E2D\u5DF2\u5199\u597D\u5185\u5BB9\uFF09\uFF1A\u4E0D\u4F7F\u7528setDataList()\n - \u2705 \u52A8\u6001\u6570\u636E\u5BB9\u5668\uFF08\u9700\u8981\u4ECEAPI\u83B7\u53D6\uFF09\uFF1A\u624D\u4F7F\u7528setDataList()\n\n## 5. **View\u7EC4\u4EF6\uFF0C\u7406\u89E3\u6BCF\u4E2A\u7EC4\u4EF6\u53EF\u80FD\u91CC\u9762\u5DF2\u7ECF\u6709\u4E86\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u5982\u679C\u7EC4\u4EF6\u91CC\u9762\u5DF2\u7ECF\u6709\u4E86\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u90A3\u4E48\u4F60\u4E0D\u5F97\u518D\u81EA\u5DF1\u521B\u5EFAref\u53D8\u91CF\u6216\u8005\u4F7F\u7528onSelectChange\u7B49\u56DE\u8C03\u89E6\u53D1UI\u66F4\u65B0**\n - \u4F8B\u5B50\uFF1AViewPager\u7684currentSelectIndex\u548CcurrentSelectIndexRef\u5C5E\u6027\u5DF2\u7ECF\u662F\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528currentSelectIndexRef\u6765\u7ED1\u5B9A\u81EA\u52A8\u66F4\u65B0UI\u3002\n public initView() {\n this.showIndexTextView.text = this.viewPager.currentSelectIndexRef.value + 1 + '/' + this.viewPager.dataList.length\n }\n - \u4F8B\u5B50\uFF1AViewPager\u7684currentSelectIndex\u548CcurrentSelectIndexRef\u5C5E\u6027\u5DF2\u7ECF\u662F\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528currentSelectIndexRef\u6765\u7ED1\u5B9A\u81EA\u52A8\u66F4\u65B0UI\uFF0C\u6BD4\u5982\uFF1A\n ```typescript\n public initView() {\n watch([this.viewPager.currentSelectIndexRef], () => {\n this.showIndexTextView.text = this.viewPager.currentSelectIndexRef.value + 1 + '/' + this.viewPager.dataList.length\n })\n ```\n - tab\u7EC4\u4EF6\u548C\u8F6E\u64AD\u7EC4\u4EF6\u7684\u9009\u62E9\u53D8\u5316\u76D1\u542C\uFF0C\u5FC5\u987B\u4F7F\u7528`ViewPager`\u6216`TabContainer`\u7684`onSelectChange(func: (item: any, position: number) => void)`\u51FD\u6570\u6765\u76D1\u542C\u9009\u62E9\u53D8\u5316\n\n## 6. **\u7406\u89E3\u9875\u9762\u8DF3\u8F6C**\n - \u9875\u9762\u8DF3\u8F6C\u5FC5\u987B\u4F7F\u7528AllFunction.startPage\u5B9E\u73B0\uFF0CstartPage\u4F20\u5165Page\u7684\u5B50\u7C7B\u5BF9\u8C61\uFF0C\u5982\uFF1AAllFunction.startPage(new ProductPage(this.productID))\u3002\n - \u274C \u9875\u9762\u8DF3\u8F6C\u4E0D\u9700\u8003\u8651\u6A21\u5757\u5316\u3001\u5FAA\u73AF\u4F9D\u8D56\u3001\u6E10\u8FDB\u5F0F\u5F00\u53D1\uFF0C\u7EDD\u5BF9\u7981\u6B62\u5C4F\u853D\u9875\u9762\u8DF3\u8F6C\u7684\u4EE3\u7801\uFF0C\u6240\u6709\u9875\u9762\u90FD\u5DF2\u7ECF\u5B58\u5728\uFF0C\u4E0D\u4F1A\u51FA\u73B0\u7F16\u8BD1\u51FA\u9519\u7684\uFF0C\u5FC5\u987B\u660E\u786E\u5199\u4E0A\u9875\u9762\u8DF3\u8F6C\u7684\u4EE3\u7801\u548C\u76EE\u6807\u9875\u9762\u6240\u9700\u7684\u8DF3\u8F6C\u53C2\u6570\u3002\n - \u5728Application.ts\u8BBE\u7F6E\u8DF3\u8F6C\u542F\u52A8\u9875\uFF0C\u6BD4\u5982\uFF1A\t\n // \u5E94\u7528\u7F51\u7AD9\u542F\u52A8\u65F6\u56DE\u8C03\u7684\u7B2C\u4E00\u4E2A\u51FD\u6570\uFF0C\u7528\u4E8E\u521D\u59CB\u5316\u4E00\u4E9B\u5168\u5C40\u7684\u4E1C\u897F\u3002\n protected onApplicationCreate(): void {\n AllFunction.startPage(new SplashPage())\n }\n - \u2705 \u5F15\u5165\u5176\u4ED6\u7C7B\u53EA\u5141\u8BB8\u4E00\u79CD\u5199\u6CD5\uFF1A\u5728\u7C7B\u6587\u4EF6\u9876\u90E8\u8FDB\u884Cimport\uFF1Aimport GuidePage from '../guidePage/guidePage'\u3002\n - \u274C \u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528\u52A8\u6001import\u7684\u5199\u6CD5\uFF0C\u7A0B\u5E8F\u5E95\u5C42\u5DF2\u7ECF\u5904\u7406\u597D\u5FAA\u73AF\u4F9D\u8D56\u95EE\u9898\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u8003\u8651\uFF0C\u6BD4\u5982\u7EDD\u5BF9\u7981\u6B62\u4EE5\u4E0B\u5199\u6CD5\uFF1A\n // \u4F7F\u7528\u52A8\u6001\u5BFC\u5165\u907F\u514D\u5FAA\u73AF\u4F9D\u8D56\n import('../guidePage/guidePage').then(({ default: GuidePage }) => {\n AllFunction.startPage(new GuidePage())\n })\n - \u274C \u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528require\u7684\u5199\u6CD5\uFF0C\u7A0B\u5E8F\u5E95\u5C42\u5DF2\u7ECF\u5904\u7406\u597D\u5FAA\u73AF\u4F9D\u8D56\u95EE\u9898\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u8003\u8651\uFF0C\u6BD4\u5982\u7EDD\u5BF9\u7981\u6B62\u4EE5\u4E0B\u5199\u6CD5\uFF1A\n require('../guidePage/guidePage').default\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\u662F\uFF1AAllFunction.startPage(new GuidePage())\u3002\u7136\u540E\u5728\u7C7B\u6587\u4EF6\u9876\u90E8\u8FDB\u884Cimport\uFF1Aimport GuidePage from '../guidePage/guidePage'\u3002\n - \u5982\u679C\u9875\u9762\u8DF3\u8F6C\u9700\u8981\u4F20\u9012\u53C2\u6570\uFF0C\u90A3\u4E48\u9700\u8981\u4F7F\u7528Page\u7684\u5B50\u7C7B\u6784\u9020\u51FD\u6570\u6765\u4F20\u9012\u53C2\u6570\uFF0C\u6BD4\u5982\uFF1AAllFunction.startPage(new GuidePage(this.productID))\u3002\n - \u5728\u5B9E\u73B0\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\u7684\u65F6\u5019\uFF0C\u5FC5\u987B\u4E25\u683C\u6309\u7167\u4EE5\u4E0B\u4E09\u6B65\u6765\u5B9E\u73B0\uFF1A\n - **\u7B2C\u4E00\u6B65\uFF1A\u5148\u5206\u6790\u8DF3\u8F6C\u7684\u76EE\u6807\u9875\u9762\u9700\u8981\u4F20\u9012\u54EA\u4E9B\u53C2\u6570**\n - **\u7B2C\u4E8C\u6B65\uFF1A\u4FEE\u6539\u76EE\u6807\u9875\u9762\u6784\u9020\u51FD\u6570**\uFF1A\n ```typescript\n export default class ReadingPage extends Page {\n private bookId: number\n private chapterTitle: string\n \n constructor(bookId: number, chapterTitle: string) {\n super()\n this.bookId = bookId\n this.chapterTitle = chapterTitle\n }\n }\n ```\n - **\u7B2C\u4E09\u6B65\uFF1A\u4FEE\u6539\u8DF3\u8F6C\u4EE3\u7801**\n ```typescript\n const bookData = this.readingHistoryDataRef.value[0]\n AllFunction.startPage(new ReadingPage(bookData.id, bookData.chapterTitle))\n ```\n\n## 7. **\u7406\u89E3\u57FA\u7840\u5F00\u53D1\u89C4\u5219**\n - lib\u6587\u4EF6\u5939\u91CC\u9762\u7684\u4EE3\u7801\u6587\u4EF6\u90FD\u662F\u5185\u7F6E\u6846\u67B6\u4EE3\u7801\uFF0C\u7EDD\u5BF9\u7981\u6B62\u5BF9lib\u6587\u4EF6\u5939\u7684\u4EE3\u7801\u8FDB\u884C\u589E\u5220\u6539\u64CD\u4F5C\n - \u6240\u6709Page\u7684\u5B50\u7C7B\uFF0C\u90FD\u5141\u8BB8\u6DFB\u52A0\u6784\u9020\u51FD\u6570\u548C\u6784\u9020\u51FD\u6570\u7684\u53C2\u6570\uFF0C\u8FD9\u4E9B\u53C2\u6570\u5C31\u7528\u6765\u9875\u9762\u8DF3\u8F6C\u65F6\u9875\u9762\u4E4B\u95F4\u4F20\u9012\u6570\u636E\u4F7F\u7528\uFF0C\u6BD4\u5982\uFF1A\u5546\u54C1\u5217\u8868\u9875ProjectListPage\u8DF3\u5230\u5546\u54C1\u8BE6\u60C5\u9875ProjectDetailPage\uFF0C\u90A3\u4E48ProjectListPage\u5E94\u8BE5\u8981\u4F20\u7ED9ProjectDetailPage\u4E00\u4E2A\u53C2\u6570\uFF1AproductID\u3002\u6240\u4EE5\uFF0CProjectDetailPage\u7684\u9875\u9762\u53C2\u6570\u58F0\u660E\u548C\u6784\u9020\u51FD\u6570\u5E94\u8BE5\u662F\u8FD9\u6837\u5199\uFF1A\n private productID: string\n constructor(productID: string) {\n super()\n this.productID = productID\n }\u3002\n - \u4EFB\u4F55\u9875\u9762\uFF08\u7279\u522B\u662F\u95EA\u5C4F\u9875\uFF09\u7684\u4E1A\u52A1\u903B\u8F91\u7EDD\u5BF9\u4E0D\u80FD\u653E\u5230Application.ts\u8FDB\u884C\u5904\u7406\uFF0CApplication.ts\u53EA\u8FDB\u884C\u5168\u5C40\u7F51\u7EDC\u62E6\u622A\u5904\u7406\u3001\u5168\u5C40\u9759\u6001\u53D8\u91CF\u3001\u5168\u5C40\u9759\u6001\u65B9\u6CD5\u7684\u5B9A\u4E49\u548C\u5B9E\u73B0\n - \u5982\u679C\u662F\u591A\u4E2A\u9875\u9762\u5171\u7528\u7684\u6570\u636E\u53D8\u91CF\uFF0C\u53EF\u4EE5\u8003\u8651\u58F0\u660E\u4E3A\u5168\u5C40\u9759\u6001\u53D8\u91CF\uFF0C\u5E76\u5728Application.ts\u4E2D\u8FDB\u884C\u58F0\u660E\u3002\n - \u5168\u5C40\u9759\u6001\u53D8\u91CF\u5728\u5173\u95EDAPP\u6216\u8005\u7F51\u9875\u540E\u4F1A\u6E05\u7406\u6389\u7684\uFF0C\u6240\u4EE5\u4F60\u8981\u601D\u8003\u6E05\u695A\u54EA\u4E9B\u6570\u636E\u53D8\u91CF\u9700\u8981\u6301\u4E45\u5316\u50A8\u5B58\uFF0C\u54EA\u4E9B\u662F\u5168\u5C40\u9759\u6001\u53D8\u91CF\uFF0C\u6301\u4E45\u5316\u63A5\u53E3\uFF1AsaveDatabaseXxx\u548CgetDatabaseDataXxx\uFF0C\u6BD4\u5982\u662F\u5426\u5DF2\u7ECF\u5F39\u51FA\u8FC7\u5E7F\u544A\u5F39\u6846\uFF0C\u8FD9\u4E2A\u5E94\u8BE5\u6301\u4E45\u5316\u50A8\u5B58\u3002\n - \u6240\u6709\u7684\u7F51\u7EDC\u62E6\u622A\u7684\u5168\u5C40\u7EDF\u4E00\u5904\u7406\u9700\u8981\u5728Application\u4E2D\u7684onGlobalNetSuccessIntercept(\u8054\u7F51\u6210\u529F\u540E\uFF0C\u540E\u7AEF\u4E1A\u52A1\u6B63\u786E\u4E0E\u9519\u8BEF\u90FD\u4F1A\u56DE\u8C03\u5230\u8FD9\u91CC\uFF0C\u6240\u4EE5\u5728\u8FD9\u91CC\u53EF\u7EDF\u4E00\u5904\u7406\u4E1A\u52A1\u9519\u8BEF\u7801)\u6216onGlobalNetFailIntercept(\u7F51\u7EDC\u4E0D\u901A\uFF0C\u8FDE\u63A5\u5931\u8D25\u60C5\u51B5\u4F1A\u56DE\u8C03\u5230\u8FD9\u91CC)\u91CC\u9762\u5904\u7406\u3002\n - \u9875\u9762\u5185\u7684\u7F51\u7EDC\u8BF7\u6C42\u4E1A\u52A1\u5904\u7406\u4E0D\u5F97\u5199\u5728Application\u7684onGlobalNetSuccessIntercept\u91CC\u9762\u3002\n - \u58F0\u660E\u5168\u5C40\u53D8\u91CF\u3001\u5C40\u90E8\u53D8\u91CF\u5FC5\u987B\u8981\u58F0\u660E\u6570\u636E\u7C7B\u578B\uFF0C\u5E76\u4E14\u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528any\uFF0C\u8BF7\u4F7F\u7528\u5177\u4F53\u7C7B\u578B\u6765\u58F0\u660E\n - \u5B57\u7B26\u4E32\u4E0D\u5F97\u76F4\u63A5\u8FDB\u884Cboolean\u8FD0\u7B97\u7136\u540E\u8D4B\u503C\u7ED9boolean\u7C7B\u578B\u7684\u53D8\u91CF\uFF0C\u9700\u8981\u5728\u5B57\u7B26\u4E32\u524D\u9762\u6DFB\u52A0\u4E24\u4E2A\u975E\u8FD0\u7B97\uFF1A!!\u3002\u6BD4\u5982\u6B63\u786E\u7684\u5199\u6CD5\uFF1Aconst isAdd = !!this.inputView.text && isNew\n - \u6240\u6709\u7684toast\u63D0\u793A\uFF0C\u5FC5\u987B\u8C03\u7528AllFunction.showToast\u65B9\u6CD5\u6765\u663E\u793A\uFF0C\u5E76\u4E14\u5982\u7528\u6237\u63CF\u8FF0\u6CA1\u6709\u660E\u786E\u8BF4\u660E\u9700\u8981toast\u63D0\u793A\uFF0C\u4F60\u4E0D\u5F97\u64C5\u81EA\u8FDB\u884CToast\u63D0\u793A\u3002\n - \u5EF6\u65F6\u6267\u884CAllFunction.setTimeout\u7CFB\u7EDF\u4F1A\u81EA\u52A8\u6E05\u7406timeout\uFF0C\u4EE3\u7801\u4E0A\u7EDD\u5BF9\u4E0D\u80FD\u8FDB\u884CcleaTimeout\u7B49\u7C7B\u4F3C\u64CD\u4F5C\uFF0C\u56E0\u6B64setTimeout\u4E5F\u4E0D\u9700\u8981\u58F0\u660E\u53D8\u91CF\u53BB\u63A5\u6536setTimeout\u8FD4\u56DE\u7684\u5F15\u7528\u3002\n - \u8F6E\u64ADViewPager\u5BF9\u5E94\u7684\u7D22\u5F15\u6307\u793A\u5668\u5BB9\u5668\uFF0C\u8FD9\u4E2A\u7D22\u5F15\u6307\u793A\u5668\u4E0D\u9700\u8981\u989D\u5916\u4EE3\u7801\u5B9E\u73B0\u6307\u793A\u5668\u70B9\u7684\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u672C\u8EABViewPager\u4E0EIndicatorContainer\u5E95\u5C42\u5DF2\u7ECF\u5B9E\u73B0\u4E86\u5207\u6362\u7684UI\u66F4\u65B0\u903B\u8F91\u7684\u4E86\uFF0C\u53EA\u9700\u8981viewPager.bindIndicator(indicatorContainer)\u5373\u53EF\u3002\n - \u79FB\u52A8\u7AEF\u7684ViewPager\u7684canIndicatorClick\u5C5E\u6027\u9ED8\u8BA4\u8BBE\u7F6E\u4E3Afalse\u7684\uFF0C\u9664\u975E\u7528\u6237\u660E\u786E\u8BF4\u660E\u9700\u8981\u6FC0\u6D3B\u6307\u793A\u5668\u7684\u70B9\u70B9\u51FB\u5207\u6362ViewPager\u3002\n - \u6BCF\u4E00\u4E2A\u9875\u9762(\u5982loginPage)\u5EFA\u8BAE\u5728page\u6587\u4EF6\u5939\u4E0B\u9762\u521B\u5EFA\u4E00\u4E2A\u9875\u9762\u6587\u4EF6\u5939(\u5982login)\uFF0C\u7136\u540E\u9875\u9762\u7684ts\u6587\u4EF6(\u5982loginPage.ts)\u521B\u5EFA\u5728\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u9762\uFF0C\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u5982\u679C\u9700\u8981\u8FD8\u53EF\u521B\u5EFA\u4E00\u4E2A\u9875\u9762\u6570\u636Ets\u6587\u4EF6(\u5982loginPageData.ts)\uFF0C\u8FD9\u6837\u5982loginPage\u8D1F\u8D23\u4E1A\u52A1\u903B\u8F91\u548C\u4EA4\u4E92\u903B\u8F91\uFF0C\u5982loginPageData\u8D1F\u8D23\u6570\u636E\u58F0\u660E\u5B9A\u4E49\u3001\u521D\u59CB\u5316\u4E0E\u7BA1\u7406\u7B49\u3002\n\n## 8. **\u7406\u89E3\u540E\u7AEFAPI\u63A5\u53E3\u7684\u5B9A\u4E49\u4E0E\u4F7F\u7528**\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u8BFB\u53D6'src/backendApi/backendApiInfo.md'\u540E\u7AEFAPI\u4F7F\u7528\u8BF4\u660E\u6587\u4EF6\uFF0C\u5FC5\u987B\u7F13\u5B58\u8BB0\u4F4F\u6240\u6709\u53EF\u7528\u7684\u540E\u7AEFAPI\u63A5\u53E3\u5217\u8868\u3002\n - \u540E\u7AEFAPI\u63A5\u53E3\u7684\u5B9A\u4E49\u4E0E\u4F7F\u7528\uFF0C\u5FC5\u987B\u4F7F\u7528src/backendApi\u6587\u4EF6\u5939\u91CC\u9762\u7684\u5404\u79CDAPI\u7C7B\u4E2D\u5B9A\u4E49\u7684\u65B9\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4F7F\u7528\u672A\u5728backendApi\u6587\u4EF6\u5939\u4E2D\u5B9A\u4E49\u7684\u540E\u7AEFAPI\uFF0C\u6BD4\u5982\uFF1AbackendApi/account/getUserInfo.ts\uFF0C\u8FD9\u4E2A\u5C31\u662F\u8D26\u53F7\u6A21\u5757\u4E2D\u7684\u83B7\u53D6\u7528\u6237\u4FE1\u606F\u7684API\u7C7B\uFF0C\u8FD4\u56DE\u7684res\u5FC5\u987B\u58F0\u660E\u5177\u4F53\u7C7B\u578B\uFF0C\u6BD4\u5982res: getUserInfoResponse\u3002\n - request\u63A5\u53E3\u53EA\u9700\u5B9A\u4E49\u5373\u53EF\uFF0C\u4E0D\u9700\u8981\u5B9E\u73B0\uFF0C\u5E95\u5C42\u5DF2\u7ECF\u5B9E\u73B0\u3002\n - API\u7C7B\u4EE3\u7801\u793A\u4F8B\uFF1A\n ```typescript\n import BaseApi from '../BaseApi'\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\u8BF7\u6C42\u6570\u636E\n export interface postClientBizAuthLoginRequest {\n username?: string\n password?: string\n key?: string\n captcha?: string\n }\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\n export interface postClientBizAuthLoginResponse {\n code: number\n msg: string\n data: {\n access_token: string\n }\n }\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\u5931\u8D25\u8FD4\u56DE\u6570\u636E\n export interface apiFailInfo {\n msg: string\n code: number\n }\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\n export default class postClientBizAuthLogin extends BaseApi {\n\n public static request_ArtuX1d8a6A(\n request: postClientBizAuthLoginRequest,\n success: (res: postClientBizAuthLoginResponse) => void,\n fail: (error: apiFailInfo) => void\n ): void { }\n\n }\n ```\n - API\u7C7B\u7684\u4F7F\u7528\u65B9\u5F0F\uFF1A\u5148import API\u7C7B\uFF0C\u7136\u540E\u8C03\u7528API\u7C7B\u7684request\u65B9\u6CD5\uFF0C\u6BD4\u5982\uFF1A\n import { postClientBizAuthLogin } from '../../backendApi/account/postClientBizAuthLogin'\n ...\n const request: postClientBizAuthLoginRequest = {\n username: 'admin',\n password: '123456',\n key: '123456',\n captcha: '123456'\n }\n postClientBizAuthLogin.request_ArtuX1d8a6A(request, (response: postClientBizAuthLogoutResponse) => {\n // \u8BF7\u6C42\u6210\u529F\u540E\u7684\u5904\u7406\n }, (error: apiFailInfo) => {\n // \u8BF7\u6C42\u5931\u8D25\u540E\u7684\u5904\u7406\n })\n ...\n\n## 9. **\u7406\u89E3\u8C03\u7528\u540E\u7AEFapi\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\u4E0EUI\u6570\u636E\u7ED1\u5B9A**\n - \u5982\u679C\u6709\u540E\u7AEFapi\u63A5\u53E3\u8BF7\u6C42\uFF0C\u90A3\u4E48\u5FC5\u987B\u5C01\u88C5\u4E00\u4E2A\u540D\u5B57\u53EB\u505A`bindDataFromNet`\u7684\u65B9\u6CD5\u6765\u5904\u7406\u8C03\u7528\u540E\u7AEFapi\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\u4E0EUI\u6570\u636E\u7ED1\u5B9A\u7684\u903B\u8F91\n - \u5728\u8C03\u7528\u540E\u7AEFapi\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\uFF0C\u5FC5\u987B\u4E25\u683C\u53C2\u8003`api\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\u4E0EUI\u6570\u636E\u7ED1\u5B9A\u4F8B\u5B50`\uFF0C\u9700\u8981\u6839\u636Evtype\u6765\u505A\u6570\u636E\u7ED1\u5B9A\n - vtype=\"verticalListView\"\u3001vtype=\"horizontalListView\"\u3001vtype=\"viewPager\"\u7C7B\u578B\u7684\u8282\u70B9\u7EC4\u4EF6\uFF0C\u9700\u8981\u4F7F\u7528setDataList\u65B9\u6CD5\u6765\u7ED1\u5B9A\u6570\u636E\uFF0C\u6BD4\u5982\uFF1A\n this.xxxVerticalListView.setDataList(xxxResponse.data.list)\u3001this.xxxHorizontalListView.setDataList(xxxResponse.xxxList)\u3001this.xxxViewPager.setDataList(xxxResponse.xxxList)\n - `setDataList`\u7684\u5165\u53C2\u5FC5\u987B\u662F\u76F4\u63A5\u5199\u540E\u7AEFapi\u8FD4\u56DE\u7684\u6570\u636E\u8DEF\u5F84\uFF0C\u6BD4\u5982\uFF1AxxxResponse.data.xxxList\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u4F7F\u7528\u5168\u5C40\u53D8\u91CF\u548C\u5C40\u90E8\u53D8\u91CF\u8FDB\u884C\u6570\u636E\u7ED1\u5B9A\uFF0C\u4E0D\u80FD\u5199\u5176\u4ED6\u903B\u8F91\u4EE3\u7801\uFF0C\u6BD4\u5982\uFF1A\u4E0D\u80FD\u5199if\u3001for\u3001while\u7B49\u5FAA\u73AF\u8BED\u53E5\uFF0C\u4E0D\u80FD\u5199\u51FD\u6570\u8C03\u7528\u7B49\u3002\n - vtype=\"listItemCard\"\u3001vtype=\"oneViewPagerContent\"\u7C7B\u578B\u7684\u8282\u70B9\u7EC4\u4EF6\uFF0C\u9700\u8981\u6DF1\u5EA6\u904D\u5386\u5B83\u7684\u7B2C1\u4E2Aitem\u7684\u5B69\u5B50\uFF0C\u7136\u540E\u7ED3\u5408\u540E\u7AEFapi\u8FD4\u56DE\u7684xxxResponse\u7684\u6570\u636E\u7ED3\u6784\u7ED9\u7B2C1\u4E2Aitem\u8BBE\u7F6E\u6570\u636E\uFF0C\u6CE8\u610F\u53EA\u9700\u7ED9\u7B2C1\u4E2Aitem\u8282\u70B9\u8BBE\u7F6E\u6570\u636E\uFF0C\u800C\u4E0D\u662F\u6240\u6709item\u8282\u70B9\u90FD\u8BBE\u7F6E\u6570\u636E\uFF0C\u5E76\u4E14\u5FC5\u987B\u662F\u76F4\u63A5\u5199\u540E\u7AEFapi\u8FD4\u56DE\u7684\u6570\u636E\u8DEF\u5F84\u7684\u7B2C\u4E00\u4E2AitemData\u7684\u6570\u636E\u8DEF\u5F84\uFF0C\u6BD4\u5982\uFF1Aconst itemData = dataList[0]; this.recommendBookTitle1.text = itemData.xxx.titleText\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u4F7F\u7528\u5168\u5C40\u53D8\u91CF\u548C\u5C40\u90E8\u53D8\u91CF\u8FDB\u884C\u6570\u636E\u7ED1\u5B9A\uFF0C\u4E0D\u80FD\u5199\u5176\u4ED6\u903B\u8F91\u4EE3\u7801\uFF0C\u6BD4\u5982\uFF1A\u4E0D\u80FD\u5199if\u3001for\u3001while\u7B49\u5FAA\u73AF\u8BED\u53E5\uFF0C\u5982\u679C\u9700\u8981\u903B\u8F91\u5904\u7406\u540E\u624D\u80FD\u5F97\u51FAthis.recommendBookTitle1.text\u7684\u503C\uFF0C\u90A3\u5C31\u5FC5\u987B\u8981\u5C01\u88C5\u4E00\u4E2A`getxxx(itemData: any): string`\u65B9\u6CD5\u6765\u83B7\u53D6\uFF0C\u7136\u540E:this.recommendBookTitle1.text = this.getxxx(itemData)\n - api\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\u4E0EUI\u6570\u636E\u7ED1\u5B9A\u4F8B\u5B50\uFF1A\n ```typescript\n // \u540E\u7AEFxxxApi\u8FD4\u56DE\u7684xxxResponse\u6570\u636E\u7ED3\u6784\n export interface getRecommendBookListResponse {\n code: number\n msg: string\n data: {\n list: [\n {\n id: number // \u4E66\u7C4DID\n title: string // \u4E66\u7C4D\u6807\u9898\n author: string // \u4F5C\u8005\u540D\u79F0\n coverUrl: string // \u5C01\u9762\u56FE\u7247URL\n description: string // \u4E66\u7C4D\u7B80\u4ECB\n categoryName: string // \u5206\u7C7B\u540D\u79F0\n }\n ] // \u4E66\u7C4D\u5217\u8868\n total: number // \u603B\u6570\u91CF\n page: number // \u5F53\u524D\u9875\u7801\n size: number // \u6BCF\u9875\u6570\u91CF\n }\n }\n ...\n private bindDataFromNet(getRecommendBookListData: getRecommendBookListResponse) {\n // \u8BBE\u7F6E\u4E66\u7C4D\u5217\u8868\u6570\u636E\n this.recommendBookList.setDataList(getRecommendBookListData.data.listData)\n // \u8BBE\u7F6E\u7B2C1\u4E2Aitem\u8282\u70B9\u6570\u636E\n const listItemData = getRecommendBookListData.data.listData[0]\n this.recommendBookCover1.src = listItemData.coverUrl\n this.recommendBookTitle1.text = listItemData.title\n this.recommendBookAuthor1.text = listItemData.author\n ...\n // \u8BBE\u7F6E\u8F6E\u64AD\u6570\u636E\n this.recommendViewPager.setDataList(getRecommendBookListData.data.viewPagerData)\n // \u8BBE\u7F6E\u7B2C1\u4E2Aitem\u8282\u70B9\u6570\u636E\n const viePagerItemData = getRecommendBookListData.data.viewPagerData[0]\n this.recommendImage1.src = viePagerItemData.coverUrl\n this.carouselTitle1.text = this.getCarouselTitleData(viePagerItemData) // \u7531\u4E8E\u6709\u590D\u6742\u7684\u903B\u8F91\u5904\u7406\uFF0C\u6240\u4EE5\u5FC5\u987B\u8981\u5C01\u88C5\u4E00\u4E2A\u65B9\u6CD5\u6765\u83B7\u53D6\n }\n private getCarouselTitleData(itemData: any) {\n let title = ''\n if (itemData.title) {\n title = itemData.title\n } else if (itemData.description) {\n title = itemData.description\n } else {\n title = itemData.categoryName\n }\n return title\n }\n ...\n ```\n\n## 10. \u8F6E\u64ADViewPager\u7684\u6307\u793A\u5668\u70B9\u7684\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u4E0D\u5F97\u5728ts\u4EE3\u7801\u91CC\u9762\u8FDB\u884C\uFF0C\u56E0\u4E3AViewPager\u7684\u6307\u793A\u5668\u70B9\u7684\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\u5DF2\u7ECF\u81EA\u52A8\u5B9E\u73B0\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u518D\u624B\u52A8\u5B9E\u73B0\u3002\n\n## 11. \u4E25\u683C\u9075\u5B88\u4EE3\u7801\u89C4\u8303\u4E0E\u9650\u5236\n - \u3010\u7C7B\u578B\u4E0E\u6CDB\u578B\u3011\n - \u5728\u7EE7\u627F\u81EA`Page`\u7684\u7C7B\u4E2D\uFF0C\u7981\u6B62\u975E\u9759\u6001\u6210\u5458\u4F7F\u7528DOM\u7C7B\u578B\u6216\u5176\u4ED6\u81EA\u5B9A\u4E49\u7981\u6B62\u7C7B\u578B\u3002\n - \u7981\u6B62\u4F7F\u7528UILIB\u7C7B\u578B\u7684\u6570\u7EC4\u4F5C\u4E3A\u6210\u5458\u3001\u5C40\u90E8\u53D8\u91CF\u3001\u65B9\u6CD5\u5165\u53C2\u6216\u8FD4\u56DE\u503C\u3002\n - \u7981\u6B62\u7C7B\u6210\u5458\u4E0E\u5C40\u90E8\u53D8\u91CF\u663E\u5F0F\u58F0\u660E\u4E3A`any`\uFF0C\u4EE5\u53CA\u4F7F\u7528`as any`\u3002\n - `Ref<T>`\u7684`T`\u4EC5\u5141\u8BB8\uFF1A`number`\u3001`string`\u3001`boolean`\u3001`any`\u3001`Array<any>`\u53CA\u5176`| null`\u53D8\u4F53\u3002\n - \u7981\u6B62\u4F7F\u7528`Symbol`\u53CA\u5176\u76F8\u5173API\u3002\n - \u7981\u6B62\u5168\u5C40\u53D8\u91CF\u3001\u5C40\u90E8\u53D8\u91CF\u3001\u65B9\u6CD5\u5165\u53C2\u3001\u8FD4\u56DE\u503C\u7684\u8054\u5408\u7C7B\u578B\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u7981\u6B62\u58F0\u660E`interface`\uFF0C\u4E14\u8BE5\u6587\u4EF6\u4EC5\u5141\u8BB8\u4E00\u4E2A`class`\u58F0\u660E\u3002\n - \u975E`src/lib`\u76EE\u5F55\u7684`ts`\u6587\u4EF6\u4E2D\uFF0C`interface`\u53EA\u5141\u8BB8\u5B9A\u4E49\u5C5E\u6027\uFF1B\u7981\u6B62\u5176\u4ED6\u58F0\u660E\u3002\n - \u7981\u6B62\u4F7F\u7528`Partial<T>`\u3002\n - \u7981\u6B62\u884C\u5185\u51FD\u6570\u7C7B\u578B\u3001\u51FD\u6570\u7C7B\u578B\u522B\u540D\u4E0E\u5185\u8054\u5BF9\u8C61\u7C7B\u578B\u5B57\u9762\u91CF\uFF08\u5C5E\u6027\u9664\u5916\uFF09\u3002\n - \u7981\u6B62\u5B9A\u4E49\u7C7B\u578B\u5C5E\u4E8EUILIB\u7684\u975E\u7C7B\u6210\u5458\u53D8\u91CF\u3002\n - \u7981\u6B62\u5C06UILIB\u7C7B\u578B\u7684\u503C\u8D4B\u7ED9\u975EUILIB\u7C7B\u578B\u7684\u76EE\u6807\u3002\n - \u3010\u5BFC\u5165\u3011\n - \u5F53\u7C7B\u8DEF\u5F84\u5728`src/lib`\u76EE\u5F55\u4E0B\u65F6\uFF0C\u7981\u6B62\u5BF9\u8FD9\u4E2A\u7C7B\u4F7F\u7528\u5BFC\u5165\u91CD\u547D\u540D\u6216\u522B\u540D\u3002\n - \u3010\u5BFC\u51FA\u3011\n - \u5728\u672A\u7EE7\u627F`Page`\u6216`BaseApi`\u7684\u6587\u4EF6\u4E2D\uFF0C\u4E14\u7C7B\u540D\u4E0D\u7B49\u4E8E`src/lib`\u548C`src/lib/uilib`\u76EE\u5F55\u4E0B\u7684\u7C7B\u540D\u3001\u4E14\u4E0D\u4E3A`Application`\u65F6\uFF0C\u4EC5\u5141\u8BB8`export default class`\u3001`export class`\u3001`export interface`\uFF1B\u7981\u6B62\u5176\u4ED6\u5BFC\u51FA\u5F62\u5F0F\u3002\n - \u3010\u65B9\u6CD5\u4E0E\u51FD\u6570\u3011\n - \u7981\u6B62\u4F7F\u7528`setInterval`\u3001`clearInterval`\u3001`setTimeout`\uFF1B\u4F7F\u7528`AllFunction`\u5BF9\u5E94\u65B9\u6CD5\u3002\n - \u7981\u6B62\u4F7F\u7528`localStorage/sessionStorage`\u7684`setItem/getItem`\uFF1B\u4F7F\u7528`AllFunction`\u6570\u636E\u5E93\u65B9\u6CD5\u3002\n - \u7981\u6B62`Date.now()`\u4E0E`new Date()`\uFF1B\u4F7F\u7528`AllFunction`\u65F6\u95F4\u65B9\u6CD5\u3002\n - \u7981\u6B62\u5728\u51FD\u6570\u5185\u5B9A\u4E49\u5185\u90E8\u51FD\u6570\uFF1B\u8BF7\u5B9A\u4E49\u4E3A\u7C7B\u79C1\u6709\u65B9\u6CD5\u3002\n - \u7981\u6B62`JSON.stringify/JSON.parse`\uFF1B\u6309\u4E0A\u4E0B\u6587\u4F7F\u7528`JsonArray.stringify/parse`\u6216`JsonObject.stringify/parse`\u3002\n - `JsonObject.stringify/parse`\u4E0E`JsonArray.stringify/parse`\u7684\u53C2\u6570\u7981\u6B62\u4F20\u5165`class`\u5BF9\u8C61\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u7C7B\u4E2D\u9759\u6001\u8C03\u7528\u7EE7\u627F`BaseApi`\u7684\u7C7B\u65B9\u6CD5\u65F6\uFF1A\u65B9\u6CD5\u540D\u5FC5\u987B\u5339\u914D`request_<10\u4F4D\u5B57\u6BCD\u6570\u5B57>`\uFF0C\u53C2\u6570\u5FC5\u987B\u4E3A3\u4E2A\uFF0C\u4E14\u7B2C2\u30013\u4E2A\u53C2\u6570\u7C7B\u578B\u4E0D\u5F97\u4E3A`any`\u6216\u6CDB\u578B\u3002\n - \u5728\u7EE7\u627F`BaseApi`\u7684\u7C7B\u4E2D\uFF0C`request_`\u5F00\u5934\u7684\u9759\u6001\u65B9\u6CD5\u540C\u6837\u5FC5\u987B\u6EE1\u8DB3\u547D\u540D\u4E0E3\u53C2\u89C4\u5219\u3002\n - \u7981\u6B62\u65B9\u6CD5\u5185\u5C40\u90E8\u53D8\u91CF\u91CD\u540D\u3002\n - `findViewById`\u4EC5\u5141\u8BB8\u7528\u4E8E\u7C7B\u6210\u5458\u53D8\u91CF\u521D\u59CB\u5316\uFF0C\u5982`this.findViewById('xxx') as <\u5177\u4F53\u7C7B\u578B>`\uFF1B\u5176\u4ED6\u4F4D\u7F6E\u7981\u6B62\u8C03\u7528\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u7981\u6B62\u4F7F\u7528`Array.isArray()`\uFF1B\u4F7F\u7528`AllFunction.isArray()`\u3002\n - \u5728\u672A\u7EE7\u627F`Page`\u6216`BaseApi`\u7684\u7C7B\u4E2D\u7981\u6B62\u58F0\u660E\u65B9\u6CD5\uFF08`constructor`\u9664\u5916\uFF09\uFF1B\u82E5\u7C7B\u540D\u7B49\u4E8E`src/lib`\u548C`src/lib/uilib`\u76EE\u5F55\u4E0B\u7684\u7C7B\u540D\u5219\u4E0D\u53D7\u6B64\u9650\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u7C7B\u4E2D\u8C03\u7528`findViewById`\u65F6\uFF0C\u53C2\u6570\u5FC5\u987B\u5B58\u5728\u4E8E\u540C\u76EE\u5F55\u540C\u540D\u58F0\u660E\u5F0FUI\u7684`.id('...')`\u5217\u8868\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u8C03\u7528`watch`\uFF08\u4F4D\u4E8E`Ref.ts`\uFF09\u65F6\uFF0C\u7B2C\u4E00\u4E2A\u53C2\u6570\u5FC5\u987B\u662F\u5B57\u9762\u91CF\u6570\u7EC4`[ref1, ref2]`\uFF0C\u7981\u6B62\u53D8\u91CF\u4F20\u9012\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u5B9A\u4E49UILIB\u7C7B\u578B\u6210\u5458\u53D8\u91CF\u65F6\uFF0C\u5FC5\u987B\u4F7F\u7528`this.findViewById('xxx') as Xxx`\u521D\u59CB\u5316\u3002\n - \u3010\u6570\u7EC4\u65B9\u6CD5\u3011\n - \u7981\u6B62\u4F7F\u7528`map`\u3001`filter`\u3001`find`\u3001`findIndex`\u3001`reduce`\u3001`reduceRight`\u3001`every`\u3001`some`\u3001`sort`\u3001`flatMap`\uFF1B\u7EDF\u4E00\u4F7F\u7528`for-i`\u5B9E\u73B0\u3002\n - \u3010\u8BED\u6CD5\u9650\u5236\u3011\n - \u7981\u6B62\u4F7F\u7528`||`\u8FDB\u884C\u8D4B\u503C\u3001\u4F20\u53C2\u6216\u521D\u59CB\u5316\uFF1B\u6539\u7528\u4E09\u5143\u8868\u8FBE\u5F0F\u3002\n - \u7981\u6B62\u5BF9\u8C61\u5C55\u5F00\u8BED\u6CD5`...`\u514B\u9686\u5BF9\u8C61\uFF1B\u6539\u7528\u624B\u52A8\u8D4B\u503C\u3002\n - \u7981\u6B62\u7C7B\u6210\u5458\u53D8\u91CF\u4E0E\u65B9\u6CD5\u5165\u53C2\u540C\u540D\uFF0C\u6216\u4E0E\u65B9\u6CD5\u5185\u5C40\u90E8\u53D8\u91CF\u540C\u540D\u3002\n - \u7981\u6B62\u4F7F\u7528`try/catch/finally`\u4E0E\u6B63\u5219\u8868\u8FBE\u5F0F\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u7981\u6B62\u4F7F\u7528`typeof`\uFF1B\u6539\u7528`AllFunction.isString/isNumber/isBoolean/isObject`\u3002\n - \u7981\u6B62\u5BF9\u8C61\u5C5E\u6027\u7B80\u5199\uFF08`{ a }`\uFF09\uFF1B\u4F7F\u7528\u5B8C\u6574\u5199\u6CD5\uFF08`{ a: a }`\uFF09\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\uFF0C\u7981\u6B62\u5BF9UILIB\u7C7B\u578B\u53D8\u91CF\u8FDB\u884C\u771F\u503C\u5224\u65AD\u3002\n - \u3010\u8865\u5145\u7684\u9879\u76EE\u89C4\u5219\u3011\n - \u7981\u6B62\u4F7F\u7528`for...in`\uFF1B\u4F7F\u7528`Object.keys`+`for-i`\u3002\n - \u7981\u6B62`async/Promise`\uFF08\u542B`Promise.race/Promise.all`\uFF09\uFF1B\u6240\u6709\u5F02\u6B65\u64CD\u4F5C\u4F7F\u7528\u7BAD\u5934\u51FD\u6570\u3002\n - \u7981\u6B62\u4F7F\u7528\u6D4F\u89C8\u5668\u73AF\u5883\u7684`lib.dom.d.ts`\u65B9\u6CD5\u4E8ENode\u73AF\u5883\u3002\n - \u7981\u6B62\u4FEE\u6539\u3001\u589E\u5220`src/lib`\u53CA\u5176\u5B50\u76EE\u5F55\u4E2D\u7684\u6587\u4EF6\u3002\n\n";
1
+ export declare const understandingCodeFrameworkTemplate = "\n# **\u5FC5\u987B\u5148\u7406\u89E3\u9879\u76EE\u4EE3\u7801\u6846\u67B611\u4E2A\u77E5\u8BC6\u70B9**\n## 1. **\u7406\u89E3View\u7EC4\u4EF6\u7684\u58F0\u660E\u548C\u4F7F\u7528\u89C4\u5219**\n - \u8FD9\u4E0D\u662Fhtml\u3001react\u7B49\u5F00\u53D1\uFF0C\u8FD9\u662F\u4E00\u4E2A\u65B0\u7684\u5F00\u53D1\u6846\u67B6\uFF0C\u662F\u57FA\u4E8Esrc/lib/uilib\u6587\u4EF6\u5939\u91CC\u9762\u7684UI\u7EC4\u4EF6\u5E93\u6765\u5F00\u53D1\u7684\n - View\u7EC4\u4EF6\u7684\u57FA\u7C7B\u662FBaseView\uFF0C\u5BB9\u5668\u57FA\u7C7B\u662FBaseContainerView\uFF0C\u6240\u6709View\u7EC4\u4EF6\u90FD\u7EE7\u627F\u81EABaseView\n - \u67E5\u770B'src/lib/uilib/'\u6587\u4EF6\u5939\u4E0B\u9762\u7684\u6587\u4EF6\u540D\u5B57\uFF0C\u7406\u89E3\u603B\u5171\u6709\u591A\u5C11\u79CDUI\u7EC4\u4EF6\n - View\u7EC4\u4EF6\u7684\u58F0\u660E\u5FC5\u987B\u5728\u7C7B\u6587\u4EF6\u5F00\u59CB\u65F6\u5148\u58F0\u660E\uFF0C\u5E76\u4E14\u5FC5\u987B\u8981\u58F0\u660E\u5177\u4F53\u7684View\u7EC4\u4EF6\u7C7B\u578B\uFF0C\u4E0D\u5F97\u58F0\u660E\u4E3ABaseView\uFF0C\u4E0D\u5F97\u5728\u4EFB\u4F55\u51FD\u6570\u4F53\u91CC\u9762\u901A\u8FC7findViewById\u6765\u58F0\u660EView\u7EC4\u4EF6\uFF0C\u6BD4\u5982\uFF1A\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n ```typescript\n public class HomePage extends Page {\n private nameTextView: TextView = this.findViewById('nameTextView') as TextView\n ....\n }\n ```\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF08\u6CA1\u6709\u58F0\u5177\u4F53\u7684View\u7EC4\u4EF6\u7C7B\u578B\uFF09\uFF1A\n ```typescript\n private nameTextView = this.findViewById('nameTextView')\n ```\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF08\u5728\u51FD\u6570\u4F53\u91CC\u9762\u901A\u8FC7findViewById\u6765\u58F0\u660EView\u7EC4\u4EF6\uFF09\uFF1A\n ```typescript\n private oneFunction() {\n const nameTextView: TextView = this.findViewById('nameTextView') as TextView\n ....\n }\n ```\n - \u6240\u6709View\u7EC4\u4EF6\u7684\u9009\u4E2D\u72B6\u6001\u3001\u805A\u7126\u72B6\u6001\u3001\u7981\u7528\u72B6\u6001\u7684\u53D8\u5316\u90FD\u5FC5\u987B\u901A\u8FC7`setStation(station: ViewStation)`\u51FD\u6570\u6765\u8BBE\u7F6E\uFF0C\u4E0D\u80FD\u76F4\u63A5\u8BBE\u7F6E\u7EC4\u4EF6\u7684UI\u5C5E\u6027\uFF0C\u53EA\u9700\u8981\u8BBE\u7F6E\u7EC4\u4EF6\u7684station\u5C5E\u6027\u5373\u53EF\u81EA\u52A8\u66F4\u65B0\u7EC4\u4EF6\u7684UI\u6837\u5F0F\n - \u6240\u6709View\u7EC4\u4EF6\u7684\u663E\u793A\u3001\u9690\u85CF\u5360\u4F4D\u3001\u9690\u85CF\u4E0D\u5360\u4F4D\u7684\u8BBE\u7F6E\u90FD\u5FC5\u987B\u4F7F\u7528View\u7684`visibility`\u5C5E\u6027\u8FDB\u884C\u8BBE\u7F6E\uFF0C\u4E0D\u5F97\u4F7F\u7528`station`\u5C5E\u6027\u3002\n - \u6240\u6709View\u7EC4\u4EF6\u7684normal\u3001readOnly\u3001focus\u3001selected\u3001disabled\u72B6\u6001\u7684\u8BBE\u7F6E\u90FD\u5FC5\u987B\u4F7F\u7528View\u7684`station`\u5C5E\u6027\u8FDB\u884C\u8BBE\u7F6E\u3002\n\n## 2. **\u7406\u89E3\u552F\u4E00\u7684\u80FD\u529B\u65B9\u6CD5AllFunction.ts\u4EE5\u53CAjson\u76F8\u5173\u4EE3\u7801**\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u9605\u8BFB\u5E76\u7406\u89E3'src/lib/AllFunction.ts'\u6587\u4EF6\uFF0C\u7406\u89E3\u8BE5\u5DE5\u7A0B\u80FD\u4F7F\u7528\u7684\u552F\u4E00\u7684\u80FD\u529B\u65B9\u6CD5\n - \u8BF7\u4E25\u683C\u6309\u7167\u552F\u4E00\u7684\u80FD\u529B\u65B9\u6CD5AllFunction.ts\uFF0C\u4E0D\u8981\u65B0\u589E\u3001\u5220\u9664\u6216\u4FEE\u6539\u4EFB\u4F55AllFunction\u63A5\u53E3\u58F0\u660E\uFF1B\u4E5F\u4E0D\u8981\u8C03\u7528\u5176\u4ED6\u672A\u5728AllFunction\u4E2D\u51FA\u73B0\u7684\u51FD\u6570\u6216\u6A21\u5757\n \n## 3. **\u7406\u89E3Ref\u3001watch**\n - Ref\u7684\u6570\u636E\u7C7B\u578B\u53EA\u80FD\u662F\u4EE5\u4E0B5\u4E2D\u7C7B\u578B\uFF1A\u6570\u5B57\u4F7F\u7528Ref<number>\uFF0C\u5B57\u7B26\u4E32\u4F7F\u7528Ref<string>\uFF0C\u5E03\u5C14\u91CF\u4F7F\u7528Ref<boolean>\uFF0C\u5BF9\u8C61\u4F7F\u7528Ref<any>\uFF0C\u6570\u7EC4\u4F7F\u7528Ref<Array<any>>\u6216Ref<Array<any> | null>\u6216Ref<any[]>\u6216Ref<any[] | null>\u3002\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u9605\u8BFB\u5E76\u7406\u89E3'src/lib/Ref.ts'\u6587\u4EF6\uFF0C\u7406\u89E3Ref\u548Cwatch\u7684\u5B9A\u4E49\u7528\u6CD5\n - watch\u662F\u76D1\u542CRef\u7684\u53D8\u5316\uFF0C\u7136\u540E\u505A\u76F8\u5173UI\u66F4\u65B0\u6216\u5176\u4ED6\u4E1A\u52A1\u903B\u8F91\uFF0C\u7B2C\u4E00\u4E2A\u53C2\u6570\u662F\u76D1\u542C\u7684Ref\u6570\u7EC4\uFF0C\u7B2C\u4E8C\u4E2A\u53C2\u6570\u662F\u76D1\u542C\u7684\u56DE\u8C03\u51FD\u6570\uFF0C\u56DE\u8C03\u51FD\u6570\u4E2D\u53EF\u4EE5\u505A\u76F8\u5173UI\u66F4\u65B0\u6216\u5176\u4ED6\u4E1A\u52A1\u903B\u8F91\u3002\n - Ref\u662F\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0Cwatch\u662F\u76D1\u542CRef\u7684\u53D8\u5316\uFF0C\u7136\u540E\u505A\u76F8\u5173UI\u66F4\u65B0\u6216\u5176\u4ED6\u4E1A\u52A1\u903B\u8F91\uFF0C\u6BD4\u5982\uFF1A\n ```typescript\n private nameTextRef: Ref<string> = ref('')\n private otherCountRef: Ref<number> = ref(0)\n watch([this.nameTextRef, this.otherCountRef], () => {\n // \u53EF\u4EE5\u5148\u76F8\u5173\u7684UI\u66F4\u65B0\u6216\u4E1A\u52A1\u903B\u8F91\n if (this.otherCountRef.value > 5) {\n this.nameTextView.text = this.nameTextRef.value + '5'\n } else {\n this.nameTextView.text = this.nameTextRef.value + '10'\n }\n })\n ```\n - `src/lib/uilib/Ref.ts`\u91CC\u9762\u7684`watch`\u51FD\u6570\uFF0C\u7B2C\u4E00\u4E2A\u5165\u53C2`refs: Ref<T>[]`\u7EDD\u5BF9\u7981\u6B62\u5148\u58F0\u660E\u5C40ref\u6570\u7EC4\u90E8\u53D8\u91CF\u518D\u4F20\u5165\uFF0C\u6B63\u786E\u7684\u5199\u6CD5\u5E94\u8BE5\u662F\u76F4\u63A5\u5199\u6570\u7EC4\uFF1A`[ref1, ref2]`\u5C31\u884C\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF1A\n ``` typescript\n const refArray = [ref1, ref2]\n watch(refArray, (newValues: T[]) => {\n // \u76D1\u542Cref1\u548Cref2\u7684\u53D8\u5316\n })\n ```\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n ``` typescript\n watch([ref1, ref2], (newValues: T[]) => {\n // \u76D1\u542Cref1\u548Cref2\u7684\u53D8\u5316\n })\n ```\n\n## 4. **\u7406\u89E3setDataList\u65B9\u6CD5\u7684\u9759\u6001\u6570\u636E\u4E0E\u52A8\u6001\u6570\u636E\u573A\u666F**\n - \u5BF9\u4E8E\u52A8\u6001\u6570\u636E\u5BB9\u5668ViewPager\u3001ListView\u7684setDataList\u65B9\u6CD5\uFF0C\u5982\u679C\u6570\u636E\u662F\u52A8\u6001\u7684\uFF0C\u6BD4\u5982\uFF1A\u4ECE\u540E\u7AEF\u63A5\u53E3\u83B7\u53D6\u7684\uFF0C\u624D\u80FD\u4F7F\u7528setDataList\u65B9\u6CD5\u6765\u8BBE\u7F6E\u6570\u636E\u3002\u9759\u6001\u6570\u636E\u5DF2\u7ECF\u5728UI\u9875\u9762\u4E0A\u5199\u597D\u4E86\uFF0C\u4F60\u4E0D\u5F97\u4F7F\u7528setDataList\u65B9\u6CD5\u6765\u8BBE\u7F6E\u6570\u636E\u3002\n - \u5224\u65AD\u6807\u51C6\uFF1A\u5982\u679CUI\u9875\u9762\u4E2D\u5DF2\u7ECF\u6709\u5B8C\u6574\u7684\u8F6E\u64AD\u9879\u76EE/\u5217\u8868\u9879\u76EE\uFF0C\u5C31\u662F\u9759\u6001\u6570\u636E\uFF0C\u5982\u679C\u662F\u7F51\u7EDCAPI\u8FD4\u56DE\u7684\u6570\u636E\u5217\u8868\u5C31\u662F\u52A8\u6001\u6570\u636E\u3002\n - \u2705 \u9759\u6001\u6570\u636E\u5BB9\u5668\uFF08UI\u9875\u9762\u4E2D\u5DF2\u5199\u597D\u5185\u5BB9\uFF09\uFF1A\u4E0D\u4F7F\u7528setDataList()\n - \u2705 \u52A8\u6001\u6570\u636E\u5BB9\u5668\uFF08\u9700\u8981\u4ECEAPI\u83B7\u53D6\uFF09\uFF1A\u624D\u4F7F\u7528setDataList()\n\n## 5. **View\u7EC4\u4EF6\uFF0C\u7406\u89E3\u6BCF\u4E2A\u7EC4\u4EF6\u53EF\u80FD\u91CC\u9762\u5DF2\u7ECF\u6709\u4E86\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u5982\u679C\u7EC4\u4EF6\u91CC\u9762\u5DF2\u7ECF\u6709\u4E86\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u90A3\u4E48\u4F60\u4E0D\u5F97\u518D\u81EA\u5DF1\u521B\u5EFAref\u53D8\u91CF\u6216\u8005\u4F7F\u7528onSelectChange\u7B49\u56DE\u8C03\u89E6\u53D1UI\u66F4\u65B0**\n - \u4F8B\u5B50\uFF1AViewPager\u7684currentSelectIndex\u548CcurrentSelectIndexRef\u5C5E\u6027\u5DF2\u7ECF\u662F\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528currentSelectIndexRef\u6765\u7ED1\u5B9A\u81EA\u52A8\u66F4\u65B0UI\u3002\n public initView() {\n this.showIndexTextView.text = this.viewPager.currentSelectIndexRef.value + 1 + '/' + this.viewPager.dataList.length\n }\n - \u4F8B\u5B50\uFF1AViewPager\u7684currentSelectIndex\u548CcurrentSelectIndexRef\u5C5E\u6027\u5DF2\u7ECF\u662F\u54CD\u5E94\u5F0F\u6570\u636E\u6E90\uFF0C\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528currentSelectIndexRef\u6765\u7ED1\u5B9A\u81EA\u52A8\u66F4\u65B0UI\uFF0C\u6BD4\u5982\uFF1A\n ```typescript\n public initView() {\n watch([this.viewPager.currentSelectIndexRef], () => {\n this.showIndexTextView.text = this.viewPager.currentSelectIndexRef.value + 1 + '/' + this.viewPager.dataList.length\n })\n ```\n - tab\u7EC4\u4EF6\u548C\u8F6E\u64AD\u7EC4\u4EF6\u7684\u9009\u62E9\u53D8\u5316\u76D1\u542C\uFF0C\u5FC5\u987B\u4F7F\u7528`ViewPager`\u6216`TabContainer`\u7684`onSelectChange(func: (item: any, position: number) => void)`\u51FD\u6570\u6765\u76D1\u542C\u9009\u62E9\u53D8\u5316\n\n## 6. **\u7406\u89E3\u9875\u9762\u8DF3\u8F6C**\n - \u9875\u9762\u8DF3\u8F6C\u5FC5\u987B\u4F7F\u7528AllFunction.startPage\u5B9E\u73B0\uFF0CstartPage\u4F20\u5165Page\u7684\u5B50\u7C7B\u5BF9\u8C61\uFF0C\u5982\uFF1AAllFunction.startPage(new ProductPage(this.productID))\u3002\n - \u274C \u9875\u9762\u8DF3\u8F6C\u4E0D\u9700\u8003\u8651\u6A21\u5757\u5316\u3001\u5FAA\u73AF\u4F9D\u8D56\u3001\u6E10\u8FDB\u5F0F\u5F00\u53D1\uFF0C\u7EDD\u5BF9\u7981\u6B62\u5C4F\u853D\u9875\u9762\u8DF3\u8F6C\u7684\u4EE3\u7801\uFF0C\u6240\u6709\u9875\u9762\u90FD\u5DF2\u7ECF\u5B58\u5728\uFF0C\u4E0D\u4F1A\u51FA\u73B0\u7F16\u8BD1\u51FA\u9519\u7684\uFF0C\u5FC5\u987B\u660E\u786E\u5199\u4E0A\u9875\u9762\u8DF3\u8F6C\u7684\u4EE3\u7801\u548C\u76EE\u6807\u9875\u9762\u6240\u9700\u7684\u8DF3\u8F6C\u53C2\u6570\u3002\n - \u5728Application.ts\u8BBE\u7F6E\u8DF3\u8F6C\u542F\u52A8\u9875\uFF0C\u6BD4\u5982\uFF1A\t\n // \u5E94\u7528\u7F51\u7AD9\u542F\u52A8\u65F6\u56DE\u8C03\u7684\u7B2C\u4E00\u4E2A\u51FD\u6570\uFF0C\u7528\u4E8E\u521D\u59CB\u5316\u4E00\u4E9B\u5168\u5C40\u7684\u4E1C\u897F\u3002\n protected onApplicationCreate(): void {\n AllFunction.startPage(new SplashPage())\n }\n - \u2705 \u5F15\u5165\u5176\u4ED6\u7C7B\u53EA\u5141\u8BB8\u4E00\u79CD\u5199\u6CD5\uFF1A\u5728\u7C7B\u6587\u4EF6\u9876\u90E8\u8FDB\u884Cimport\uFF1Aimport GuidePage from '../guidePage/guidePage'\u3002\n - \u274C \u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528\u52A8\u6001import\u7684\u5199\u6CD5\uFF0C\u7A0B\u5E8F\u5E95\u5C42\u5DF2\u7ECF\u5904\u7406\u597D\u5FAA\u73AF\u4F9D\u8D56\u95EE\u9898\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u8003\u8651\uFF0C\u6BD4\u5982\u7EDD\u5BF9\u7981\u6B62\u4EE5\u4E0B\u5199\u6CD5\uFF1A\n // \u4F7F\u7528\u52A8\u6001\u5BFC\u5165\u907F\u514D\u5FAA\u73AF\u4F9D\u8D56\n import('../guidePage/guidePage').then(({ default: GuidePage }) => {\n AllFunction.startPage(new GuidePage())\n })\n - \u274C \u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528require\u7684\u5199\u6CD5\uFF0C\u7A0B\u5E8F\u5E95\u5C42\u5DF2\u7ECF\u5904\u7406\u597D\u5FAA\u73AF\u4F9D\u8D56\u95EE\u9898\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u8003\u8651\uFF0C\u6BD4\u5982\u7EDD\u5BF9\u7981\u6B62\u4EE5\u4E0B\u5199\u6CD5\uFF1A\n require('../guidePage/guidePage').default\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\u662F\uFF1AAllFunction.startPage(new GuidePage())\u3002\u7136\u540E\u5728\u7C7B\u6587\u4EF6\u9876\u90E8\u8FDB\u884Cimport\uFF1Aimport GuidePage from '../guidePage/guidePage'\u3002\n - \u5982\u679C\u9875\u9762\u8DF3\u8F6C\u9700\u8981\u4F20\u9012\u53C2\u6570\uFF0C\u90A3\u4E48\u9700\u8981\u4F7F\u7528Page\u7684\u5B50\u7C7B\u6784\u9020\u51FD\u6570\u6765\u4F20\u9012\u53C2\u6570\uFF0C\u6BD4\u5982\uFF1AAllFunction.startPage(new GuidePage(this.productID))\u3002\n - \u5728\u5B9E\u73B0\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\u7684\u65F6\u5019\uFF0C\u5FC5\u987B\u4E25\u683C\u6309\u7167\u4EE5\u4E0B\u4E09\u6B65\u6765\u5B9E\u73B0\uFF1A\n - **\u7B2C\u4E00\u6B65\uFF1A\u5148\u5206\u6790\u8DF3\u8F6C\u7684\u76EE\u6807\u9875\u9762\u9700\u8981\u4F20\u9012\u54EA\u4E9B\u53C2\u6570**\n - **\u7B2C\u4E8C\u6B65\uFF1A\u4FEE\u6539\u76EE\u6807\u9875\u9762\u6784\u9020\u51FD\u6570**\uFF1A\n ```typescript\n export default class ReadingPage extends Page {\n private bookId: number\n private chapterTitle: string\n \n constructor(bookId: number, chapterTitle: string) {\n super()\n this.bookId = bookId\n this.chapterTitle = chapterTitle\n }\n }\n ```\n - **\u7B2C\u4E09\u6B65\uFF1A\u4FEE\u6539\u8DF3\u8F6C\u4EE3\u7801**\n ```typescript\n const bookData = this.readingHistoryDataRef.value[0]\n AllFunction.startPage(new ReadingPage(bookData.id, bookData.chapterTitle))\n ```\n\n## 7. **\u7406\u89E3\u57FA\u7840\u5F00\u53D1\u89C4\u5219**\n - lib\u6587\u4EF6\u5939\u91CC\u9762\u7684\u4EE3\u7801\u6587\u4EF6\u90FD\u662F\u5185\u7F6E\u6846\u67B6\u4EE3\u7801\uFF0C\u7EDD\u5BF9\u7981\u6B62\u5BF9lib\u6587\u4EF6\u5939\u7684\u4EE3\u7801\u8FDB\u884C\u589E\u5220\u6539\u64CD\u4F5C\n - \u6240\u6709Page\u7684\u5B50\u7C7B\uFF0C\u90FD\u5141\u8BB8\u6DFB\u52A0\u6784\u9020\u51FD\u6570\u548C\u6784\u9020\u51FD\u6570\u7684\u53C2\u6570\uFF0C\u8FD9\u4E9B\u53C2\u6570\u5C31\u7528\u6765\u9875\u9762\u8DF3\u8F6C\u65F6\u9875\u9762\u4E4B\u95F4\u4F20\u9012\u6570\u636E\u4F7F\u7528\uFF0C\u6BD4\u5982\uFF1A\u5546\u54C1\u5217\u8868\u9875ProjectListPage\u8DF3\u5230\u5546\u54C1\u8BE6\u60C5\u9875ProjectDetailPage\uFF0C\u90A3\u4E48ProjectListPage\u5E94\u8BE5\u8981\u4F20\u7ED9ProjectDetailPage\u4E00\u4E2A\u53C2\u6570\uFF1AproductID\u3002\u6240\u4EE5\uFF0CProjectDetailPage\u7684\u9875\u9762\u53C2\u6570\u58F0\u660E\u548C\u6784\u9020\u51FD\u6570\u5E94\u8BE5\u662F\u8FD9\u6837\u5199\uFF1A\n private productID: string\n constructor(productID: string) {\n super()\n this.productID = productID\n }\u3002\n - \u4EFB\u4F55\u9875\u9762\uFF08\u7279\u522B\u662F\u95EA\u5C4F\u9875\uFF09\u7684\u4E1A\u52A1\u903B\u8F91\u7EDD\u5BF9\u4E0D\u80FD\u653E\u5230Application.ts\u8FDB\u884C\u5904\u7406\uFF0CApplication.ts\u53EA\u8FDB\u884C\u5168\u5C40\u7F51\u7EDC\u62E6\u622A\u5904\u7406\u3001\u5168\u5C40\u9759\u6001\u53D8\u91CF\u3001\u5168\u5C40\u9759\u6001\u65B9\u6CD5\u7684\u5B9A\u4E49\u548C\u5B9E\u73B0\n - \u5982\u679C\u662F\u591A\u4E2A\u9875\u9762\u5171\u7528\u7684\u6570\u636E\u53D8\u91CF\uFF0C\u53EF\u4EE5\u8003\u8651\u58F0\u660E\u4E3A\u5168\u5C40\u9759\u6001\u53D8\u91CF\uFF0C\u5E76\u5728Application.ts\u4E2D\u8FDB\u884C\u58F0\u660E\u3002\n - \u5168\u5C40\u9759\u6001\u53D8\u91CF\u5728\u5173\u95EDAPP\u6216\u8005\u7F51\u9875\u540E\u4F1A\u6E05\u7406\u6389\u7684\uFF0C\u6240\u4EE5\u4F60\u8981\u601D\u8003\u6E05\u695A\u54EA\u4E9B\u6570\u636E\u53D8\u91CF\u9700\u8981\u6301\u4E45\u5316\u50A8\u5B58\uFF0C\u54EA\u4E9B\u662F\u5168\u5C40\u9759\u6001\u53D8\u91CF\uFF0C\u6301\u4E45\u5316\u63A5\u53E3\uFF1AsaveDatabaseXxx\u548CgetDatabaseDataXxx\uFF0C\u6BD4\u5982\u662F\u5426\u5DF2\u7ECF\u5F39\u51FA\u8FC7\u5E7F\u544A\u5F39\u6846\uFF0C\u8FD9\u4E2A\u5E94\u8BE5\u6301\u4E45\u5316\u50A8\u5B58\u3002\n - \u6240\u6709\u7684\u7F51\u7EDC\u62E6\u622A\u7684\u5168\u5C40\u7EDF\u4E00\u5904\u7406\u9700\u8981\u5728Application\u4E2D\u7684onGlobalNetSuccessIntercept(\u8054\u7F51\u6210\u529F\u540E\uFF0C\u540E\u7AEF\u4E1A\u52A1\u6B63\u786E\u4E0E\u9519\u8BEF\u90FD\u4F1A\u56DE\u8C03\u5230\u8FD9\u91CC\uFF0C\u6240\u4EE5\u5728\u8FD9\u91CC\u53EF\u7EDF\u4E00\u5904\u7406\u4E1A\u52A1\u9519\u8BEF\u7801)\u6216onGlobalNetFailIntercept(\u7F51\u7EDC\u4E0D\u901A\uFF0C\u8FDE\u63A5\u5931\u8D25\u60C5\u51B5\u4F1A\u56DE\u8C03\u5230\u8FD9\u91CC)\u91CC\u9762\u5904\u7406\u3002\n - \u9875\u9762\u5185\u7684\u7F51\u7EDC\u8BF7\u6C42\u4E1A\u52A1\u5904\u7406\u4E0D\u5F97\u5199\u5728Application\u7684onGlobalNetSuccessIntercept\u91CC\u9762\u3002\n - \u58F0\u660E\u5168\u5C40\u53D8\u91CF\u3001\u5C40\u90E8\u53D8\u91CF\u5FC5\u987B\u8981\u58F0\u660E\u6570\u636E\u7C7B\u578B\uFF0C\u5E76\u4E14\u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528any\uFF0C\u8BF7\u4F7F\u7528\u5177\u4F53\u7C7B\u578B\u6765\u58F0\u660E\n - \u5B57\u7B26\u4E32\u4E0D\u5F97\u76F4\u63A5\u8FDB\u884Cboolean\u8FD0\u7B97\u7136\u540E\u8D4B\u503C\u7ED9boolean\u7C7B\u578B\u7684\u53D8\u91CF\uFF0C\u9700\u8981\u5728\u5B57\u7B26\u4E32\u524D\u9762\u6DFB\u52A0\u4E24\u4E2A\u975E\u8FD0\u7B97\uFF1A!!\u3002\u6BD4\u5982\u6B63\u786E\u7684\u5199\u6CD5\uFF1Aconst isAdd = !!this.inputView.text && isNew\n - \u6240\u6709\u7684toast\u63D0\u793A\uFF0C\u5FC5\u987B\u8C03\u7528AllFunction.showToast\u65B9\u6CD5\u6765\u663E\u793A\uFF0C\u5E76\u4E14\u5982\u7528\u6237\u63CF\u8FF0\u6CA1\u6709\u660E\u786E\u8BF4\u660E\u9700\u8981toast\u63D0\u793A\uFF0C\u4F60\u4E0D\u5F97\u64C5\u81EA\u8FDB\u884CToast\u63D0\u793A\u3002\n - \u5EF6\u65F6\u6267\u884CAllFunction.setTimeout\u7CFB\u7EDF\u4F1A\u81EA\u52A8\u6E05\u7406timeout\uFF0C\u4EE3\u7801\u4E0A\u7EDD\u5BF9\u4E0D\u80FD\u8FDB\u884CcleaTimeout\u7B49\u7C7B\u4F3C\u64CD\u4F5C\uFF0C\u56E0\u6B64setTimeout\u4E5F\u4E0D\u9700\u8981\u58F0\u660E\u53D8\u91CF\u53BB\u63A5\u6536setTimeout\u8FD4\u56DE\u7684\u5F15\u7528\u3002\n - \u8F6E\u64ADViewPager\u5BF9\u5E94\u7684\u7D22\u5F15\u6307\u793A\u5668\u5BB9\u5668\uFF0C\u8FD9\u4E2A\u7D22\u5F15\u6307\u793A\u5668\u4E0D\u9700\u8981\u989D\u5916\u4EE3\u7801\u5B9E\u73B0\u6307\u793A\u5668\u70B9\u7684\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u672C\u8EABViewPager\u4E0EIndicatorContainer\u5E95\u5C42\u5DF2\u7ECF\u5B9E\u73B0\u4E86\u5207\u6362\u7684UI\u66F4\u65B0\u903B\u8F91\u7684\u4E86\uFF0C\u53EA\u9700\u8981viewPager.bindIndicator(indicatorContainer)\u5373\u53EF\u3002\n - \u79FB\u52A8\u7AEF\u7684ViewPager\u7684canIndicatorClick\u5C5E\u6027\u9ED8\u8BA4\u8BBE\u7F6E\u4E3Afalse\u7684\uFF0C\u9664\u975E\u7528\u6237\u660E\u786E\u8BF4\u660E\u9700\u8981\u6FC0\u6D3B\u6307\u793A\u5668\u7684\u70B9\u70B9\u51FB\u5207\u6362ViewPager\u3002\n - \u6BCF\u4E00\u4E2A\u9875\u9762(\u5982loginPage)\u5EFA\u8BAE\u5728page\u6587\u4EF6\u5939\u4E0B\u9762\u521B\u5EFA\u4E00\u4E2A\u9875\u9762\u6587\u4EF6\u5939(\u5982login)\uFF0C\u7136\u540E\u9875\u9762\u7684ts\u6587\u4EF6(\u5982loginPage.ts)\u521B\u5EFA\u5728\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u9762\uFF0C\u9875\u9762\u6587\u4EF6\u5939\u4E0B\u5982\u679C\u9700\u8981\u8FD8\u53EF\u521B\u5EFA\u4E00\u4E2A\u9875\u9762\u6570\u636Ets\u6587\u4EF6(\u5982loginPageData.ts)\uFF0C\u8FD9\u6837\u5982loginPage\u8D1F\u8D23\u4E1A\u52A1\u903B\u8F91\u548C\u4EA4\u4E92\u903B\u8F91\uFF0C\u5982loginPageData\u8D1F\u8D23\u6570\u636E\u58F0\u660E\u5B9A\u4E49\u3001\u521D\u59CB\u5316\u4E0E\u7BA1\u7406\u7B49\u3002\n\n## 8. **\u7406\u89E3\u540E\u7AEFAPI\u63A5\u53E3\u7684\u5B9A\u4E49\u4E0E\u4F7F\u7528**\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u8BFB\u53D6'src/backendApi/backendApiInfo.md'\u540E\u7AEFAPI\u4F7F\u7528\u8BF4\u660E\u6587\u4EF6\uFF0C\u5FC5\u987B\u7F13\u5B58\u8BB0\u4F4F\u6240\u6709\u53EF\u7528\u7684\u540E\u7AEFAPI\u63A5\u53E3\u5217\u8868\u3002\n - \u540E\u7AEFAPI\u63A5\u53E3\u7684\u5B9A\u4E49\u4E0E\u4F7F\u7528\uFF0C\u5FC5\u987B\u4F7F\u7528src/backendApi\u6587\u4EF6\u5939\u91CC\u9762\u7684\u5404\u79CDAPI\u7C7B\u4E2D\u5B9A\u4E49\u7684\u65B9\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4F7F\u7528\u672A\u5728backendApi\u6587\u4EF6\u5939\u4E2D\u5B9A\u4E49\u7684\u540E\u7AEFAPI\uFF0C\u6BD4\u5982\uFF1AbackendApi/account/getUserInfo.ts\uFF0C\u8FD9\u4E2A\u5C31\u662F\u8D26\u53F7\u6A21\u5757\u4E2D\u7684\u83B7\u53D6\u7528\u6237\u4FE1\u606F\u7684API\u7C7B\uFF0C\u8FD4\u56DE\u7684res\u5FC5\u987B\u58F0\u660E\u5177\u4F53\u7C7B\u578B\uFF0C\u6BD4\u5982res: getUserInfoResponse\u3002\n - request\u63A5\u53E3\u53EA\u9700\u5B9A\u4E49\u5373\u53EF\uFF0C\u4E0D\u9700\u8981\u5B9E\u73B0\uFF0C\u5E95\u5C42\u5DF2\u7ECF\u5B9E\u73B0\u3002\n - API\u7C7B\u4EE3\u7801\u793A\u4F8B\uFF1A\n ```typescript\n import BaseApi from '../BaseApi'\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\u8BF7\u6C42\u6570\u636E\n export interface postClientBizAuthLoginRequest {\n username?: string\n password?: string\n key?: string\n captcha?: string\n }\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\n export interface postClientBizAuthLoginResponse {\n code: number\n msg: string\n data: {\n access_token: string\n }\n }\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\u5931\u8D25\u8FD4\u56DE\u6570\u636E\n export interface apiFailInfo {\n msg: string\n code: number\n }\n\n // \u8D26\u53F7\u7CFB\u7EDF-\u8D26\u53F7\u5BC6\u7801\u767B\u5F55\u63A5\u53E3\n export default class postClientBizAuthLogin extends BaseApi {\n\n public static request_ArtuX1d8a6A(\n request: postClientBizAuthLoginRequest,\n success: (res: postClientBizAuthLoginResponse) => void,\n fail: (error: apiFailInfo) => void\n ): void { }\n\n }\n ```\n - API\u7C7B\u7684\u4F7F\u7528\u65B9\u5F0F\uFF1A\u5148import API\u7C7B\uFF0C\u7136\u540E\u8C03\u7528API\u7C7B\u7684request\u65B9\u6CD5\uFF0C\u6BD4\u5982\uFF1A\n import { postClientBizAuthLogin } from '../../backendApi/account/postClientBizAuthLogin'\n ...\n const request: postClientBizAuthLoginRequest = {\n username: 'admin',\n password: '123456',\n key: '123456',\n captcha: '123456'\n }\n postClientBizAuthLogin.request_ArtuX1d8a6A(request, (response: postClientBizAuthLogoutResponse) => {\n // \u8BF7\u6C42\u6210\u529F\u540E\u7684\u5904\u7406\n }, (error: apiFailInfo) => {\n // \u8BF7\u6C42\u5931\u8D25\u540E\u7684\u5904\u7406\n })\n ...\n\n## 9. **\u7406\u89E3\u8C03\u7528\u540E\u7AEFapi\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\u4E0EUI\u6570\u636E\u7ED1\u5B9A**\n - \u5982\u679C\u6709\u540E\u7AEFapi\u63A5\u53E3\u8BF7\u6C42\uFF0C\u90A3\u4E48\u5FC5\u987B\u5C01\u88C5\u4E00\u4E2A\u540D\u5B57\u53EB\u505A`bindDataFromNet`\u7684\u65B9\u6CD5\u6765\u5904\u7406\u8C03\u7528\u540E\u7AEFapi\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\u4E0EUI\u6570\u636E\u7ED1\u5B9A\u7684\u903B\u8F91\n - \u5728\u8C03\u7528\u540E\u7AEFapi\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\uFF0C\u5FC5\u987B\u4E25\u683C\u53C2\u8003`api\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\u4E0EUI\u6570\u636E\u7ED1\u5B9A\u4F8B\u5B50`\uFF0C\u9700\u8981\u6839\u636Evtype\u6765\u505A\u6570\u636E\u7ED1\u5B9A\n - vtype=\"verticalListView\"\u3001vtype=\"horizontalListView\"\u3001vtype=\"viewPager\"\u7C7B\u578B\u7684\u8282\u70B9\u7EC4\u4EF6\uFF0C\u9700\u8981\u4F7F\u7528setDataList\u65B9\u6CD5\u6765\u7ED1\u5B9A\u6570\u636E\uFF0C\u6BD4\u5982\uFF1A\n this.xxxVerticalListView.setDataList(xxxResponse.data.list)\u3001this.xxxHorizontalListView.setDataList(xxxResponse.xxxList)\u3001this.xxxViewPager.setDataList(xxxResponse.xxxList)\n - `setDataList`\u7684\u5165\u53C2\u5FC5\u987B\u662F\u76F4\u63A5\u5199\u540E\u7AEFapi\u8FD4\u56DE\u7684\u6570\u636E\u8DEF\u5F84\uFF0C\u6BD4\u5982\uFF1AxxxResponse.data.xxxList\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u4F7F\u7528\u5168\u5C40\u53D8\u91CF\u548C\u5C40\u90E8\u53D8\u91CF\u8FDB\u884C\u6570\u636E\u7ED1\u5B9A\uFF0C\u4E0D\u80FD\u5199\u5176\u4ED6\u903B\u8F91\u4EE3\u7801\uFF0C\u6BD4\u5982\uFF1A\u4E0D\u80FD\u5199if\u3001for\u3001while\u7B49\u5FAA\u73AF\u8BED\u53E5\uFF0C\u4E0D\u80FD\u5199\u51FD\u6570\u8C03\u7528\u7B49\u3002\n - vtype=\"listItemCard\"\u3001vtype=\"oneViewPagerContent\"\u7C7B\u578B\u7684\u8282\u70B9\u7EC4\u4EF6\uFF0C\u9700\u8981\u6DF1\u5EA6\u904D\u5386\u5B83\u7684\u7B2C1\u4E2Aitem\u7684\u5B69\u5B50\uFF0C\u7136\u540E\u7ED3\u5408\u540E\u7AEFapi\u8FD4\u56DE\u7684xxxResponse\u7684\u6570\u636E\u7ED3\u6784\u7ED9\u7B2C1\u4E2Aitem\u8BBE\u7F6E\u6570\u636E\uFF0C\u6CE8\u610F\u53EA\u9700\u7ED9\u7B2C1\u4E2Aitem\u8282\u70B9\u8BBE\u7F6E\u6570\u636E\uFF0C\u800C\u4E0D\u662F\u6240\u6709item\u8282\u70B9\u90FD\u8BBE\u7F6E\u6570\u636E\uFF0C\u5E76\u4E14\u5FC5\u987B\u662F\u76F4\u63A5\u5199\u540E\u7AEFapi\u8FD4\u56DE\u7684\u6570\u636E\u8DEF\u5F84\u7684\u7B2C\u4E00\u4E2AitemData\u7684\u6570\u636E\u8DEF\u5F84\uFF0C\u6BD4\u5982\uFF1Aconst itemData = dataList[0]; this.recommendBookTitle1.text = itemData.xxx.titleText\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u4F7F\u7528\u5168\u5C40\u53D8\u91CF\u548C\u5C40\u90E8\u53D8\u91CF\u8FDB\u884C\u6570\u636E\u7ED1\u5B9A\uFF0C\u4E0D\u80FD\u5199\u5176\u4ED6\u903B\u8F91\u4EE3\u7801\uFF0C\u6BD4\u5982\uFF1A\u4E0D\u80FD\u5199if\u3001for\u3001while\u7B49\u5FAA\u73AF\u8BED\u53E5\uFF0C\u5982\u679C\u9700\u8981\u903B\u8F91\u5904\u7406\u540E\u624D\u80FD\u5F97\u51FAthis.recommendBookTitle1.text\u7684\u503C\uFF0C\u90A3\u5C31\u5FC5\u987B\u8981\u5C01\u88C5\u4E00\u4E2A`getxxx(itemData: any): string`\u65B9\u6CD5\u6765\u83B7\u53D6\uFF0C\u7136\u540E:this.recommendBookTitle1.text = this.getxxx(itemData)\n - api\u63A5\u53E3\u8FD4\u56DE\u6570\u636E\u540E\u4E0EUI\u6570\u636E\u7ED1\u5B9A\u4F8B\u5B50\uFF1A\n ```typescript\n // \u540E\u7AEFxxxApi\u8FD4\u56DE\u7684xxxResponse\u6570\u636E\u7ED3\u6784\n export interface getRecommendBookListResponse {\n code: number\n msg: string\n data: {\n list: [\n {\n id: number // \u4E66\u7C4DID\n title: string // \u4E66\u7C4D\u6807\u9898\n author: string // \u4F5C\u8005\u540D\u79F0\n coverUrl: string // \u5C01\u9762\u56FE\u7247URL\n description: string // \u4E66\u7C4D\u7B80\u4ECB\n categoryName: string // \u5206\u7C7B\u540D\u79F0\n }\n ] // \u4E66\u7C4D\u5217\u8868\n total: number // \u603B\u6570\u91CF\n page: number // \u5F53\u524D\u9875\u7801\n size: number // \u6BCF\u9875\u6570\u91CF\n }\n }\n ...\n private bindDataFromNet(getRecommendBookListData: getRecommendBookListResponse) {\n // \u8BBE\u7F6E\u4E66\u7C4D\u5217\u8868\u6570\u636E\n this.recommendBookList.setDataList(getRecommendBookListData.data.listData)\n // \u8BBE\u7F6E\u7B2C1\u4E2Aitem\u8282\u70B9\u6570\u636E\n const listItemData = getRecommendBookListData.data.listData[0]\n this.recommendBookCover1.src = listItemData.coverUrl\n this.recommendBookTitle1.text = listItemData.title\n this.recommendBookAuthor1.text = listItemData.author\n ...\n // \u8BBE\u7F6E\u8F6E\u64AD\u6570\u636E\n this.recommendViewPager.setDataList(getRecommendBookListData.data.viewPagerData)\n // \u8BBE\u7F6E\u7B2C1\u4E2Aitem\u8282\u70B9\u6570\u636E\n const viePagerItemData = getRecommendBookListData.data.viewPagerData[0]\n this.recommendImage1.src = viePagerItemData.coverUrl\n this.carouselTitle1.text = this.getCarouselTitleData(viePagerItemData) // \u7531\u4E8E\u6709\u590D\u6742\u7684\u903B\u8F91\u5904\u7406\uFF0C\u6240\u4EE5\u5FC5\u987B\u8981\u5C01\u88C5\u4E00\u4E2A\u65B9\u6CD5\u6765\u83B7\u53D6\n }\n private getCarouselTitleData(itemData: any) {\n let title = ''\n if (itemData.title) {\n title = itemData.title\n } else if (itemData.description) {\n title = itemData.description\n } else {\n title = itemData.categoryName\n }\n return title\n }\n ...\n ```\n - \u8BBE\u7F6E\u7B2C1\u4E2Aitem\u8282\u70B9\u6570\u636E\u65F6\uFF0C\u5982\u679C\u8868\u8FBE\u5F0F\u53F3\u4FA7\u6D89\u53CA\u903B\u8F91\u8FD0\u7B97\uFF0C\u5FC5\u987B\u5C01\u88C5\u6210\u4E00\u4E2A\u7C7B\u6210\u5458\u65B9\u6CD5\uFF0C\u5982\uFF1A\n ```typescript\n // \u6D89\u53CA\u903B\u8F91\u8FD0\u7B97\u65F6\u6539\u4E3A\u8C03\u7528\u4E00\u4E2A\u7C7B\u6210\u5458\u65B9\u6CD5\n this.recommendImage1.src = this.xxxMethod(getRecommendBookListResponse)\n // \u5982\u679C\u8868\u8FBE\u5F0F\u53F3\u4FA7\u6D89\u53CA\u903B\u8F91\u8FD0\u7B97\uFF0C\u5C01\u88C5\u6210\u4E00\u4E2A\u7C7B\u6210\u5458\u65B9\u6CD5\n private xxxMethod(res: getRecommendBookListResponse): string {\n let tmp = getRecommendBookListResponse.data.list[0].coverUrl\n if (tmp && tmp.length > 5) {\n return tmp + '\u957F\u540D\u5B57'\n }\n return tmp\n }\n ```\n \n\n## 10. \u4E00\u4E9BView\u7EC4\u4EF6\u5185\u90E8\u5DF2\u5C01\u88C5\u597D\u903B\u8F91\uFF0C\u56E0\u6B64\u4E00\u4E9BView\u7EC4\u4EF6\u4E0D\u9700\u8981\u505A\u4EE5\u4E0B\u4E8B\u60C5\n- \u8F6E\u64ADViewPager\u7684\u6307\u793A\u5668\u70B9\u7684\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\uFF0C\u4E0D\u5F97\u5728ts\u4EE3\u7801\u91CC\u9762\u8FDB\u884C\uFF0C\u56E0\u4E3AViewPager\u7684\u6307\u793A\u5668\u70B9\u7684\u5207\u6362UI\u66F4\u65B0\u903B\u8F91\u5DF2\u7ECF\u81EA\u52A8\u5B9E\u73B0\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u518D\u624B\u52A8\u5B9E\u73B0\u3002\n- \u5B50\u9875\u9762\u5BB9\u5668`SubPageContainer`\u4E0D\u9700\u8981\u7F16\u5199\u4EFB\u4F55\u8BBE\u7F6E\u9875\u9762\u6216\u5207\u6362\u9875\u9762\u7684\u903B\u8F91\u3002\n- \u7981\u6B62\u5BF9ImageView\u8FDB\u884Ccolor\u5C5E\u6027\u7684\u8BBE\u7F6E\u3002\n\n## 11. \u4E25\u683C\u9075\u5B88\u4EE3\u7801\u89C4\u8303\u4E0E\u9650\u5236\n - \u3010\u7C7B\u578B\u4E0E\u6CDB\u578B\u3011\n - \u5728\u7EE7\u627F\u81EA`Page`\u7684\u7C7B\u4E2D\uFF0C\u7981\u6B62\u975E\u9759\u6001\u6210\u5458\u4F7F\u7528DOM\u7C7B\u578B\u6216\u5176\u4ED6\u81EA\u5B9A\u4E49\u7981\u6B62\u7C7B\u578B\u3002\n - \u7981\u6B62\u4F7F\u7528UILIB\u7C7B\u578B\u7684\u6570\u7EC4\u4F5C\u4E3A\u6210\u5458\u3001\u5C40\u90E8\u53D8\u91CF\u3001\u65B9\u6CD5\u5165\u53C2\u6216\u8FD4\u56DE\u503C\u3002\n - \u7981\u6B62\u7C7B\u6210\u5458\u4E0E\u5C40\u90E8\u53D8\u91CF\u663E\u5F0F\u58F0\u660E\u4E3A`any`\uFF0C\u4EE5\u53CA\u4F7F\u7528`as any`\u3002\n - `Ref<T>`\u7684`T`\u4EC5\u5141\u8BB8\uFF1A`number`\u3001`string`\u3001`boolean`\u3001`any`\u3001`Array<any>`\u53CA\u5176`| null`\u53D8\u4F53\u3002\n - \u7981\u6B62\u4F7F\u7528`Symbol`\u53CA\u5176\u76F8\u5173API\u3002\n - \u7981\u6B62\u5168\u5C40\u53D8\u91CF\u3001\u5C40\u90E8\u53D8\u91CF\u3001\u65B9\u6CD5\u5165\u53C2\u3001\u8FD4\u56DE\u503C\u7684\u8054\u5408\u7C7B\u578B\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u7981\u6B62\u58F0\u660E`interface`\uFF0C\u4E14\u8BE5\u6587\u4EF6\u4EC5\u5141\u8BB8\u4E00\u4E2A`class`\u58F0\u660E\u3002\n - \u975E`src/lib`\u76EE\u5F55\u7684`ts`\u6587\u4EF6\u4E2D\uFF0C`interface`\u53EA\u5141\u8BB8\u5B9A\u4E49\u5C5E\u6027\uFF1B\u7981\u6B62\u5176\u4ED6\u58F0\u660E\u3002\n - \u7981\u6B62\u4F7F\u7528`Partial<T>`\u3002\n - \u7981\u6B62\u884C\u5185\u51FD\u6570\u7C7B\u578B\u3001\u51FD\u6570\u7C7B\u578B\u522B\u540D\u4E0E\u5185\u8054\u5BF9\u8C61\u7C7B\u578B\u5B57\u9762\u91CF\uFF08\u5C5E\u6027\u9664\u5916\uFF09\u3002\n - \u7981\u6B62\u5B9A\u4E49\u7C7B\u578B\u5C5E\u4E8EUILIB\u7684\u975E\u7C7B\u6210\u5458\u53D8\u91CF\u3002\n - \u7981\u6B62\u5C06UILIB\u7C7B\u578B\u7684\u503C\u8D4B\u7ED9\u975EUILIB\u7C7B\u578B\u7684\u76EE\u6807\u3002\n - \u7981\u6B62interface\u4E2D\u7684\u5C5E\u6027\u4F7F\u7528DOM\u7C7B\u578B\u3001UILIB\u7C7B\u578B\u3001any\u7C7B\u578B\u3001any[]\u7C7B\u578B\u3001Array<any>\u7C7B\u578B\u3001\u8054\u5408\u7C7B\u578B\u7B49\u7981\u6B62\u7C7B\u578B\u3002\n - \u3010\u5BFC\u5165\u3011\n - \u5F53\u7C7B\u8DEF\u5F84\u5728`src/lib`\u76EE\u5F55\u4E0B\u65F6\uFF0C\u7981\u6B62\u5BF9\u8FD9\u4E2A\u7C7B\u4F7F\u7528\u5BFC\u5165\u91CD\u547D\u540D\u6216\u522B\u540D\u3002\n - \u3010\u5BFC\u51FA\u3011\n - \u5728\u672A\u7EE7\u627F`Page`\u6216`BaseApi`\u7684\u6587\u4EF6\u4E2D\uFF0C\u4E14\u7C7B\u540D\u4E0D\u7B49\u4E8E`src/lib`\u548C`src/lib/uilib`\u76EE\u5F55\u4E0B\u7684\u7C7B\u540D\u3001\u4E14\u4E0D\u4E3A`Application`\u65F6\uFF0C\u4EC5\u5141\u8BB8`export default class`\u3001`export class`\u3001`export interface`\uFF1B\u7981\u6B62\u5176\u4ED6\u5BFC\u51FA\u5F62\u5F0F\u3002\n - \u3010\u65B9\u6CD5\u4E0E\u51FD\u6570\u3011\n - \u7981\u6B62\u4F7F\u7528`setInterval`\u3001`clearInterval`\u3001`setTimeout`\uFF1B\u4F7F\u7528`AllFunction`\u5BF9\u5E94\u65B9\u6CD5\u3002\n - \u7981\u6B62\u4F7F\u7528`localStorage/sessionStorage`\u7684`setItem/getItem`\uFF1B\u4F7F\u7528`AllFunction`\u6570\u636E\u5E93\u65B9\u6CD5\u3002\n - \u7981\u6B62`Date.now()`\u4E0E`new Date()`\uFF1B\u4F7F\u7528`AllFunction`\u65F6\u95F4\u65B9\u6CD5\u3002\n - \u7981\u6B62\u5728\u51FD\u6570\u5185\u5B9A\u4E49\u5185\u90E8\u51FD\u6570\uFF1B\u8BF7\u5B9A\u4E49\u4E3A\u7C7B\u79C1\u6709\u65B9\u6CD5\u3002\n - \u7981\u6B62`JSON.stringify/JSON.parse`\uFF1B\u6309\u4E0A\u4E0B\u6587\u4F7F\u7528`JsonArray.stringify/parse`\u6216`JsonObject.stringify/parse`\u3002\n - `JsonObject.stringify/parse`\u4E0E`JsonArray.stringify/parse`\u7684\u53C2\u6570\u7981\u6B62\u4F20\u5165`class`\u5BF9\u8C61\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u7C7B\u4E2D\u9759\u6001\u8C03\u7528\u7EE7\u627F`BaseApi`\u7684\u7C7B\u65B9\u6CD5\u65F6\uFF1A\u65B9\u6CD5\u540D\u5FC5\u987B\u5339\u914D`request_<10\u4F4D\u5B57\u6BCD\u6570\u5B57>`\uFF0C\u53C2\u6570\u5FC5\u987B\u4E3A3\u4E2A\uFF0C\u4E14\u7B2C2\u30013\u4E2A\u53C2\u6570\u7C7B\u578B\u4E0D\u5F97\u4E3A`any`\u6216\u6CDB\u578B\u3002\n - \u5728\u7EE7\u627F`BaseApi`\u7684\u7C7B\u4E2D\uFF0C`request_`\u5F00\u5934\u7684\u9759\u6001\u65B9\u6CD5\u540C\u6837\u5FC5\u987B\u6EE1\u8DB3\u547D\u540D\u4E0E3\u53C2\u89C4\u5219\u3002\n - \u7981\u6B62\u65B9\u6CD5\u5185\u5C40\u90E8\u53D8\u91CF\u91CD\u540D\u3002\n - `findViewById`\u4EC5\u5141\u8BB8\u7528\u4E8E\u7C7B\u6210\u5458\u53D8\u91CF\u521D\u59CB\u5316\uFF0C\u5982`this.findViewById('xxx') as <\u5177\u4F53\u7C7B\u578B>`\uFF1B\u5176\u4ED6\u4F4D\u7F6E\u7981\u6B62\u8C03\u7528\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u7981\u6B62\u4F7F\u7528`Array.isArray()`\uFF1B\u4F7F\u7528`AllFunction.isArray()`\u3002\n - \u5728\u672A\u7EE7\u627F`Page`\u6216`BaseApi`\u7684\u7C7B\u4E2D\u7981\u6B62\u58F0\u660E\u65B9\u6CD5\uFF08`constructor`\u9664\u5916\uFF09\uFF1B\u82E5\u7C7B\u540D\u7B49\u4E8E`src/lib`\u548C`src/lib/uilib`\u76EE\u5F55\u4E0B\u7684\u7C7B\u540D\u5219\u4E0D\u53D7\u6B64\u9650\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u7C7B\u4E2D\u8C03\u7528`findViewById`\u65F6\uFF0C\u53C2\u6570\u5FC5\u987B\u5B58\u5728\u4E8E\u540C\u76EE\u5F55\u540C\u540D\u58F0\u660E\u5F0FUI\u7684`.id('...')`\u5217\u8868\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u8C03\u7528`watch`\uFF08\u4F4D\u4E8E`Ref.ts`\uFF09\u65F6\uFF0C\u7B2C\u4E00\u4E2A\u53C2\u6570\u5FC5\u987B\u662F\u5B57\u9762\u91CF\u6570\u7EC4`[ref1, ref2]`\uFF0C\u7981\u6B62\u53D8\u91CF\u4F20\u9012\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u5B9A\u4E49UILIB\u7C7B\u578B\u6210\u5458\u53D8\u91CF\u65F6\uFF0C\u5FC5\u987B\u4F7F\u7528`this.findViewById('xxx') as Xxx`\u521D\u59CB\u5316\u3002\n - \u3010\u6570\u7EC4\u65B9\u6CD5\u3011\n - \u7981\u6B62\u4F7F\u7528`map`\u3001`filter`\u3001`find`\u3001`findIndex`\u3001`reduce`\u3001`reduceRight`\u3001`every`\u3001`some`\u3001`sort`\u3001`flatMap`\uFF1B\u7EDF\u4E00\u4F7F\u7528`for-i`\u5B9E\u73B0\u3002\n - \u3010\u8BED\u6CD5\u9650\u5236\u3011\n - \u7981\u6B62\u4F7F\u7528`||`\u8FDB\u884C\u8D4B\u503C\u3001\u4F20\u53C2\u6216\u521D\u59CB\u5316\uFF1B\u6539\u7528\u4E09\u5143\u8868\u8FBE\u5F0F\u3002\n - \u7981\u6B62\u5BF9\u8C61\u5C55\u5F00\u8BED\u6CD5`...`\u514B\u9686\u5BF9\u8C61\uFF1B\u6539\u7528\u624B\u52A8\u8D4B\u503C\u3002\n - \u7981\u6B62\u7C7B\u6210\u5458\u53D8\u91CF\u4E0E\u65B9\u6CD5\u5165\u53C2\u540C\u540D\uFF0C\u6216\u4E0E\u65B9\u6CD5\u5185\u5C40\u90E8\u53D8\u91CF\u540C\u540D\u3002\n - \u7981\u6B62\u4F7F\u7528`try/catch/finally`\u4E0E\u6B63\u5219\u8868\u8FBE\u5F0F\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\u7981\u6B62\u4F7F\u7528`typeof`\uFF1B\u6539\u7528`AllFunction.isString/isNumber/isBoolean/isObject`\u3002\n - \u7981\u6B62\u5BF9\u8C61\u5C5E\u6027\u7B80\u5199\uFF08`{ a }`\uFF09\uFF1B\u4F7F\u7528\u5B8C\u6574\u5199\u6CD5\uFF08`{ a: a }`\uFF09\u3002\n - \u5728\u7EE7\u627F`Page`\u7684\u6587\u4EF6\u4E2D\uFF0C\u7981\u6B62\u5BF9UILIB\u7C7B\u578B\u53D8\u91CF\u8FDB\u884C\u771F\u503C\u5224\u65AD\u3002\n - \u7981\u6B62\u4F7F\u7528\u903B\u8F91\u6216\uFF08`||`\uFF09\u77ED\u8DEF\u6C42\u503C\u7684\u94FE\u5F0F\u64CD\u4F5C\uFF0C\u6539\u4E3A\u4F7F\u7528 `if/else` \u5904\u7406\u3002\n - \u7981\u6B62\u4F7F\u7528\u7A7A\u503C\u5408\u5E76\u8FD0\u7B97\u7B26\uFF08`??`\uFF09\uFF0C\u6539\u4E3A\u4F7F\u7528`if/else`\u5904\u7406\u3002\u4F8B\u5982\uFF1A`\n`\u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF1A`\n```` typescript \nprivate cus71() { \n const displayName = this.cus71Str1 ?? this.cus71Str2 ?? ''; \n} \n``` `\n`\u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A `\n```` typescript \nprivate cus71() { \n let displayName: string; \n if (this.cus71Str1) { \n displayName = this.cus71Str1; \n } else if (this.cus71Str2) { \n displayName = this.cus71Str2; \n } else { \n displayName = ''; \n } \n} \n```\n - \u3010\u8865\u5145\u7684\u9879\u76EE\u89C4\u5219\u3011\n - \u7981\u6B62\u4F7F\u7528`for...in`\uFF1B\u4F7F\u7528`Object.keys`+`for-i`\u3002\n - \u7981\u6B62`async/Promise`\uFF08\u542B`Promise.race/Promise.all`\uFF09\uFF1B\u6240\u6709\u5F02\u6B65\u64CD\u4F5C\u4F7F\u7528\u7BAD\u5934\u51FD\u6570\u3002\n - \u7981\u6B62\u4F7F\u7528\u6D4F\u89C8\u5668\u73AF\u5883\u7684`lib.dom.d.ts`\u65B9\u6CD5\u4E8ENode\u73AF\u5883\u3002\n - \u7981\u6B62\u4FEE\u6539\u3001\u589E\u5220`src/lib`\u53CA\u5176\u5B50\u76EE\u5F55\u4E2D\u7684\u6587\u4EF6\u3002\n - \u7981\u6B62\u4F7F\u7528`@ts-ignore`\u8FD9\u4E9BTypeScript\u6CE8\u91CA\u6307\u4EE4\u3002\n - \u7981\u6B62\u6DFB\u52A0\u548C\u4F7F\u7528`src/lib/uilib`\u4E2DView\u4E0D\u5B58\u5728\u7684\u65B9\u6CD5\u548C\u5C5E\u6027\u3002\n\n";
2
2
  //# sourceMappingURL=appCodeRule.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"appCodeRule.d.ts","sourceRoot":"","sources":["../src/appCodeRule.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kCAAkC,2tjCA2T9C,CAAC"}
1
+ {"version":3,"file":"appCodeRule.d.ts","sourceRoot":"","sources":["../src/appCodeRule.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kCAAkC,gzoCAiV9C,CAAC"}
@@ -1,6 +1,6 @@
1
1
  export const understandingCodeFrameworkTemplate = `
2
2
  # **必须先理解项目代码框架11个知识点**
3
- ## 1. **理解View组件的声明规则**
3
+ ## 1. **理解View组件的声明和使用规则**
4
4
  - 这不是html、react等开发,这是一个新的开发框架,是基于src/lib/uilib文件夹里面的UI组件库来开发的
5
5
  - View组件的基类是BaseView,容器基类是BaseContainerView,所有View组件都继承自BaseView
6
6
  - 查看'src/lib/uilib/'文件夹下面的文件名字,理解总共有多少种UI组件
@@ -260,8 +260,25 @@ export const understandingCodeFrameworkTemplate = `
260
260
  }
261
261
  ...
262
262
  \`\`\`
263
+ - 设置第1个item节点数据时,如果表达式右侧涉及逻辑运算,必须封装成一个类成员方法,如:
264
+ \`\`\`typescript
265
+ // 涉及逻辑运算时改为调用一个类成员方法
266
+ this.recommendImage1.src = this.xxxMethod(getRecommendBookListResponse)
267
+ // 如果表达式右侧涉及逻辑运算,封装成一个类成员方法
268
+ private xxxMethod(res: getRecommendBookListResponse): string {
269
+ let tmp = getRecommendBookListResponse.data.list[0].coverUrl
270
+ if (tmp && tmp.length > 5) {
271
+ return tmp + '长名字'
272
+ }
273
+ return tmp
274
+ }
275
+ \`\`\`
276
+
263
277
 
264
- ## 10. 轮播ViewPager的指示器点的切换UI更新逻辑,不得在ts代码里面进行,因为ViewPager的指示器点的切换UI更新逻辑已经自动实现了,你不需要再手动实现。
278
+ ## 10. 一些View组件内部已封装好逻辑,因此一些View组件不需要做以下事情
279
+ - 轮播ViewPager的指示器点的切换UI更新逻辑,不得在ts代码里面进行,因为ViewPager的指示器点的切换UI更新逻辑已经自动实现了,你不需要再手动实现。
280
+ - 子页面容器\`SubPageContainer\`不需要编写任何设置页面或切换页面的逻辑。
281
+ - 禁止对ImageView进行color属性的设置。
265
282
 
266
283
  ## 11. 严格遵守代码规范与限制
267
284
  - 【类型与泛型】
@@ -277,6 +294,7 @@ export const understandingCodeFrameworkTemplate = `
277
294
  - 禁止行内函数类型、函数类型别名与内联对象类型字面量(属性除外)。
278
295
  - 禁止定义类型属于UILIB的非类成员变量。
279
296
  - 禁止将UILIB类型的值赋给非UILIB类型的目标。
297
+ - 禁止interface中的属性使用DOM类型、UILIB类型、any类型、any[]类型、Array<any>类型、联合类型等禁止类型。
280
298
  - 【导入】
281
299
  - 当类路径在\`src/lib\`目录下时,禁止对这个类使用导入重命名或别名。
282
300
  - 【导出】
@@ -307,11 +325,15 @@ export const understandingCodeFrameworkTemplate = `
307
325
  - 在继承\`Page\`的文件中禁止使用\`typeof\`;改用\`AllFunction.isString/isNumber/isBoolean/isObject\`。
308
326
  - 禁止对象属性简写(\`{ a }\`);使用完整写法(\`{ a: a }\`)。
309
327
  - 在继承\`Page\`的文件中,禁止对UILIB类型变量进行真值判断。
328
+ - 禁止使用逻辑或(\`||\`)短路求值的链式操作,改为使用 \`if/else\` 处理。
329
+ - 禁止使用空值合并运算符(\`??\`),改为使用\`if/else\`处理。例如:\`\n\`❌ 错误的写法:\`\n\`\`\`\` typescript \nprivate cus71() { \n const displayName = this.cus71Str1 ?? this.cus71Str2 ?? ''; \n} \n\`\`\` \`\n\`✅ 正确的写法: \`\n\`\`\`\` typescript \nprivate cus71() { \n let displayName: string; \n if (this.cus71Str1) { \n displayName = this.cus71Str1; \n } else if (this.cus71Str2) { \n displayName = this.cus71Str2; \n } else { \n displayName = ''; \n } \n} \n\`\`\`
310
330
  - 【补充的项目规则】
311
331
  - 禁止使用\`for...in\`;使用\`Object.keys\`+\`for-i\`。
312
332
  - 禁止\`async/Promise\`(含\`Promise.race/Promise.all\`);所有异步操作使用箭头函数。
313
333
  - 禁止使用浏览器环境的\`lib.dom.d.ts\`方法于Node环境。
314
334
  - 禁止修改、增删\`src/lib\`及其子目录中的文件。
335
+ - 禁止使用\`@ts-ignore\`这些TypeScript注释指令。
336
+ - 禁止添加和使用\`src/lib/uilib\`中View不存在的方法和属性。
315
337
 
316
338
  `;
317
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwQ29kZVJ1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYXBwQ29kZVJ1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTJUakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCB1bmRlcnN0YW5kaW5nQ29kZUZyYW1ld29ya1RlbXBsYXRlID0gYFxuIyAqKuW/hemhu+WFiOeQhuino+mhueebruS7o+eggeahhuaetjEx5Liq55+l6K+G54K5KipcbiMjIDEuICoq55CG6KejVmlld+e7hOS7tueahOWjsOaYjuinhOWImSoqXG4gIC0g6L+Z5LiN5pivaHRtbOOAgXJlYWN0562J5byA5Y+R77yM6L+Z5piv5LiA5Liq5paw55qE5byA5Y+R5qGG5p6277yM5piv5Z+65LqOc3JjL2xpYi91aWxpYuaWh+S7tuWkuemHjOmdoueahFVJ57uE5Lu25bqT5p2l5byA5Y+R55qEXG4gIC0gVmlld+e7hOS7tueahOWfuuexu+aYr0Jhc2VWaWV377yM5a655Zmo5Z+657G75pivQmFzZUNvbnRhaW5lclZpZXfvvIzmiYDmnIlWaWV357uE5Lu26YO957un5om/6IeqQmFzZVZpZXdcbiAgLSDmn6XnnIsnc3JjL2xpYi91aWxpYi8n5paH5Lu25aS55LiL6Z2i55qE5paH5Lu25ZCN5a2X77yM55CG6Kej5oC75YWx5pyJ5aSa5bCR56eNVUnnu4Tku7ZcbiAgLSBWaWV357uE5Lu255qE5aOw5piO5b+F6aG75Zyo57G75paH5Lu25byA5aeL5pe25YWI5aOw5piO77yM5bm25LiU5b+F6aG76KaB5aOw5piO5YW35L2T55qEVmlld+e7hOS7tuexu+Wei++8jOS4jeW+l+WjsOaYjuS4ukJhc2VWaWV377yM5LiN5b6X5Zyo5Lu75L2V5Ye95pWw5L2T6YeM6Z2i6YCa6L+HZmluZFZpZXdCeUlk5p2l5aOw5piOVmlld+e7hOS7tu+8jOavlOWmgu+8mlxuICAgIC0g4pyFIOato+ehrueahOWGmeazle+8mlxuICAgIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgICBwdWJsaWMgY2xhc3MgSG9tZVBhZ2UgZXh0ZW5kcyBQYWdlIHtcbiAgICAgIHByaXZhdGUgbmFtZVRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlkKCduYW1lVGV4dFZpZXcnKSBhcyBUZXh0Vmlld1xuICAgICAgLi4uLlxuICAgIH1cbiAgICBcXGBcXGBcXGBcbiAgICAtIOKdjCDplJnor6/nmoTlhpnms5XvvIjmsqHmnInlo7DlhbfkvZPnmoRWaWV357uE5Lu257G75Z6L77yJ77yaXG4gICAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICAgIHByaXZhdGUgbmFtZVRleHRWaWV3ID0gdGhpcy5maW5kVmlld0J5SWQoJ25hbWVUZXh0VmlldycpXG4gICAgXFxgXFxgXFxgXG4gICAgLSDinYwg6ZSZ6K+v55qE5YaZ5rOV77yI5Zyo5Ye95pWw5L2T6YeM6Z2i6YCa6L+HZmluZFZpZXdCeUlk5p2l5aOw5piOVmlld+e7hOS7tu+8ie+8mlxuICAgIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgICBwcml2YXRlIG9uZUZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgbmFtZVRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlkKCduYW1lVGV4dFZpZXcnKSBhcyBUZXh0Vmlld1xuICAgICAgLi4uLlxuICAgIH1cbiAgICBcXGBcXGBcXGBcbiAgLSDmiYDmnIlWaWV357uE5Lu255qE6YCJ5Lit54q25oCB44CB6IGa54Sm54q25oCB44CB56aB55So54q25oCB55qE5Y+Y5YyW6YO95b+F6aG76YCa6L+HXFxgc2V0U3RhdGlvbihzdGF0aW9uOiBWaWV3U3RhdGlvbilcXGDlh73mlbDmnaXorr7nva7vvIzkuI3og73nm7TmjqXorr7nva7nu4Tku7bnmoRVSeWxnuaAp++8jOWPqumcgOimgeiuvue9rue7hOS7tueahHN0YXRpb27lsZ7mgKfljbPlj6/oh6rliqjmm7TmlrDnu4Tku7bnmoRVSeagt+W8j1xuICAtIOaJgOaciVZpZXfnu4Tku7bnmoTmmL7npLrjgIHpmpDol4/ljaDkvY3jgIHpmpDol4/kuI3ljaDkvY3nmoTorr7nva7pg73lv4Xpobvkvb/nlKhWaWV355qEXFxgdmlzaWJpbGl0eVxcYOWxnuaAp+i/m+ihjOiuvue9ru+8jOS4jeW+l+S9v+eUqFxcYHN0YXRpb25cXGDlsZ7mgKfjgIJcbiAgLSDmiYDmnIlWaWV357uE5Lu255qEbm9ybWFs44CBcmVhZE9ubHnjgIFmb2N1c+OAgXNlbGVjdGVk44CBZGlzYWJsZWTnirbmgIHnmoTorr7nva7pg73lv4Xpobvkvb/nlKhWaWV355qEXFxgc3RhdGlvblxcYOWxnuaAp+i/m+ihjOiuvue9ruOAglxuXG4jIyAyLiAqKueQhuino+WUr+S4gOeahOiDveWKm+aWueazlUFsbEZ1bmN0aW9uLnRz5Lul5Y+KanNvbuebuOWFs+S7o+eggSoqXG4gIC0g5L2/55SoJ3JlYWRfZmlsZSflt6XlhbfpmIXor7vlubbnkIbop6Mnc3JjL2xpYi9BbGxGdW5jdGlvbi50cyfmlofku7bvvIznkIbop6Por6Xlt6XnqIvog73kvb/nlKjnmoTllK/kuIDnmoTog73lipvmlrnms5VcbiAgLSDor7fkuKXmoLzmjInnhafllK/kuIDnmoTog73lipvmlrnms5VBbGxGdW5jdGlvbi50c++8jOS4jeimgeaWsOWinuOAgeWIoOmZpOaIluS/ruaUueS7u+S9lUFsbEZ1bmN0aW9u5o6l5Y+j5aOw5piO77yb5Lmf5LiN6KaB6LCD55So5YW25LuW5pyq5ZyoQWxsRnVuY3Rpb27kuK3lh7rnjrDnmoTlh73mlbDmiJbmqKHlnZdcbiAgXG4jIyAzLiAqKueQhuino1JlZuOAgXdhdGNoKipcbiAgLSBSZWbnmoTmlbDmja7nsbvlnovlj6rog73mmK/ku6XkuIs15Lit57G75Z6L77ya5pWw5a2X5L2/55SoUmVmPG51bWJlcj7vvIzlrZfnrKbkuLLkvb/nlKhSZWY8c3RyaW5nPu+8jOW4g+WwlOmHj+S9v+eUqFJlZjxib29sZWFuPu+8jOWvueixoeS9v+eUqFJlZjxhbnk+77yM5pWw57uE5L2/55SoUmVmPEFycmF5PGFueT4+5oiWUmVmPEFycmF5PGFueT4gfCBudWxsPuaIllJlZjxhbnlbXT7miJZSZWY8YW55W10gfCBudWxsPuOAglxuICAtIOS9v+eUqCdyZWFkX2ZpbGUn5bel5YW36ZiF6K+75bm255CG6KejJ3NyYy9saWIvUmVmLnRzJ+aWh+S7tu+8jOeQhuino1JlZuWSjHdhdGNo55qE5a6a5LmJ55So5rOVXG4gIC0gd2F0Y2jmmK/nm5HlkKxSZWbnmoTlj5jljJbvvIznhLblkI7lgZrnm7jlhbNVSeabtOaWsOaIluWFtuS7luS4muWKoemAu+i+ke+8jOesrOS4gOS4quWPguaVsOaYr+ebkeWQrOeahFJlZuaVsOe7hO+8jOesrOS6jOS4quWPguaVsOaYr+ebkeWQrOeahOWbnuiwg+WHveaVsO+8jOWbnuiwg+WHveaVsOS4reWPr+S7peWBmuebuOWFs1VJ5pu05paw5oiW5YW25LuW5Lia5Yqh6YC76L6R44CCXG4gIC0gUmVm5piv5ZON5bqU5byP5pWw5o2u5rqQ77yMd2F0Y2jmmK/nm5HlkKxSZWbnmoTlj5jljJbvvIznhLblkI7lgZrnm7jlhbNVSeabtOaWsOaIluWFtuS7luS4muWKoemAu+i+ke+8jOavlOWmgu+8mlxuICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gIHByaXZhdGUgbmFtZVRleHRSZWY6IFJlZjxzdHJpbmc+ID0gcmVmKCcnKVxuICBwcml2YXRlIG90aGVyQ291bnRSZWY6IFJlZjxudW1iZXI+ID0gcmVmKDApXG4gIHdhdGNoKFt0aGlzLm5hbWVUZXh0UmVmLCB0aGlzLm90aGVyQ291bnRSZWZdLCAoKSA9PiB7XG4gICAgLy8g5Y+v5Lul5YWI55u45YWz55qEVUnmm7TmlrDmiJbkuJrliqHpgLvovpFcbiAgICBpZiAodGhpcy5vdGhlckNvdW50UmVmLnZhbHVlID4gNSkge1xuICAgICAgdGhpcy5uYW1lVGV4dFZpZXcudGV4dCA9IHRoaXMubmFtZVRleHRSZWYudmFsdWUgKyAnNSdcbiAgICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubmFtZVRleHRWaWV3LnRleHQgPSB0aGlzLm5hbWVUZXh0UmVmLnZhbHVlICsgJzEwJ1xuICAgIH1cbiAgfSlcbiAgXFxgXFxgXFxgXG4gIC0gXFxgc3JjL2xpYi91aWxpYi9SZWYudHNcXGDph4zpnaLnmoRcXGB3YXRjaFxcYOWHveaVsO+8jOesrOS4gOS4quWFpeWPglxcYHJlZnM6IFJlZjxUPltdXFxg57ud5a+556aB5q2i5YWI5aOw5piO5bGAcmVm5pWw57uE6YOo5Y+Y6YeP5YaN5Lyg5YWl77yM5q2j56Gu55qE5YaZ5rOV5bqU6K+l5piv55u05o6l5YaZ5pWw57uE77yaXFxgW3JlZjEsIHJlZjJdXFxg5bCx6KGMXG4gIC0g4p2MIOmUmeivr+eahOWGmeazle+8mlxuICAgIFxcYFxcYFxcYCB0eXBlc2NyaXB0XG4gICAgY29uc3QgcmVmQXJyYXkgPSBbcmVmMSwgcmVmMl1cbiAgICB3YXRjaChyZWZBcnJheSwgKG5ld1ZhbHVlczogVFtdKSA9PiB7XG4gICAgICAgIC8vIOebkeWQrHJlZjHlkoxyZWYy55qE5Y+Y5YyWXG4gICAgfSlcbiAgICBcXGBcXGBcXGBcbiAgLSDinIUg5q2j56Gu55qE5YaZ5rOV77yaXG4gICAgXFxgXFxgXFxgIHR5cGVzY3JpcHRcbiAgICB3YXRjaChbcmVmMSwgcmVmMl0sIChuZXdWYWx1ZXM6IFRbXSkgPT4ge1xuICAgICAgICAvLyDnm5HlkKxyZWYx5ZKMcmVmMueahOWPmOWMllxuICAgIH0pXG4gICAgXFxgXFxgXFxgXG5cbiMjIDQuICoq55CG6Kejc2V0RGF0YUxpc3Tmlrnms5XnmoTpnZnmgIHmlbDmja7kuI7liqjmgIHmlbDmja7lnLrmma8qKlxuICAtIOWvueS6juWKqOaAgeaVsOaNruWuueWZqFZpZXdQYWdlcuOAgUxpc3RWaWV355qEc2V0RGF0YUxpc3Tmlrnms5XvvIzlpoLmnpzmlbDmja7mmK/liqjmgIHnmoTvvIzmr5TlpoLvvJrku47lkI7nq6/mjqXlj6Pojrflj5bnmoTvvIzmiY3og73kvb/nlKhzZXREYXRhTGlzdOaWueazleadpeiuvue9ruaVsOaNruOAgumdmeaAgeaVsOaNruW3sue7j+WcqFVJ6aG16Z2i5LiK5YaZ5aW95LqG77yM5L2g5LiN5b6X5L2/55Soc2V0RGF0YUxpc3Tmlrnms5XmnaXorr7nva7mlbDmja7jgIJcbiAgLSDliKTmlq3moIflh4bvvJrlpoLmnpxVSemhtemdouS4reW3sue7j+acieWujOaVtOeahOi9ruaSremhueebri/liJfooajpobnnm67vvIzlsLHmmK/pnZnmgIHmlbDmja7vvIzlpoLmnpzmmK/nvZHnu5xBUEnov5Tlm57nmoTmlbDmja7liJfooajlsLHmmK/liqjmgIHmlbDmja7jgIJcbiAgLSDinIUg6Z2Z5oCB5pWw5o2u5a655Zmo77yIVUnpobXpnaLkuK3lt7Llhpnlpb3lhoXlrrnvvInvvJrkuI3kvb/nlKhzZXREYXRhTGlzdCgpXG4gIC0g4pyFIOWKqOaAgeaVsOaNruWuueWZqO+8iOmcgOimgeS7jkFQSeiOt+WPlu+8ie+8muaJjeS9v+eUqHNldERhdGFMaXN0KClcblxuIyMgNS4gKipWaWV357uE5Lu277yM55CG6Kej5q+P5Liq57uE5Lu25Y+v6IO96YeM6Z2i5bey57uP5pyJ5LqG5ZON5bqU5byP5pWw5o2u5rqQ77yM5aaC5p6c57uE5Lu26YeM6Z2i5bey57uP5pyJ5LqG5ZON5bqU5byP5pWw5o2u5rqQ77yM6YKj5LmI5L2g5LiN5b6X5YaN6Ieq5bex5Yib5bu6cmVm5Y+Y6YeP5oiW6ICF5L2/55Sob25TZWxlY3RDaGFuZ2XnrYnlm57osIPop6blj5FVSeabtOaWsCoqXG4gIC0g5L6L5a2Q77yaVmlld1BhZ2Vy55qEY3VycmVudFNlbGVjdEluZGV45ZKMY3VycmVudFNlbGVjdEluZGV4UmVm5bGe5oCn5bey57uP5piv5ZON5bqU5byP5pWw5o2u5rqQ77yM5Y+v5Lul55u05o6l5L2/55SoY3VycmVudFNlbGVjdEluZGV4UmVm5p2l57uR5a6a6Ieq5Yqo5pu05pawVUnjgIJcbiAgICBwdWJsaWMgaW5pdFZpZXcoKSB7XG4gICAgICB0aGlzLnNob3dJbmRleFRleHRWaWV3LnRleHQgPSB0aGlzLnZpZXdQYWdlci5jdXJyZW50U2VsZWN0SW5kZXhSZWYudmFsdWUgKyAxICsgJy8nICsgdGhpcy52aWV3UGFnZXIuZGF0YUxpc3QubGVuZ3RoXG4gICAgfVxuICAtIOS+i+WtkO+8mlZpZXdQYWdlcueahGN1cnJlbnRTZWxlY3RJbmRleOWSjGN1cnJlbnRTZWxlY3RJbmRleFJlZuWxnuaAp+W3sue7j+aYr+WTjeW6lOW8j+aVsOaNrua6kO+8jOWPr+S7peebtOaOpeS9v+eUqGN1cnJlbnRTZWxlY3RJbmRleFJlZuadpee7keWumuiHquWKqOabtOaWsFVJ77yM5q+U5aaC77yaXG4gICAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICAgIHB1YmxpYyBpbml0VmlldygpIHtcbiAgICAgIHdhdGNoKFt0aGlzLnZpZXdQYWdlci5jdXJyZW50U2VsZWN0SW5kZXhSZWZdLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd0luZGV4VGV4dFZpZXcudGV4dCA9IHRoaXMudmlld1BhZ2VyLmN1cnJlbnRTZWxlY3RJbmRleFJlZi52YWx1ZSArIDEgKyAnLycgKyB0aGlzLnZpZXdQYWdlci5kYXRhTGlzdC5sZW5ndGhcbiAgICAgIH0pXG4gICAgXFxgXFxgXFxgXG4gIC0gdGFi57uE5Lu25ZKM6L2u5pKt57uE5Lu255qE6YCJ5oup5Y+Y5YyW55uR5ZCs77yM5b+F6aG75L2/55SoXFxgVmlld1BhZ2VyXFxg5oiWXFxgVGFiQ29udGFpbmVyXFxg55qEXFxgb25TZWxlY3RDaGFuZ2UoZnVuYzogKGl0ZW06IGFueSwgcG9zaXRpb246IG51bWJlcikgPT4gdm9pZClcXGDlh73mlbDmnaXnm5HlkKzpgInmi6nlj5jljJZcblxuIyMgNi4gKirnkIbop6PpobXpnaLot7PovawqKlxuICAtIOmhtemdoui3s+i9rOW/hemhu+S9v+eUqEFsbEZ1bmN0aW9uLnN0YXJ0UGFnZeWunueOsO+8jHN0YXJ0UGFnZeS8oOWFpVBhZ2XnmoTlrZDnsbvlr7nosaHvvIzlpoLvvJpBbGxGdW5jdGlvbi5zdGFydFBhZ2UobmV3IFByb2R1Y3RQYWdlKHRoaXMucHJvZHVjdElEKSnjgIJcbiAgLSDinYwg6aG16Z2i6Lez6L2s5LiN6ZyA6ICD6JmR5qih5Z2X5YyW44CB5b6q546v5L6d6LWW44CB5riQ6L+b5byP5byA5Y+R77yM57ud5a+556aB5q2i5bGP6JS96aG16Z2i6Lez6L2s55qE5Luj56CB77yM5omA5pyJ6aG16Z2i6YO95bey57uP5a2Y5Zyo77yM5LiN5Lya5Ye6546w57yW6K+R5Ye66ZSZ55qE77yM5b+F6aG75piO56Gu5YaZ5LiK6aG16Z2i6Lez6L2s55qE5Luj56CB5ZKM55uu5qCH6aG16Z2i5omA6ZyA55qE6Lez6L2s5Y+C5pWw44CCXG4gIC0g5ZyoQXBwbGljYXRpb24udHPorr7nva7ot7PovazlkK/liqjpobXvvIzmr5TlpoLvvJpcdFxuICAgIC8vIOW6lOeUqOe9keermeWQr+WKqOaXtuWbnuiwg+eahOesrOS4gOS4quWHveaVsO+8jOeUqOS6juWIneWni+WMluS4gOS6m+WFqOWxgOeahOS4nOilv+OAglxuICAgIHByb3RlY3RlZCBvbkFwcGxpY2F0aW9uQ3JlYXRlKCk6IHZvaWQge1xuICAgICAgQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBTcGxhc2hQYWdlKCkpXG4gICAgfVxuICAtIOKchSDlvJXlhaXlhbbku5bnsbvlj6rlhYHorrjkuIDnp43lhpnms5XvvJrlnKjnsbvmlofku7bpobbpg6jov5vooYxpbXBvcnTvvJppbXBvcnQgR3VpZGVQYWdlIGZyb20gJy4uL2d1aWRlUGFnZS9ndWlkZVBhZ2Un44CCXG4gIC0g4p2MIOe7neWvueemgeatouS9v+eUqOWKqOaAgWltcG9ydOeahOWGmeazle+8jOeoi+W6j+W6leWxguW3sue7j+WkhOeQhuWlveW+queOr+S+nei1lumXrumimOS6hu+8jOS9oOS4jemcgOimgeiAg+iZke+8jOavlOWmgue7neWvueemgeatouS7peS4i+WGmeazle+8mlxuICAgICAgICAvLyDkvb/nlKjliqjmgIHlr7zlhaXpgb/lhY3lvqrnjq/kvp3otZZcbiAgICAgICAgaW1wb3J0KCcuLi9ndWlkZVBhZ2UvZ3VpZGVQYWdlJykudGhlbigoeyBkZWZhdWx0OiBHdWlkZVBhZ2UgfSkgPT4ge1xuICAgICAgICAgICAgQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBHdWlkZVBhZ2UoKSlcbiAgICAgICAgfSlcbiAgLSDinYwg57ud5a+556aB5q2i5L2/55SocmVxdWlyZeeahOWGmeazle+8jOeoi+W6j+W6leWxguW3sue7j+WkhOeQhuWlveW+queOr+S+nei1lumXrumimOS6hu+8jOS9oOS4jemcgOimgeiAg+iZke+8jOavlOWmgue7neWvueemgeatouS7peS4i+WGmeazle+8mlxuICAgICAgICByZXF1aXJlKCcuLi9ndWlkZVBhZ2UvZ3VpZGVQYWdlJykuZGVmYXVsdFxuICAtIOKchSDmraPnoa7nmoTlhpnms5XmmK/vvJpBbGxGdW5jdGlvbi5zdGFydFBhZ2UobmV3IEd1aWRlUGFnZSgpKeOAgueEtuWQjuWcqOexu+aWh+S7tumhtumDqOi/m+ihjGltcG9ydO+8mmltcG9ydCBHdWlkZVBhZ2UgZnJvbSAnLi4vZ3VpZGVQYWdlL2d1aWRlUGFnZSfjgIJcbiAgLSDlpoLmnpzpobXpnaLot7PovazpnIDopoHkvKDpgJLlj4LmlbDvvIzpgqPkuYjpnIDopoHkvb/nlKhQYWdl55qE5a2Q57G75p6E6YCg5Ye95pWw5p2l5Lyg6YCS5Y+C5pWw77yM5q+U5aaC77yaQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBHdWlkZVBhZ2UodGhpcy5wcm9kdWN0SUQpKeOAglxuICAtIOWcqOWunueOsOmhtemdoui3s+i9rOS7o+eggeeahOaXtuWAme+8jOW/hemhu+S4peagvOaMieeFp+S7peS4i+S4ieatpeadpeWunueOsO+8mlxuICAgICAgLSAqKuesrOS4gOatpe+8muWFiOWIhuaekOi3s+i9rOeahOebruagh+mhtemdoumcgOimgeS8oOmAkuWTquS6m+WPguaVsCoqXG4gICAgICAtICoq56ys5LqM5q2l77ya5L+u5pS555uu5qCH6aG16Z2i5p6E6YCg5Ye95pWwKirvvJpcbiAgICAgIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgICAgIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWRpbmdQYWdlIGV4dGVuZHMgUGFnZSB7XG4gICAgICAgICAgcHJpdmF0ZSBib29rSWQ6IG51bWJlclxuICAgICAgICAgIHByaXZhdGUgY2hhcHRlclRpdGxlOiBzdHJpbmdcbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdHJ1Y3Rvcihib29rSWQ6IG51bWJlciwgY2hhcHRlclRpdGxlOiBzdHJpbmcpIHtcbiAgICAgICAgICAgICAgc3VwZXIoKVxuICAgICAgICAgICAgICB0aGlzLmJvb2tJZCA9IGJvb2tJZFxuICAgICAgICAgICAgICB0aGlzLmNoYXB0ZXJUaXRsZSA9IGNoYXB0ZXJUaXRsZVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxcYFxcYFxcYFxuICAgICAgLSAqKuesrOS4ieatpe+8muS/ruaUuei3s+i9rOS7o+eggSoqXG4gICAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgICBjb25zdCBib29rRGF0YSA9IHRoaXMucmVhZGluZ0hpc3RvcnlEYXRhUmVmLnZhbHVlWzBdXG4gICAgICBBbGxGdW5jdGlvbi5zdGFydFBhZ2UobmV3IFJlYWRpbmdQYWdlKGJvb2tEYXRhLmlkLCBib29rRGF0YS5jaGFwdGVyVGl0bGUpKVxuICAgICAgXFxgXFxgXFxgXG5cbiMjIDcuICoq55CG6Kej5Z+656GA5byA5Y+R6KeE5YiZKipcbiAgLSBsaWLmlofku7blpLnph4zpnaLnmoTku6PnoIHmlofku7bpg73mmK/lhoXnva7moYbmnrbku6PnoIHvvIznu53lr7nnpoHmraLlr7lsaWLmlofku7blpLnnmoTku6PnoIHov5vooYzlop7liKDmlLnmk43kvZxcbiAgLSDmiYDmnIlQYWdl55qE5a2Q57G777yM6YO95YWB6K645re75Yqg5p6E6YCg5Ye95pWw5ZKM5p6E6YCg5Ye95pWw55qE5Y+C5pWw77yM6L+Z5Lqb5Y+C5pWw5bCx55So5p2l6aG16Z2i6Lez6L2s5pe26aG16Z2i5LmL6Ze05Lyg6YCS5pWw5o2u5L2/55So77yM5q+U5aaC77ya5ZWG5ZOB5YiX6KGo6aG1UHJvamVjdExpc3RQYWdl6Lez5Yiw5ZWG5ZOB6K+m5oOF6aG1UHJvamVjdERldGFpbFBhZ2XvvIzpgqPkuYhQcm9qZWN0TGlzdFBhZ2XlupTor6XopoHkvKDnu5lQcm9qZWN0RGV0YWlsUGFnZeS4gOS4quWPguaVsO+8mnByb2R1Y3RJROOAguaJgOS7pe+8jFByb2plY3REZXRhaWxQYWdl55qE6aG16Z2i5Y+C5pWw5aOw5piO5ZKM5p6E6YCg5Ye95pWw5bqU6K+l5piv6L+Z5qC35YaZ77yaXG4gICAgcHJpdmF0ZSBwcm9kdWN0SUQ6IHN0cmluZ1xuICAgIGNvbnN0cnVjdG9yKHByb2R1Y3RJRDogc3RyaW5nKSB7XG4gICAgICBzdXBlcigpXG4gICAgICB0aGlzLnByb2R1Y3RJRCA9IHByb2R1Y3RJRFxuICAgIH3jgIJcbiAgLSDku7vkvZXpobXpnaLvvIjnibnliKvmmK/pl6rlsY/pobXvvInnmoTkuJrliqHpgLvovpHnu53lr7nkuI3og73mlL7liLBBcHBsaWNhdGlvbi50c+i/m+ihjOWkhOeQhu+8jEFwcGxpY2F0aW9uLnRz5Y+q6L+b6KGM5YWo5bGA572R57uc5oum5oiq5aSE55CG44CB5YWo5bGA6Z2Z5oCB5Y+Y6YeP44CB5YWo5bGA6Z2Z5oCB5pa55rOV55qE5a6a5LmJ5ZKM5a6e546wXG4gIC0g5aaC5p6c5piv5aSa5Liq6aG16Z2i5YWx55So55qE5pWw5o2u5Y+Y6YeP77yM5Y+v5Lul6ICD6JmR5aOw5piO5Li65YWo5bGA6Z2Z5oCB5Y+Y6YeP77yM5bm25ZyoQXBwbGljYXRpb24udHPkuK3ov5vooYzlo7DmmI7jgIJcbiAgLSDlhajlsYDpnZnmgIHlj5jph4/lnKjlhbPpl61BUFDmiJbogIXnvZHpobXlkI7kvJrmuIXnkIbmjonnmoTvvIzmiYDku6XkvaDopoHmgJ3ogIPmuIXmpZrlk6rkupvmlbDmja7lj5jph4/pnIDopoHmjIHkuYXljJblgqjlrZjvvIzlk6rkupvmmK/lhajlsYDpnZnmgIHlj5jph4/vvIzmjIHkuYXljJbmjqXlj6PvvJpzYXZlRGF0YWJhc2VYeHjlkoxnZXREYXRhYmFzZURhdGFYeHjvvIzmr5TlpoLmmK/lkKblt7Lnu4/lvLnlh7rov4flub/lkYrlvLnmoYbvvIzov5nkuKrlupTor6XmjIHkuYXljJblgqjlrZjjgIJcbiAgLSDmiYDmnInnmoTnvZHnu5zmi6bmiKrnmoTlhajlsYDnu5/kuIDlpITnkIbpnIDopoHlnKhBcHBsaWNhdGlvbuS4reeahG9uR2xvYmFsTmV0U3VjY2Vzc0ludGVyY2VwdCjogZTnvZHmiJDlip/lkI7vvIzlkI7nq6/kuJrliqHmraPnoa7kuI7plJnor6/pg73kvJrlm57osIPliLDov5nph4zvvIzmiYDku6XlnKjov5nph4zlj6/nu5/kuIDlpITnkIbkuJrliqHplJnor6/noIEp5oiWb25HbG9iYWxOZXRGYWlsSW50ZXJjZXB0KOe9kee7nOS4jemAmu+8jOi/nuaOpeWksei0peaDheWGteS8muWbnuiwg+WIsOi/memHjCnph4zpnaLlpITnkIbjgIJcbiAgLSDpobXpnaLlhoXnmoTnvZHnu5zor7fmsYLkuJrliqHlpITnkIbkuI3lvpflhpnlnKhBcHBsaWNhdGlvbueahG9uR2xvYmFsTmV0U3VjY2Vzc0ludGVyY2VwdOmHjOmdouOAglxuICAtIOWjsOaYjuWFqOWxgOWPmOmHj+OAgeWxgOmDqOWPmOmHj+W/hemhu+imgeWjsOaYjuaVsOaNruexu+Wei++8jOW5tuS4lOe7neWvueemgeatouS9v+eUqGFuee+8jOivt+S9v+eUqOWFt+S9k+exu+Wei+adpeWjsOaYjlxuICAtIOWtl+espuS4suS4jeW+l+ebtOaOpei/m+ihjGJvb2xlYW7ov5DnrpfnhLblkI7otYvlgLznu5lib29sZWFu57G75Z6L55qE5Y+Y6YeP77yM6ZyA6KaB5Zyo5a2X56ym5Liy5YmN6Z2i5re75Yqg5Lik5Liq6Z2e6L+Q566X77yaISHjgILmr5TlpoLmraPnoa7nmoTlhpnms5XvvJpjb25zdCBpc0FkZCA9ICEhdGhpcy5pbnB1dFZpZXcudGV4dCAmJiBpc05ld1xuICAtIOaJgOacieeahHRvYXN05o+Q56S677yM5b+F6aG76LCD55SoQWxsRnVuY3Rpb24uc2hvd1RvYXN05pa55rOV5p2l5pi+56S677yM5bm25LiU5aaC55So5oi35o+P6L+w5rKh5pyJ5piO56Gu6K+05piO6ZyA6KaBdG9hc3Tmj5DnpLrvvIzkvaDkuI3lvpfmk4Xoh6rov5vooYxUb2FzdOaPkOekuuOAglxuICAtIOW7tuaXtuaJp+ihjEFsbEZ1bmN0aW9uLnNldFRpbWVvdXTns7vnu5/kvJroh6rliqjmuIXnkIZ0aW1lb3V077yM5Luj56CB5LiK57ud5a+55LiN6IO96L+b6KGMY2xlYVRpbWVvdXTnrYnnsbvkvLzmk43kvZzvvIzlm6DmraRzZXRUaW1lb3V05Lmf5LiN6ZyA6KaB5aOw5piO5Y+Y6YeP5Y675o6l5pS2c2V0VGltZW91dOi/lOWbnueahOW8leeUqOOAglxuICAtIOi9ruaSrVZpZXdQYWdlcuWvueW6lOeahOe0ouW8leaMh+ekuuWZqOWuueWZqO+8jOi/meS4que0ouW8leaMh+ekuuWZqOS4jemcgOimgemineWkluS7o+eggeWunueOsOaMh+ekuuWZqOeCueeahOWIh+aNolVJ5pu05paw6YC76L6R77yM5pys6LqrVmlld1BhZ2Vy5LiOSW5kaWNhdG9yQ29udGFpbmVy5bqV5bGC5bey57uP5a6e546w5LqG5YiH5o2i55qEVUnmm7TmlrDpgLvovpHnmoTkuobvvIzlj6rpnIDopoF2aWV3UGFnZXIuYmluZEluZGljYXRvcihpbmRpY2F0b3JDb250YWluZXIp5Y2z5Y+v44CCXG4gIC0g56e75Yqo56uv55qEVmlld1BhZ2Vy55qEY2FuSW5kaWNhdG9yQ2xpY2vlsZ7mgKfpu5jorqTorr7nva7kuLpmYWxzZeeahO+8jOmZpOmdnueUqOaIt+aYjuehruivtOaYjumcgOimgea/gOa0u+aMh+ekuuWZqOeahOeCueeCueWHu+WIh+aNolZpZXdQYWdlcuOAglxuICAtIOavj+S4gOS4qumhtemdoijlpoJsb2dpblBhZ2Up5bu66K6u5ZyocGFnZeaWh+S7tuWkueS4i+mdouWIm+W7uuS4gOS4qumhtemdouaWh+S7tuWkuSjlpoJsb2dpbinvvIznhLblkI7pobXpnaLnmoR0c+aWh+S7tijlpoJsb2dpblBhZ2UudHMp5Yib5bu65Zyo6aG16Z2i5paH5Lu25aS55LiL6Z2i77yM6aG16Z2i5paH5Lu25aS55LiL5aaC5p6c6ZyA6KaB6L+Y5Y+v5Yib5bu65LiA5Liq6aG16Z2i5pWw5o2udHPmlofku7Yo5aaCbG9naW5QYWdlRGF0YS50cynvvIzov5nmoLflpoJsb2dpblBhZ2XotJ/otKPkuJrliqHpgLvovpHlkozkuqTkupLpgLvovpHvvIzlpoJsb2dpblBhZ2VEYXRh6LSf6LSj5pWw5o2u5aOw5piO5a6a5LmJ44CB5Yid5aeL5YyW5LiO566h55CG562J44CCXG5cbiMjIDguICoq55CG6Kej5ZCO56uvQVBJ5o6l5Y+j55qE5a6a5LmJ5LiO5L2/55SoKipcbiAgLSDkvb/nlKgncmVhZF9maWxlJ+W3peWFt+ivu+WPlidzcmMvYmFja2VuZEFwaS9iYWNrZW5kQXBpSW5mby5tZCflkI7nq69BUEnkvb/nlKjor7TmmI7mlofku7bvvIzlv4XpobvnvJPlrZjorrDkvY/miYDmnInlj6/nlKjnmoTlkI7nq69BUEnmjqXlj6PliJfooajjgIJcbiAgLSDlkI7nq69BUEnmjqXlj6PnmoTlrprkuYnkuI7kvb/nlKjvvIzlv4Xpobvkvb/nlKhzcmMvYmFja2VuZEFwaeaWh+S7tuWkuemHjOmdoueahOWQhOenjUFQSeexu+S4reWumuS5ieeahOaWueazle+8jOS4jeWFgeiuuOS9v+eUqOacquWcqGJhY2tlbmRBcGnmlofku7blpLnkuK3lrprkuYnnmoTlkI7nq69BUEnvvIzmr5TlpoLvvJpiYWNrZW5kQXBpL2FjY291bnQvZ2V0VXNlckluZm8udHPvvIzov5nkuKrlsLHmmK/otKblj7fmqKHlnZfkuK3nmoTojrflj5bnlKjmiLfkv6Hmga/nmoRBUEnnsbvvvIzov5Tlm57nmoRyZXPlv4Xpobvlo7DmmI7lhbfkvZPnsbvlnovvvIzmr5TlpoJyZXM6IGdldFVzZXJJbmZvUmVzcG9uc2XjgIJcbiAgLSByZXF1ZXN05o6l5Y+j5Y+q6ZyA5a6a5LmJ5Y2z5Y+v77yM5LiN6ZyA6KaB5a6e546w77yM5bqV5bGC5bey57uP5a6e546w44CCXG4gIC0gQVBJ57G75Luj56CB56S65L6L77yaXG4gICAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICAgIGltcG9ydCBCYXNlQXBpIGZyb20gJy4uL0Jhc2VBcGknXG5cbiAgICAvLyDotKblj7fns7vnu58t6LSm5Y+35a+G56CB55m75b2V5o6l5Y+j6K+35rGC5pWw5o2uXG4gICAgZXhwb3J0IGludGVyZmFjZSBwb3N0Q2xpZW50Qml6QXV0aExvZ2luUmVxdWVzdCB7XG4gICAgICAgIHVzZXJuYW1lPzogc3RyaW5nXG4gICAgICAgIHBhc3N3b3JkPzogc3RyaW5nXG4gICAgICAgIGtleT86IHN0cmluZ1xuICAgICAgICBjYXB0Y2hhPzogc3RyaW5nXG4gICAgfVxuXG4gICAgLy8g6LSm5Y+357O757ufLei0puWPt+WvhueggeeZu+W9leaOpeWPo+i/lOWbnuaVsOaNrlxuICAgIGV4cG9ydCBpbnRlcmZhY2UgcG9zdENsaWVudEJpekF1dGhMb2dpblJlc3BvbnNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgIG1zZzogc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgYWNjZXNzX3Rva2VuOiBzdHJpbmdcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIOi0puWPt+ezu+e7ny3otKblj7flr4bnoIHnmbvlvZXmjqXlj6PlpLHotKXov5Tlm57mlbDmja5cbiAgICBleHBvcnQgaW50ZXJmYWNlIGFwaUZhaWxJbmZvIHtcbiAgICAgICAgbXNnOiBzdHJpbmdcbiAgICAgICAgY29kZTogbnVtYmVyXG4gICAgfVxuXG4gICAgLy8g6LSm5Y+357O757ufLei0puWPt+WvhueggeeZu+W9leaOpeWPo1xuICAgIGV4cG9ydCBkZWZhdWx0IGNsYXNzIHBvc3RDbGllbnRCaXpBdXRoTG9naW4gZXh0ZW5kcyBCYXNlQXBpICB7XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyByZXF1ZXN0X0FydHVYMWQ4YTZBKFxuICAgICAgICAgICAgcmVxdWVzdDogcG9zdENsaWVudEJpekF1dGhMb2dpblJlcXVlc3QsXG4gICAgICAgICAgICBzdWNjZXNzOiAocmVzOiBwb3N0Q2xpZW50Qml6QXV0aExvZ2luUmVzcG9uc2UpID0+IHZvaWQsXG4gICAgICAgICAgICBmYWlsOiAoZXJyb3I6IGFwaUZhaWxJbmZvKSA9PiB2b2lkXG4gICAgICAgICk6IHZvaWQgeyB9XG5cbiAgICB9XG4gICAgXFxgXFxgXFxgXG4gIC0gQVBJ57G755qE5L2/55So5pa55byP77ya5YWIaW1wb3J0IEFQSeexu++8jOeEtuWQjuiwg+eUqEFQSeexu+eahHJlcXVlc3Tmlrnms5XvvIzmr5TlpoLvvJpcbiAgICBpbXBvcnQgeyBwb3N0Q2xpZW50Qml6QXV0aExvZ2luIH0gZnJvbSAnLi4vLi4vYmFja2VuZEFwaS9hY2NvdW50L3Bvc3RDbGllbnRCaXpBdXRoTG9naW4nXG4gICAgLi4uXG4gICAgY29uc3QgcmVxdWVzdDogcG9zdENsaWVudEJpekF1dGhMb2dpblJlcXVlc3QgPSB7XG4gICAgICB1c2VybmFtZTogJ2FkbWluJyxcbiAgICAgIHBhc3N3b3JkOiAnMTIzNDU2JyxcbiAgICAgIGtleTogJzEyMzQ1NicsXG4gICAgICBjYXB0Y2hhOiAnMTIzNDU2J1xuICAgIH1cbiAgICBwb3N0Q2xpZW50Qml6QXV0aExvZ2luLnJlcXVlc3RfQXJ0dVgxZDhhNkEocmVxdWVzdCwgKHJlc3BvbnNlOiBwb3N0Q2xpZW50Qml6QXV0aExvZ291dFJlc3BvbnNlKSA9PiB7XG4gICAgICAvLyDor7fmsYLmiJDlip/lkI7nmoTlpITnkIZcbiAgICB9LCAoZXJyb3I6IGFwaUZhaWxJbmZvKSA9PiB7XG4gICAgICAvLyDor7fmsYLlpLHotKXlkI7nmoTlpITnkIZcbiAgICB9KVxuICAgIC4uLlxuXG4jIyA5LiAqKueQhuino+iwg+eUqOWQjuerr2FwaeaOpeWPo+i/lOWbnuaVsOaNruWQjuS4jlVJ5pWw5o2u57uR5a6aKipcbiAgLSDlpoLmnpzmnInlkI7nq69hcGnmjqXlj6Por7fmsYLvvIzpgqPkuYjlv4XpobvlsIHoo4XkuIDkuKrlkI3lrZflj6vlgZpcXGBiaW5kRGF0YUZyb21OZXRcXGDnmoTmlrnms5XmnaXlpITnkIbosIPnlKjlkI7nq69hcGnmjqXlj6Pov5Tlm57mlbDmja7lkI7kuI5VSeaVsOaNrue7keWumueahOmAu+i+kVxuICAtIOWcqOiwg+eUqOWQjuerr2FwaeaOpeWPo+i/lOWbnuaVsOaNruWQju+8jOW/hemhu+S4peagvOWPguiAg1xcYGFwaeaOpeWPo+i/lOWbnuaVsOaNruWQjuS4jlVJ5pWw5o2u57uR5a6a5L6L5a2QXFxg77yM6ZyA6KaB5qC55o2udnR5cGXmnaXlgZrmlbDmja7nu5HlrppcbiAgICAtIHZ0eXBlPVwidmVydGljYWxMaXN0Vmlld1wi44CBdnR5cGU9XCJob3Jpem9udGFsTGlzdFZpZXdcIuOAgXZ0eXBlPVwidmlld1BhZ2VyXCLnsbvlnovnmoToioLngrnnu4Tku7bvvIzpnIDopoHkvb/nlKhzZXREYXRhTGlzdOaWueazleadpee7keWumuaVsOaNru+8jOavlOWmgu+8mlxuICAgICAgdGhpcy54eHhWZXJ0aWNhbExpc3RWaWV3LnNldERhdGFMaXN0KHh4eFJlc3BvbnNlLmRhdGEubGlzdCnjgIF0aGlzLnh4eEhvcml6b250YWxMaXN0Vmlldy5zZXREYXRhTGlzdCh4eHhSZXNwb25zZS54eHhMaXN0KeOAgXRoaXMueHh4Vmlld1BhZ2VyLnNldERhdGFMaXN0KHh4eFJlc3BvbnNlLnh4eExpc3QpXG4gICAgLSBcXGBzZXREYXRhTGlzdFxcYOeahOWFpeWPguW/hemhu+aYr+ebtOaOpeWGmeWQjuerr2Fwaei/lOWbnueahOaVsOaNrui3r+W+hO+8jOavlOWmgu+8mnh4eFJlc3BvbnNlLmRhdGEueHh4TGlzdO+8jOe7neWvueS4jeiDveS9v+eUqOWFqOWxgOWPmOmHj+WSjOWxgOmDqOWPmOmHj+i/m+ihjOaVsOaNrue7keWumu+8jOS4jeiDveWGmeWFtuS7lumAu+i+keS7o+egge+8jOavlOWmgu+8muS4jeiDveWGmWlm44CBZm9y44CBd2hpbGXnrYnlvqrnjq/or63lj6XvvIzkuI3og73lhpnlh73mlbDosIPnlKjnrYnjgIJcbiAgICAtIHZ0eXBlPVwibGlzdEl0ZW1DYXJkXCLjgIF2dHlwZT1cIm9uZVZpZXdQYWdlckNvbnRlbnRcIuexu+Wei+eahOiKgueCuee7hOS7tu+8jOmcgOimgea3seW6pumBjeWOhuWug+eahOesrDHkuKppdGVt55qE5a2p5a2Q77yM54S25ZCO57uT5ZCI5ZCO56uvYXBp6L+U5Zue55qEeHh4UmVzcG9uc2XnmoTmlbDmja7nu5PmnoTnu5nnrKwx5LiqaXRlbeiuvue9ruaVsOaNru+8jOazqOaEj+WPqumcgOe7meesrDHkuKppdGVt6IqC54K56K6+572u5pWw5o2u77yM6ICM5LiN5piv5omA5pyJaXRlbeiKgueCuemDveiuvue9ruaVsOaNru+8jOW5tuS4lOW/hemhu+aYr+ebtOaOpeWGmeWQjuerr2Fwaei/lOWbnueahOaVsOaNrui3r+W+hOeahOesrOS4gOS4qml0ZW1EYXRh55qE5pWw5o2u6Lev5b6E77yM5q+U5aaC77yaY29uc3QgaXRlbURhdGEgPSBkYXRhTGlzdFswXTsgdGhpcy5yZWNvbW1lbmRCb29rVGl0bGUxLnRleHQgPSBpdGVtRGF0YS54eHgudGl0bGVUZXh077yM57ud5a+55LiN6IO95L2/55So5YWo5bGA5Y+Y6YeP5ZKM5bGA6YOo5Y+Y6YeP6L+b6KGM5pWw5o2u57uR5a6a77yM5LiN6IO95YaZ5YW25LuW6YC76L6R5Luj56CB77yM5q+U5aaC77ya5LiN6IO95YaZaWbjgIFmb3LjgIF3aGlsZeetieW+queOr+ivreWPpe+8jOWmguaenOmcgOimgemAu+i+keWkhOeQhuWQjuaJjeiDveW+l+WHunRoaXMucmVjb21tZW5kQm9va1RpdGxlMS50ZXh055qE5YC877yM6YKj5bCx5b+F6aG76KaB5bCB6KOF5LiA5LiqXFxgZ2V0eHh4KGl0ZW1EYXRhOiBhbnkpOiBzdHJpbmdcXGDmlrnms5XmnaXojrflj5bvvIznhLblkI46dGhpcy5yZWNvbW1lbmRCb29rVGl0bGUxLnRleHQgPSB0aGlzLmdldHh4eChpdGVtRGF0YSlcbiAgICAtIGFwaeaOpeWPo+i/lOWbnuaVsOaNruWQjuS4jlVJ5pWw5o2u57uR5a6a5L6L5a2Q77yaXG4gICAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgICAvLyDlkI7nq694eHhBcGnov5Tlm57nmoR4eHhSZXNwb25zZeaVsOaNrue7k+aehFxuICAgICAgZXhwb3J0IGludGVyZmFjZSBnZXRSZWNvbW1lbmRCb29rTGlzdFJlc3BvbnNlIHtcbiAgICAgICAgICBjb2RlOiBudW1iZXJcbiAgICAgICAgICBtc2c6IHN0cmluZ1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgbGlzdDogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGlkOiBudW1iZXIgLy8g5Lmm57GNSURcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogc3RyaW5nIC8vIOS5puexjeagh+mimFxuICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcjogc3RyaW5nIC8vIOS9nOiAheWQjeensFxuICAgICAgICAgICAgICAgICAgICAgIGNvdmVyVXJsOiBzdHJpbmcgLy8g5bCB6Z2i5Zu+54mHVVJMXG4gICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZyAvLyDkuabnsY3nroDku4tcbiAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeU5hbWU6IHN0cmluZyAvLyDliIbnsbvlkI3np7BcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSAvLyDkuabnsY3liJfooahcbiAgICAgICAgICAgICAgdG90YWw6IG51bWJlciAvLyDmgLvmlbDph49cbiAgICAgICAgICAgICAgcGFnZTogbnVtYmVyIC8vIOW9k+WJjemhteeggVxuICAgICAgICAgICAgICBzaXplOiBudW1iZXIgLy8g5q+P6aG15pWw6YePXG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgLi4uXG4gICAgICBwcml2YXRlIGJpbmREYXRhRnJvbU5ldChnZXRSZWNvbW1lbmRCb29rTGlzdERhdGE6IGdldFJlY29tbWVuZEJvb2tMaXN0UmVzcG9uc2UpIHtcbiAgICAgICAgLy8g6K6+572u5Lmm57GN5YiX6KGo5pWw5o2uXG4gICAgICAgIHRoaXMucmVjb21tZW5kQm9va0xpc3Quc2V0RGF0YUxpc3QoZ2V0UmVjb21tZW5kQm9va0xpc3REYXRhLmRhdGEubGlzdERhdGEpXG4gICAgICAgIC8vIOiuvue9ruesrDHkuKppdGVt6IqC54K55pWw5o2uXG4gICAgICAgIGNvbnN0IGxpc3RJdGVtRGF0YSA9IGdldFJlY29tbWVuZEJvb2tMaXN0RGF0YS5kYXRhLmxpc3REYXRhWzBdXG4gICAgICAgIHRoaXMucmVjb21tZW5kQm9va0NvdmVyMS5zcmMgPSBsaXN0SXRlbURhdGEuY292ZXJVcmxcbiAgICAgICAgdGhpcy5yZWNvbW1lbmRCb29rVGl0bGUxLnRleHQgPSBsaXN0SXRlbURhdGEudGl0bGVcbiAgICAgICAgdGhpcy5yZWNvbW1lbmRCb29rQXV0aG9yMS50ZXh0ID0gbGlzdEl0ZW1EYXRhLmF1dGhvclxuICAgICAgICAuLi5cbiAgICAgICAgLy8g6K6+572u6L2u5pKt5pWw5o2uXG4gICAgICAgIHRoaXMucmVjb21tZW5kVmlld1BhZ2VyLnNldERhdGFMaXN0KGdldFJlY29tbWVuZEJvb2tMaXN0RGF0YS5kYXRhLnZpZXdQYWdlckRhdGEpXG4gICAgICAgIC8vIOiuvue9ruesrDHkuKppdGVt6IqC54K55pWw5o2uXG4gICAgICAgIGNvbnN0IHZpZVBhZ2VySXRlbURhdGEgPSBnZXRSZWNvbW1lbmRCb29rTGlzdERhdGEuZGF0YS52aWV3UGFnZXJEYXRhWzBdXG4gICAgICAgIHRoaXMucmVjb21tZW5kSW1hZ2UxLnNyYyA9IHZpZVBhZ2VySXRlbURhdGEuY292ZXJVcmxcbiAgICAgICAgdGhpcy5jYXJvdXNlbFRpdGxlMS50ZXh0ID0gdGhpcy5nZXRDYXJvdXNlbFRpdGxlRGF0YSh2aWVQYWdlckl0ZW1EYXRhKSAvLyDnlLHkuo7mnInlpI3mnYLnmoTpgLvovpHlpITnkIbvvIzmiYDku6Xlv4XpobvopoHlsIHoo4XkuIDkuKrmlrnms5XmnaXojrflj5ZcbiAgICAgIH1cbiAgICAgIHByaXZhdGUgZ2V0Q2Fyb3VzZWxUaXRsZURhdGEoaXRlbURhdGE6IGFueSkge1xuICAgICAgICBsZXQgdGl0bGUgPSAnJ1xuICAgICAgICBpZiAoaXRlbURhdGEudGl0bGUpIHtcbiAgICAgICAgICB0aXRsZSA9IGl0ZW1EYXRhLnRpdGxlXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbURhdGEuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICB0aXRsZSA9IGl0ZW1EYXRhLmRlc2NyaXB0aW9uXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGl0bGUgPSBpdGVtRGF0YS5jYXRlZ29yeU5hbWVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGl0bGVcbiAgICAgIH1cbiAgICAgIC4uLlxuICAgICAgXFxgXFxgXFxgXG5cbiMjIDEwLiDova7mkq1WaWV3UGFnZXLnmoTmjIfnpLrlmajngrnnmoTliIfmjaJVSeabtOaWsOmAu+i+ke+8jOS4jeW+l+WcqHRz5Luj56CB6YeM6Z2i6L+b6KGM77yM5Zug5Li6Vmlld1BhZ2Vy55qE5oyH56S65Zmo54K555qE5YiH5o2iVUnmm7TmlrDpgLvovpHlt7Lnu4/oh6rliqjlrp7njrDkuobvvIzkvaDkuI3pnIDopoHlho3miYvliqjlrp7njrDjgIJcblxuIyMgMTEuIOS4peagvOmBteWuiOS7o+eggeinhOiMg+S4jumZkOWItlxuIC0g44CQ57G75Z6L5LiO5rOb5Z6L44CRXG4gICAtIOWcqOe7p+aJv+iHqlxcYFBhZ2VcXGDnmoTnsbvkuK3vvIznpoHmraLpnZ7pnZnmgIHmiJDlkZjkvb/nlKhET03nsbvlnovmiJblhbbku5boh6rlrprkuYnnpoHmraLnsbvlnovjgIJcbiAgIC0g56aB5q2i5L2/55SoVUlMSULnsbvlnovnmoTmlbDnu4TkvZzkuLrmiJDlkZjjgIHlsYDpg6jlj5jph4/jgIHmlrnms5XlhaXlj4LmiJbov5Tlm57lgLzjgIJcbiAgIC0g56aB5q2i57G75oiQ5ZGY5LiO5bGA6YOo5Y+Y6YeP5pi+5byP5aOw5piO5Li6XFxgYW55XFxg77yM5Lul5Y+K5L2/55SoXFxgYXMgYW55XFxg44CCXG4gICAtIFxcYFJlZjxUPlxcYOeahFxcYFRcXGDku4XlhYHorrjvvJpcXGBudW1iZXJcXGDjgIFcXGBzdHJpbmdcXGDjgIFcXGBib29sZWFuXFxg44CBXFxgYW55XFxg44CBXFxgQXJyYXk8YW55PlxcYOWPiuWFtlxcYHwgbnVsbFxcYOWPmOS9k+OAglxuICAgLSDnpoHmraLkvb/nlKhcXGBTeW1ib2xcXGDlj4rlhbbnm7jlhbNBUEnjgIJcbiAgIC0g56aB5q2i5YWo5bGA5Y+Y6YeP44CB5bGA6YOo5Y+Y6YeP44CB5pa55rOV5YWl5Y+C44CB6L+U5Zue5YC855qE6IGU5ZCI57G75Z6L44CCXG4gICAtIOWcqOe7p+aJv1xcYFBhZ2VcXGDnmoTmlofku7bkuK3npoHmraLlo7DmmI5cXGBpbnRlcmZhY2VcXGDvvIzkuJTor6Xmlofku7bku4XlhYHorrjkuIDkuKpcXGBjbGFzc1xcYOWjsOaYjuOAglxuICAgLSDpnZ5cXGBzcmMvbGliXFxg55uu5b2V55qEXFxgdHNcXGDmlofku7bkuK3vvIxcXGBpbnRlcmZhY2VcXGDlj6rlhYHorrjlrprkuYnlsZ7mgKfvvJvnpoHmraLlhbbku5blo7DmmI7jgIJcbiAgIC0g56aB5q2i5L2/55SoXFxgUGFydGlhbDxUPlxcYOOAglxuICAgLSDnpoHmraLooYzlhoXlh73mlbDnsbvlnovjgIHlh73mlbDnsbvlnovliKvlkI3kuI7lhoXogZTlr7nosaHnsbvlnovlrZfpnaLph4/vvIjlsZ7mgKfpmaTlpJbvvInjgIJcbiAgIC0g56aB5q2i5a6a5LmJ57G75Z6L5bGe5LqOVUlMSULnmoTpnZ7nsbvmiJDlkZjlj5jph4/jgIJcbiAgIC0g56aB5q2i5bCGVUlMSULnsbvlnovnmoTlgLzotYvnu5npnZ5VSUxJQuexu+Wei+eahOebruagh+OAglxuIC0g44CQ5a+85YWl44CRXG4gICAtIOW9k+exu+i3r+W+hOWcqFxcYHNyYy9saWJcXGDnm67lvZXkuIvml7bvvIznpoHmraLlr7nov5nkuKrnsbvkvb/nlKjlr7zlhaXph43lkb3lkI3miJbliKvlkI3jgIJcbiAtIOOAkOWvvOWHuuOAkVxuICAgLSDlnKjmnKrnu6fmib9cXGBQYWdlXFxg5oiWXFxgQmFzZUFwaVxcYOeahOaWh+S7tuS4re+8jOS4lOexu+WQjeS4jeetieS6jlxcYHNyYy9saWJcXGDlkoxcXGBzcmMvbGliL3VpbGliXFxg55uu5b2V5LiL55qE57G75ZCN44CB5LiU5LiN5Li6XFxgQXBwbGljYXRpb25cXGDml7bvvIzku4XlhYHorrhcXGBleHBvcnQgZGVmYXVsdCBjbGFzc1xcYOOAgVxcYGV4cG9ydCBjbGFzc1xcYOOAgVxcYGV4cG9ydCBpbnRlcmZhY2VcXGDvvJvnpoHmraLlhbbku5blr7zlh7rlvaLlvI/jgIJcbiAtIOOAkOaWueazleS4juWHveaVsOOAkVxuICAgLSDnpoHmraLkvb/nlKhcXGBzZXRJbnRlcnZhbFxcYOOAgVxcYGNsZWFySW50ZXJ2YWxcXGDjgIFcXGBzZXRUaW1lb3V0XFxg77yb5L2/55SoXFxgQWxsRnVuY3Rpb25cXGDlr7nlupTmlrnms5XjgIJcbiAgIC0g56aB5q2i5L2/55SoXFxgbG9jYWxTdG9yYWdlL3Nlc3Npb25TdG9yYWdlXFxg55qEXFxgc2V0SXRlbS9nZXRJdGVtXFxg77yb5L2/55SoXFxgQWxsRnVuY3Rpb25cXGDmlbDmja7lupPmlrnms5XjgIJcbiAgIC0g56aB5q2iXFxgRGF0ZS5ub3coKVxcYOS4jlxcYG5ldyBEYXRlKClcXGDvvJvkvb/nlKhcXGBBbGxGdW5jdGlvblxcYOaXtumXtOaWueazleOAglxuICAgLSDnpoHmraLlnKjlh73mlbDlhoXlrprkuYnlhoXpg6jlh73mlbDvvJvor7flrprkuYnkuLrnsbvnp4HmnInmlrnms5XjgIJcbiAgIC0g56aB5q2iXFxgSlNPTi5zdHJpbmdpZnkvSlNPTi5wYXJzZVxcYO+8m+aMieS4iuS4i+aWh+S9v+eUqFxcYEpzb25BcnJheS5zdHJpbmdpZnkvcGFyc2VcXGDmiJZcXGBKc29uT2JqZWN0LnN0cmluZ2lmeS9wYXJzZVxcYOOAglxuICAgLSBcXGBKc29uT2JqZWN0LnN0cmluZ2lmeS9wYXJzZVxcYOS4jlxcYEpzb25BcnJheS5zdHJpbmdpZnkvcGFyc2VcXGDnmoTlj4LmlbDnpoHmraLkvKDlhaVcXGBjbGFzc1xcYOWvueixoeOAglxuICAgLSDlnKjnu6fmib9cXGBQYWdlXFxg55qE57G75Lit6Z2Z5oCB6LCD55So57un5om/XFxgQmFzZUFwaVxcYOeahOexu+aWueazleaXtu+8muaWueazleWQjeW/hemhu+WMuemFjVxcYHJlcXVlc3RfPDEw5L2N5a2X5q+N5pWw5a2XPlxcYO+8jOWPguaVsOW/hemhu+S4ujPkuKrvvIzkuJTnrKwy44CBM+S4quWPguaVsOexu+Wei+S4jeW+l+S4ulxcYGFueVxcYOaIluazm+Wei+OAglxuICAgLSDlnKjnu6fmib9cXGBCYXNlQXBpXFxg55qE57G75Lit77yMXFxgcmVxdWVzdF9cXGDlvIDlpLTnmoTpnZnmgIHmlrnms5XlkIzmoLflv4Xpobvmu6HotrPlkb3lkI3kuI4z5Y+C6KeE5YiZ44CCXG4gICAtIOemgeatouaWueazleWGheWxgOmDqOWPmOmHj+mHjeWQjeOAglxuICAgLSBcXGBmaW5kVmlld0J5SWRcXGDku4XlhYHorrjnlKjkuo7nsbvmiJDlkZjlj5jph4/liJ3lp4vljJbvvIzlpoJcXGB0aGlzLmZpbmRWaWV3QnlJZCgneHh4JykgYXMgPOWFt+S9k+exu+Weiz5cXGDvvJvlhbbku5bkvY3nva7npoHmraLosIPnlKjjgIJcbiAgIC0g5Zyo57un5om/XFxgUGFnZVxcYOeahOaWh+S7tuS4reemgeatouS9v+eUqFxcYEFycmF5LmlzQXJyYXkoKVxcYO+8m+S9v+eUqFxcYEFsbEZ1bmN0aW9uLmlzQXJyYXkoKVxcYOOAglxuICAgLSDlnKjmnKrnu6fmib9cXGBQYWdlXFxg5oiWXFxgQmFzZUFwaVxcYOeahOexu+S4reemgeatouWjsOaYjuaWueazle+8iFxcYGNvbnN0cnVjdG9yXFxg6Zmk5aSW77yJ77yb6Iul57G75ZCN562J5LqOXFxgc3JjL2xpYlxcYOWSjFxcYHNyYy9saWIvdWlsaWJcXGDnm67lvZXkuIvnmoTnsbvlkI3liJnkuI3lj5fmraTpmZDjgIJcbiAgIC0g5Zyo57un5om/XFxgUGFnZVxcYOeahOexu+S4reiwg+eUqFxcYGZpbmRWaWV3QnlJZFxcYOaXtu+8jOWPguaVsOW/hemhu+WtmOWcqOS6juWQjOebruW9leWQjOWQjeWjsOaYjuW8j1VJ55qEXFxgLmlkKCcuLi4nKVxcYOWIl+ihqOOAglxuICAgLSDlnKjnu6fmib9cXGBQYWdlXFxg55qE5paH5Lu25Lit6LCD55SoXFxgd2F0Y2hcXGDvvIjkvY3kuo5cXGBSZWYudHNcXGDvvInml7bvvIznrKzkuIDkuKrlj4LmlbDlv4XpobvmmK/lrZfpnaLph4/mlbDnu4RcXGBbcmVmMSwgcmVmMl1cXGDvvIznpoHmraLlj5jph4/kvKDpgJLjgIJcbiAgIC0g5Zyo57un5om/XFxgUGFnZVxcYOeahOaWh+S7tuS4reWumuS5iVVJTElC57G75Z6L5oiQ5ZGY5Y+Y6YeP5pe277yM5b+F6aG75L2/55SoXFxgdGhpcy5maW5kVmlld0J5SWQoJ3h4eCcpIGFzIFh4eFxcYOWIneWni+WMluOAglxuIC0g44CQ5pWw57uE5pa55rOV44CRXG4gICAtIOemgeatouS9v+eUqFxcYG1hcFxcYOOAgVxcYGZpbHRlclxcYOOAgVxcYGZpbmRcXGDjgIFcXGBmaW5kSW5kZXhcXGDjgIFcXGByZWR1Y2VcXGDjgIFcXGByZWR1Y2VSaWdodFxcYOOAgVxcYGV2ZXJ5XFxg44CBXFxgc29tZVxcYOOAgVxcYHNvcnRcXGDjgIFcXGBmbGF0TWFwXFxg77yb57uf5LiA5L2/55SoXFxgZm9yLWlcXGDlrp7njrDjgIJcbiAtIOOAkOivreazlemZkOWItuOAkVxuICAgLSDnpoHmraLkvb/nlKhcXGB8fFxcYOi/m+ihjOi1i+WAvOOAgeS8oOWPguaIluWIneWni+WMlu+8m+aUueeUqOS4ieWFg+ihqOi+vuW8j+OAglxuICAgLSDnpoHmraLlr7nosaHlsZXlvIDor63ms5VcXGAuLi5cXGDlhYvpmoblr7nosaHvvJvmlLnnlKjmiYvliqjotYvlgLzjgIJcbiAgIC0g56aB5q2i57G75oiQ5ZGY5Y+Y6YeP5LiO5pa55rOV5YWl5Y+C5ZCM5ZCN77yM5oiW5LiO5pa55rOV5YaF5bGA6YOo5Y+Y6YeP5ZCM5ZCN44CCXG4gICAtIOemgeatouS9v+eUqFxcYHRyeS9jYXRjaC9maW5hbGx5XFxg5LiO5q2j5YiZ6KGo6L6+5byP44CCXG4gICAtIOWcqOe7p+aJv1xcYFBhZ2VcXGDnmoTmlofku7bkuK3npoHmraLkvb/nlKhcXGB0eXBlb2ZcXGDvvJvmlLnnlKhcXGBBbGxGdW5jdGlvbi5pc1N0cmluZy9pc051bWJlci9pc0Jvb2xlYW4vaXNPYmplY3RcXGDjgIJcbiAgIC0g56aB5q2i5a+56LGh5bGe5oCn566A5YaZ77yIXFxgeyBhIH1cXGDvvInvvJvkvb/nlKjlrozmlbTlhpnms5XvvIhcXGB7IGE6IGEgfVxcYO+8ieOAglxuICAgLSDlnKjnu6fmib9cXGBQYWdlXFxg55qE5paH5Lu25Lit77yM56aB5q2i5a+5VUlMSULnsbvlnovlj5jph4/ov5vooYznnJ/lgLzliKTmlq3jgIJcbiAtIOOAkOihpeWFheeahOmhueebruinhOWImeOAkVxuICAgLSDnpoHmraLkvb/nlKhcXGBmb3IuLi5pblxcYO+8m+S9v+eUqFxcYE9iamVjdC5rZXlzXFxgK1xcYGZvci1pXFxg44CCXG4gICAtIOemgeatolxcYGFzeW5jL1Byb21pc2VcXGDvvIjlkKtcXGBQcm9taXNlLnJhY2UvUHJvbWlzZS5hbGxcXGDvvInvvJvmiYDmnInlvILmraXmk43kvZzkvb/nlKjnrq3lpLTlh73mlbDjgIJcbiAgIC0g56aB5q2i5L2/55So5rWP6KeI5Zmo546v5aKD55qEXFxgbGliLmRvbS5kLnRzXFxg5pa55rOV5LqOTm9kZeeOr+Wig+OAglxuICAgLSDnpoHmraLkv67mlLnjgIHlop7liKBcXGBzcmMvbGliXFxg5Y+K5YW25a2Q55uu5b2V5Lit55qE5paH5Lu244CCXG5cbmA7XG4iXX0=
339
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwQ29kZVJ1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYXBwQ29kZVJ1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FpVmpELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdW5kZXJzdGFuZGluZ0NvZGVGcmFtZXdvcmtUZW1wbGF0ZSA9IGBcbiMgKirlv4XpobvlhYjnkIbop6Ppobnnm67ku6PnoIHmoYbmnrYxMeS4quefpeivhueCuSoqXG4jIyAxLiAqKueQhuino1ZpZXfnu4Tku7bnmoTlo7DmmI7lkozkvb/nlKjop4TliJkqKlxuICAtIOi/meS4jeaYr2h0bWzjgIFyZWFjdOetieW8gOWPke+8jOi/meaYr+S4gOS4quaWsOeahOW8gOWPkeahhuaetu+8jOaYr+WfuuS6jnNyYy9saWIvdWlsaWLmlofku7blpLnph4zpnaLnmoRVSee7hOS7tuW6k+adpeW8gOWPkeeahFxuICAtIFZpZXfnu4Tku7bnmoTln7rnsbvmmK9CYXNlVmlld++8jOWuueWZqOWfuuexu+aYr0Jhc2VDb250YWluZXJWaWV377yM5omA5pyJVmlld+e7hOS7tumDvee7p+aJv+iHqkJhc2VWaWV3XG4gIC0g5p+l55yLJ3NyYy9saWIvdWlsaWIvJ+aWh+S7tuWkueS4i+mdoueahOaWh+S7tuWQjeWtl++8jOeQhuino+aAu+WFseacieWkmuWwkeenjVVJ57uE5Lu2XG4gIC0gVmlld+e7hOS7tueahOWjsOaYjuW/hemhu+WcqOexu+aWh+S7tuW8gOWni+aXtuWFiOWjsOaYju+8jOW5tuS4lOW/hemhu+imgeWjsOaYjuWFt+S9k+eahFZpZXfnu4Tku7bnsbvlnovvvIzkuI3lvpflo7DmmI7kuLpCYXNlVmlld++8jOS4jeW+l+WcqOS7u+S9leWHveaVsOS9k+mHjOmdoumAmui/h2ZpbmRWaWV3QnlJZOadpeWjsOaYjlZpZXfnu4Tku7bvvIzmr5TlpoLvvJpcbiAgICAtIOKchSDmraPnoa7nmoTlhpnms5XvvJpcbiAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgcHVibGljIGNsYXNzIEhvbWVQYWdlIGV4dGVuZHMgUGFnZSB7XG4gICAgICBwcml2YXRlIG5hbWVUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJZCgnbmFtZVRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICAgIC4uLi5cbiAgICB9XG4gICAgXFxgXFxgXFxgXG4gICAgLSDinYwg6ZSZ6K+v55qE5YaZ5rOV77yI5rKh5pyJ5aOw5YW35L2T55qEVmlld+e7hOS7tuexu+Wei++8ie+8mlxuICAgIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgICBwcml2YXRlIG5hbWVUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlkKCduYW1lVGV4dFZpZXcnKVxuICAgIFxcYFxcYFxcYFxuICAgIC0g4p2MIOmUmeivr+eahOWGmeazle+8iOWcqOWHveaVsOS9k+mHjOmdoumAmui/h2ZpbmRWaWV3QnlJZOadpeWjsOaYjlZpZXfnu4Tku7bvvInvvJpcbiAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgcHJpdmF0ZSBvbmVGdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IG5hbWVUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJZCgnbmFtZVRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICAgIC4uLi5cbiAgICB9XG4gICAgXFxgXFxgXFxgXG4gIC0g5omA5pyJVmlld+e7hOS7tueahOmAieS4reeKtuaAgeOAgeiBmueEpueKtuaAgeOAgeemgeeUqOeKtuaAgeeahOWPmOWMlumDveW/hemhu+mAmui/h1xcYHNldFN0YXRpb24oc3RhdGlvbjogVmlld1N0YXRpb24pXFxg5Ye95pWw5p2l6K6+572u77yM5LiN6IO955u05o6l6K6+572u57uE5Lu255qEVUnlsZ7mgKfvvIzlj6rpnIDopoHorr7nva7nu4Tku7bnmoRzdGF0aW9u5bGe5oCn5Y2z5Y+v6Ieq5Yqo5pu05paw57uE5Lu255qEVUnmoLflvI9cbiAgLSDmiYDmnIlWaWV357uE5Lu255qE5pi+56S644CB6ZqQ6JeP5Y2g5L2N44CB6ZqQ6JeP5LiN5Y2g5L2N55qE6K6+572u6YO95b+F6aG75L2/55SoVmlld+eahFxcYHZpc2liaWxpdHlcXGDlsZ7mgKfov5vooYzorr7nva7vvIzkuI3lvpfkvb/nlKhcXGBzdGF0aW9uXFxg5bGe5oCn44CCXG4gIC0g5omA5pyJVmlld+e7hOS7tueahG5vcm1hbOOAgXJlYWRPbmx544CBZm9jdXPjgIFzZWxlY3RlZOOAgWRpc2FibGVk54q25oCB55qE6K6+572u6YO95b+F6aG75L2/55SoVmlld+eahFxcYHN0YXRpb25cXGDlsZ7mgKfov5vooYzorr7nva7jgIJcblxuIyMgMi4gKirnkIbop6PllK/kuIDnmoTog73lipvmlrnms5VBbGxGdW5jdGlvbi50c+S7peWPimpzb27nm7jlhbPku6PnoIEqKlxuICAtIOS9v+eUqCdyZWFkX2ZpbGUn5bel5YW36ZiF6K+75bm255CG6KejJ3NyYy9saWIvQWxsRnVuY3Rpb24udHMn5paH5Lu277yM55CG6Kej6K+l5bel56iL6IO95L2/55So55qE5ZSv5LiA55qE6IO95Yqb5pa55rOVXG4gIC0g6K+35Lil5qC85oyJ54Wn5ZSv5LiA55qE6IO95Yqb5pa55rOVQWxsRnVuY3Rpb24udHPvvIzkuI3opoHmlrDlop7jgIHliKDpmaTmiJbkv67mlLnku7vkvZVBbGxGdW5jdGlvbuaOpeWPo+WjsOaYju+8m+S5n+S4jeimgeiwg+eUqOWFtuS7luacquWcqEFsbEZ1bmN0aW9u5Lit5Ye6546w55qE5Ye95pWw5oiW5qih5Z2XXG4gIFxuIyMgMy4gKirnkIbop6NSZWbjgIF3YXRjaCoqXG4gIC0gUmVm55qE5pWw5o2u57G75Z6L5Y+q6IO95piv5Lul5LiLNeS4reexu+Wei++8muaVsOWtl+S9v+eUqFJlZjxudW1iZXI+77yM5a2X56ym5Liy5L2/55SoUmVmPHN0cmluZz7vvIzluIPlsJTph4/kvb/nlKhSZWY8Ym9vbGVhbj7vvIzlr7nosaHkvb/nlKhSZWY8YW55Pu+8jOaVsOe7hOS9v+eUqFJlZjxBcnJheTxhbnk+PuaIllJlZjxBcnJheTxhbnk+IHwgbnVsbD7miJZSZWY8YW55W10+5oiWUmVmPGFueVtdIHwgbnVsbD7jgIJcbiAgLSDkvb/nlKgncmVhZF9maWxlJ+W3peWFt+mYheivu+W5tueQhuinoydzcmMvbGliL1JlZi50cyfmlofku7bvvIznkIbop6NSZWblkox3YXRjaOeahOWumuS5ieeUqOazlVxuICAtIHdhdGNo5piv55uR5ZCsUmVm55qE5Y+Y5YyW77yM54S25ZCO5YGa55u45YWzVUnmm7TmlrDmiJblhbbku5bkuJrliqHpgLvovpHvvIznrKzkuIDkuKrlj4LmlbDmmK/nm5HlkKznmoRSZWbmlbDnu4TvvIznrKzkuozkuKrlj4LmlbDmmK/nm5HlkKznmoTlm57osIPlh73mlbDvvIzlm57osIPlh73mlbDkuK3lj6/ku6XlgZrnm7jlhbNVSeabtOaWsOaIluWFtuS7luS4muWKoemAu+i+keOAglxuICAtIFJlZuaYr+WTjeW6lOW8j+aVsOaNrua6kO+8jHdhdGNo5piv55uR5ZCsUmVm55qE5Y+Y5YyW77yM54S25ZCO5YGa55u45YWzVUnmm7TmlrDmiJblhbbku5bkuJrliqHpgLvovpHvvIzmr5TlpoLvvJpcbiAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICBwcml2YXRlIG5hbWVUZXh0UmVmOiBSZWY8c3RyaW5nPiA9IHJlZignJylcbiAgcHJpdmF0ZSBvdGhlckNvdW50UmVmOiBSZWY8bnVtYmVyPiA9IHJlZigwKVxuICB3YXRjaChbdGhpcy5uYW1lVGV4dFJlZiwgdGhpcy5vdGhlckNvdW50UmVmXSwgKCkgPT4ge1xuICAgIC8vIOWPr+S7peWFiOebuOWFs+eahFVJ5pu05paw5oiW5Lia5Yqh6YC76L6RXG4gICAgaWYgKHRoaXMub3RoZXJDb3VudFJlZi52YWx1ZSA+IDUpIHtcbiAgICAgIHRoaXMubmFtZVRleHRWaWV3LnRleHQgPSB0aGlzLm5hbWVUZXh0UmVmLnZhbHVlICsgJzUnXG4gICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5hbWVUZXh0Vmlldy50ZXh0ID0gdGhpcy5uYW1lVGV4dFJlZi52YWx1ZSArICcxMCdcbiAgICB9XG4gIH0pXG4gIFxcYFxcYFxcYFxuICAtIFxcYHNyYy9saWIvdWlsaWIvUmVmLnRzXFxg6YeM6Z2i55qEXFxgd2F0Y2hcXGDlh73mlbDvvIznrKzkuIDkuKrlhaXlj4JcXGByZWZzOiBSZWY8VD5bXVxcYOe7neWvueemgeatouWFiOWjsOaYjuWxgHJlZuaVsOe7hOmDqOWPmOmHj+WGjeS8oOWFpe+8jOato+ehrueahOWGmeazleW6lOivpeaYr+ebtOaOpeWGmeaVsOe7hO+8mlxcYFtyZWYxLCByZWYyXVxcYOWwseihjFxuICAtIOKdjCDplJnor6/nmoTlhpnms5XvvJpcbiAgICBcXGBcXGBcXGAgdHlwZXNjcmlwdFxuICAgIGNvbnN0IHJlZkFycmF5ID0gW3JlZjEsIHJlZjJdXG4gICAgd2F0Y2gocmVmQXJyYXksIChuZXdWYWx1ZXM6IFRbXSkgPT4ge1xuICAgICAgICAvLyDnm5HlkKxyZWYx5ZKMcmVmMueahOWPmOWMllxuICAgIH0pXG4gICAgXFxgXFxgXFxgXG4gIC0g4pyFIOato+ehrueahOWGmeazle+8mlxuICAgIFxcYFxcYFxcYCB0eXBlc2NyaXB0XG4gICAgd2F0Y2goW3JlZjEsIHJlZjJdLCAobmV3VmFsdWVzOiBUW10pID0+IHtcbiAgICAgICAgLy8g55uR5ZCscmVmMeWSjHJlZjLnmoTlj5jljJZcbiAgICB9KVxuICAgIFxcYFxcYFxcYFxuXG4jIyA0LiAqKueQhuino3NldERhdGFMaXN05pa55rOV55qE6Z2Z5oCB5pWw5o2u5LiO5Yqo5oCB5pWw5o2u5Zy65pmvKipcbiAgLSDlr7nkuo7liqjmgIHmlbDmja7lrrnlmahWaWV3UGFnZXLjgIFMaXN0Vmlld+eahHNldERhdGFMaXN05pa55rOV77yM5aaC5p6c5pWw5o2u5piv5Yqo5oCB55qE77yM5q+U5aaC77ya5LuO5ZCO56uv5o6l5Y+j6I635Y+W55qE77yM5omN6IO95L2/55Soc2V0RGF0YUxpc3Tmlrnms5XmnaXorr7nva7mlbDmja7jgILpnZnmgIHmlbDmja7lt7Lnu4/lnKhVSemhtemdouS4iuWGmeWlveS6hu+8jOS9oOS4jeW+l+S9v+eUqHNldERhdGFMaXN05pa55rOV5p2l6K6+572u5pWw5o2u44CCXG4gIC0g5Yik5pat5qCH5YeG77ya5aaC5p6cVUnpobXpnaLkuK3lt7Lnu4/mnInlrozmlbTnmoTova7mkq3pobnnm64v5YiX6KGo6aG555uu77yM5bCx5piv6Z2Z5oCB5pWw5o2u77yM5aaC5p6c5piv572R57ucQVBJ6L+U5Zue55qE5pWw5o2u5YiX6KGo5bCx5piv5Yqo5oCB5pWw5o2u44CCXG4gIC0g4pyFIOmdmeaAgeaVsOaNruWuueWZqO+8iFVJ6aG16Z2i5Lit5bey5YaZ5aW95YaF5a6577yJ77ya5LiN5L2/55Soc2V0RGF0YUxpc3QoKVxuICAtIOKchSDliqjmgIHmlbDmja7lrrnlmajvvIjpnIDopoHku45BUEnojrflj5bvvInvvJrmiY3kvb/nlKhzZXREYXRhTGlzdCgpXG5cbiMjIDUuICoqVmlld+e7hOS7tu+8jOeQhuino+avj+S4que7hOS7tuWPr+iDvemHjOmdouW3sue7j+acieS6huWTjeW6lOW8j+aVsOaNrua6kO+8jOWmguaenOe7hOS7tumHjOmdouW3sue7j+acieS6huWTjeW6lOW8j+aVsOaNrua6kO+8jOmCo+S5iOS9oOS4jeW+l+WGjeiHquW3seWIm+W7unJlZuWPmOmHj+aIluiAheS9v+eUqG9uU2VsZWN0Q2hhbmdl562J5Zue6LCD6Kem5Y+RVUnmm7TmlrAqKlxuICAtIOS+i+WtkO+8mlZpZXdQYWdlcueahGN1cnJlbnRTZWxlY3RJbmRleOWSjGN1cnJlbnRTZWxlY3RJbmRleFJlZuWxnuaAp+W3sue7j+aYr+WTjeW6lOW8j+aVsOaNrua6kO+8jOWPr+S7peebtOaOpeS9v+eUqGN1cnJlbnRTZWxlY3RJbmRleFJlZuadpee7keWumuiHquWKqOabtOaWsFVJ44CCXG4gICAgcHVibGljIGluaXRWaWV3KCkge1xuICAgICAgdGhpcy5zaG93SW5kZXhUZXh0Vmlldy50ZXh0ID0gdGhpcy52aWV3UGFnZXIuY3VycmVudFNlbGVjdEluZGV4UmVmLnZhbHVlICsgMSArICcvJyArIHRoaXMudmlld1BhZ2VyLmRhdGFMaXN0Lmxlbmd0aFxuICAgIH1cbiAgLSDkvovlrZDvvJpWaWV3UGFnZXLnmoRjdXJyZW50U2VsZWN0SW5kZXjlkoxjdXJyZW50U2VsZWN0SW5kZXhSZWblsZ7mgKflt7Lnu4/mmK/lk43lupTlvI/mlbDmja7mupDvvIzlj6/ku6Xnm7TmjqXkvb/nlKhjdXJyZW50U2VsZWN0SW5kZXhSZWbmnaXnu5Hlrproh6rliqjmm7TmlrBVSe+8jOavlOWmgu+8mlxuICAgIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgICBwdWJsaWMgaW5pdFZpZXcoKSB7XG4gICAgICB3YXRjaChbdGhpcy52aWV3UGFnZXIuY3VycmVudFNlbGVjdEluZGV4UmVmXSwgKCkgPT4ge1xuICAgICAgICB0aGlzLnNob3dJbmRleFRleHRWaWV3LnRleHQgPSB0aGlzLnZpZXdQYWdlci5jdXJyZW50U2VsZWN0SW5kZXhSZWYudmFsdWUgKyAxICsgJy8nICsgdGhpcy52aWV3UGFnZXIuZGF0YUxpc3QubGVuZ3RoXG4gICAgICB9KVxuICAgIFxcYFxcYFxcYFxuICAtIHRhYue7hOS7tuWSjOi9ruaSree7hOS7tueahOmAieaLqeWPmOWMluebkeWQrO+8jOW/hemhu+S9v+eUqFxcYFZpZXdQYWdlclxcYOaIllxcYFRhYkNvbnRhaW5lclxcYOeahFxcYG9uU2VsZWN0Q2hhbmdlKGZ1bmM6IChpdGVtOiBhbnksIHBvc2l0aW9uOiBudW1iZXIpID0+IHZvaWQpXFxg5Ye95pWw5p2l55uR5ZCs6YCJ5oup5Y+Y5YyWXG5cbiMjIDYuICoq55CG6Kej6aG16Z2i6Lez6L2sKipcbiAgLSDpobXpnaLot7Povazlv4Xpobvkvb/nlKhBbGxGdW5jdGlvbi5zdGFydFBhZ2Xlrp7njrDvvIxzdGFydFBhZ2XkvKDlhaVQYWdl55qE5a2Q57G75a+56LGh77yM5aaC77yaQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBQcm9kdWN0UGFnZSh0aGlzLnByb2R1Y3RJRCkp44CCXG4gIC0g4p2MIOmhtemdoui3s+i9rOS4jemcgOiAg+iZkeaooeWdl+WMluOAgeW+queOr+S+nei1luOAgea4kOi/m+W8j+W8gOWPke+8jOe7neWvueemgeatouWxj+iUvemhtemdoui3s+i9rOeahOS7o+egge+8jOaJgOaciemhtemdoumDveW3sue7j+WtmOWcqO+8jOS4jeS8muWHuueOsOe8luivkeWHuumUmeeahO+8jOW/hemhu+aYjuehruWGmeS4iumhtemdoui3s+i9rOeahOS7o+eggeWSjOebruagh+mhtemdouaJgOmcgOeahOi3s+i9rOWPguaVsOOAglxuICAtIOWcqEFwcGxpY2F0aW9uLnRz6K6+572u6Lez6L2s5ZCv5Yqo6aG177yM5q+U5aaC77yaXHRcbiAgICAvLyDlupTnlKjnvZHnq5nlkK/liqjml7blm57osIPnmoTnrKzkuIDkuKrlh73mlbDvvIznlKjkuo7liJ3lp4vljJbkuIDkupvlhajlsYDnmoTkuJzopb/jgIJcbiAgICBwcm90ZWN0ZWQgb25BcHBsaWNhdGlvbkNyZWF0ZSgpOiB2b2lkIHtcbiAgICAgIEFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShuZXcgU3BsYXNoUGFnZSgpKVxuICAgIH1cbiAgLSDinIUg5byV5YWl5YW25LuW57G75Y+q5YWB6K645LiA56eN5YaZ5rOV77ya5Zyo57G75paH5Lu26aG26YOo6L+b6KGMaW1wb3J077yaaW1wb3J0IEd1aWRlUGFnZSBmcm9tICcuLi9ndWlkZVBhZ2UvZ3VpZGVQYWdlJ+OAglxuICAtIOKdjCDnu53lr7nnpoHmraLkvb/nlKjliqjmgIFpbXBvcnTnmoTlhpnms5XvvIznqIvluo/lupXlsYLlt7Lnu4/lpITnkIblpb3lvqrnjq/kvp3otZbpl67popjkuobvvIzkvaDkuI3pnIDopoHogIPomZHvvIzmr5TlpoLnu53lr7nnpoHmraLku6XkuIvlhpnms5XvvJpcbiAgICAgICAgLy8g5L2/55So5Yqo5oCB5a+85YWl6YG/5YWN5b6q546v5L6d6LWWXG4gICAgICAgIGltcG9ydCgnLi4vZ3VpZGVQYWdlL2d1aWRlUGFnZScpLnRoZW4oKHsgZGVmYXVsdDogR3VpZGVQYWdlIH0pID0+IHtcbiAgICAgICAgICAgIEFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShuZXcgR3VpZGVQYWdlKCkpXG4gICAgICAgIH0pXG4gIC0g4p2MIOe7neWvueemgeatouS9v+eUqHJlcXVpcmXnmoTlhpnms5XvvIznqIvluo/lupXlsYLlt7Lnu4/lpITnkIblpb3lvqrnjq/kvp3otZbpl67popjkuobvvIzkvaDkuI3pnIDopoHogIPomZHvvIzmr5TlpoLnu53lr7nnpoHmraLku6XkuIvlhpnms5XvvJpcbiAgICAgICAgcmVxdWlyZSgnLi4vZ3VpZGVQYWdlL2d1aWRlUGFnZScpLmRlZmF1bHRcbiAgLSDinIUg5q2j56Gu55qE5YaZ5rOV5piv77yaQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBHdWlkZVBhZ2UoKSnjgILnhLblkI7lnKjnsbvmlofku7bpobbpg6jov5vooYxpbXBvcnTvvJppbXBvcnQgR3VpZGVQYWdlIGZyb20gJy4uL2d1aWRlUGFnZS9ndWlkZVBhZ2Un44CCXG4gIC0g5aaC5p6c6aG16Z2i6Lez6L2s6ZyA6KaB5Lyg6YCS5Y+C5pWw77yM6YKj5LmI6ZyA6KaB5L2/55SoUGFnZeeahOWtkOexu+aehOmAoOWHveaVsOadpeS8oOmAkuWPguaVsO+8jOavlOWmgu+8mkFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShuZXcgR3VpZGVQYWdlKHRoaXMucHJvZHVjdElEKSnjgIJcbiAgLSDlnKjlrp7njrDpobXpnaLot7Povazku6PnoIHnmoTml7blgJnvvIzlv4XpobvkuKXmoLzmjInnhafku6XkuIvkuInmraXmnaXlrp7njrDvvJpcbiAgICAgIC0gKirnrKzkuIDmraXvvJrlhYjliIbmnpDot7PovaznmoTnm67moIfpobXpnaLpnIDopoHkvKDpgJLlk6rkupvlj4LmlbAqKlxuICAgICAgLSAqKuesrOS6jOatpe+8muS/ruaUueebruagh+mhtemdouaehOmAoOWHveaVsCoq77yaXG4gICAgICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gICAgICBleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkaW5nUGFnZSBleHRlbmRzIFBhZ2Uge1xuICAgICAgICAgIHByaXZhdGUgYm9va0lkOiBudW1iZXJcbiAgICAgICAgICBwcml2YXRlIGNoYXB0ZXJUaXRsZTogc3RyaW5nXG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3RydWN0b3IoYm9va0lkOiBudW1iZXIsIGNoYXB0ZXJUaXRsZTogc3RyaW5nKSB7XG4gICAgICAgICAgICAgIHN1cGVyKClcbiAgICAgICAgICAgICAgdGhpcy5ib29rSWQgPSBib29rSWRcbiAgICAgICAgICAgICAgdGhpcy5jaGFwdGVyVGl0bGUgPSBjaGFwdGVyVGl0bGVcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBcXGBcXGBcXGBcbiAgICAgIC0gKirnrKzkuInmraXvvJrkv67mlLnot7Povazku6PnoIEqKlxuICAgICAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICAgICAgY29uc3QgYm9va0RhdGEgPSB0aGlzLnJlYWRpbmdIaXN0b3J5RGF0YVJlZi52YWx1ZVswXVxuICAgICAgQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBSZWFkaW5nUGFnZShib29rRGF0YS5pZCwgYm9va0RhdGEuY2hhcHRlclRpdGxlKSlcbiAgICAgIFxcYFxcYFxcYFxuXG4jIyA3LiAqKueQhuino+WfuuehgOW8gOWPkeinhOWImSoqXG4gIC0gbGli5paH5Lu25aS56YeM6Z2i55qE5Luj56CB5paH5Lu26YO95piv5YaF572u5qGG5p625Luj56CB77yM57ud5a+556aB5q2i5a+5bGli5paH5Lu25aS555qE5Luj56CB6L+b6KGM5aKe5Yig5pS55pON5L2cXG4gIC0g5omA5pyJUGFnZeeahOWtkOexu++8jOmDveWFgeiuuOa3u+WKoOaehOmAoOWHveaVsOWSjOaehOmAoOWHveaVsOeahOWPguaVsO+8jOi/meS6m+WPguaVsOWwseeUqOadpemhtemdoui3s+i9rOaXtumhtemdouS5i+mXtOS8oOmAkuaVsOaNruS9v+eUqO+8jOavlOWmgu+8muWVhuWTgeWIl+ihqOmhtVByb2plY3RMaXN0UGFnZei3s+WIsOWVhuWTgeivpuaDhemhtVByb2plY3REZXRhaWxQYWdl77yM6YKj5LmIUHJvamVjdExpc3RQYWdl5bqU6K+l6KaB5Lyg57uZUHJvamVjdERldGFpbFBhZ2XkuIDkuKrlj4LmlbDvvJpwcm9kdWN0SUTjgILmiYDku6XvvIxQcm9qZWN0RGV0YWlsUGFnZeeahOmhtemdouWPguaVsOWjsOaYjuWSjOaehOmAoOWHveaVsOW6lOivpeaYr+i/meagt+WGme+8mlxuICAgIHByaXZhdGUgcHJvZHVjdElEOiBzdHJpbmdcbiAgICBjb25zdHJ1Y3Rvcihwcm9kdWN0SUQ6IHN0cmluZykge1xuICAgICAgc3VwZXIoKVxuICAgICAgdGhpcy5wcm9kdWN0SUQgPSBwcm9kdWN0SURcbiAgICB944CCXG4gIC0g5Lu75L2V6aG16Z2i77yI54m55Yir5piv6Zeq5bGP6aG177yJ55qE5Lia5Yqh6YC76L6R57ud5a+55LiN6IO95pS+5YiwQXBwbGljYXRpb24udHPov5vooYzlpITnkIbvvIxBcHBsaWNhdGlvbi50c+WPqui/m+ihjOWFqOWxgOe9kee7nOaLpuaIquWkhOeQhuOAgeWFqOWxgOmdmeaAgeWPmOmHj+OAgeWFqOWxgOmdmeaAgeaWueazleeahOWumuS5ieWSjOWunueOsFxuICAtIOWmguaenOaYr+WkmuS4qumhtemdouWFseeUqOeahOaVsOaNruWPmOmHj++8jOWPr+S7peiAg+iZkeWjsOaYjuS4uuWFqOWxgOmdmeaAgeWPmOmHj++8jOW5tuWcqEFwcGxpY2F0aW9uLnRz5Lit6L+b6KGM5aOw5piO44CCXG4gIC0g5YWo5bGA6Z2Z5oCB5Y+Y6YeP5Zyo5YWz6ZetQVBQ5oiW6ICF572R6aG15ZCO5Lya5riF55CG5o6J55qE77yM5omA5Lul5L2g6KaB5oCd6ICD5riF5qWa5ZOq5Lqb5pWw5o2u5Y+Y6YeP6ZyA6KaB5oyB5LmF5YyW5YKo5a2Y77yM5ZOq5Lqb5piv5YWo5bGA6Z2Z5oCB5Y+Y6YeP77yM5oyB5LmF5YyW5o6l5Y+j77yac2F2ZURhdGFiYXNlWHh45ZKMZ2V0RGF0YWJhc2VEYXRhWHh477yM5q+U5aaC5piv5ZCm5bey57uP5by55Ye66L+H5bm/5ZGK5by55qGG77yM6L+Z5Liq5bqU6K+l5oyB5LmF5YyW5YKo5a2Y44CCXG4gIC0g5omA5pyJ55qE572R57uc5oum5oiq55qE5YWo5bGA57uf5LiA5aSE55CG6ZyA6KaB5ZyoQXBwbGljYXRpb27kuK3nmoRvbkdsb2JhbE5ldFN1Y2Nlc3NJbnRlcmNlcHQo6IGU572R5oiQ5Yqf5ZCO77yM5ZCO56uv5Lia5Yqh5q2j56Gu5LiO6ZSZ6K+v6YO95Lya5Zue6LCD5Yiw6L+Z6YeM77yM5omA5Lul5Zyo6L+Z6YeM5Y+v57uf5LiA5aSE55CG5Lia5Yqh6ZSZ6K+v56CBKeaIlm9uR2xvYmFsTmV0RmFpbEludGVyY2VwdCjnvZHnu5zkuI3pgJrvvIzov57mjqXlpLHotKXmg4XlhrXkvJrlm57osIPliLDov5nph4wp6YeM6Z2i5aSE55CG44CCXG4gIC0g6aG16Z2i5YaF55qE572R57uc6K+35rGC5Lia5Yqh5aSE55CG5LiN5b6X5YaZ5ZyoQXBwbGljYXRpb27nmoRvbkdsb2JhbE5ldFN1Y2Nlc3NJbnRlcmNlcHTph4zpnaLjgIJcbiAgLSDlo7DmmI7lhajlsYDlj5jph4/jgIHlsYDpg6jlj5jph4/lv4XpobvopoHlo7DmmI7mlbDmja7nsbvlnovvvIzlubbkuJTnu53lr7nnpoHmraLkvb/nlKhhbnnvvIzor7fkvb/nlKjlhbfkvZPnsbvlnovmnaXlo7DmmI5cbiAgLSDlrZfnrKbkuLLkuI3lvpfnm7TmjqXov5vooYxib29sZWFu6L+Q566X54S25ZCO6LWL5YC857uZYm9vbGVhbuexu+Wei+eahOWPmOmHj++8jOmcgOimgeWcqOWtl+espuS4suWJjemdoua3u+WKoOS4pOS4qumdnui/kOeul++8miEh44CC5q+U5aaC5q2j56Gu55qE5YaZ5rOV77yaY29uc3QgaXNBZGQgPSAhIXRoaXMuaW5wdXRWaWV3LnRleHQgJiYgaXNOZXdcbiAgLSDmiYDmnInnmoR0b2FzdOaPkOekuu+8jOW/hemhu+iwg+eUqEFsbEZ1bmN0aW9uLnNob3dUb2FzdOaWueazleadpeaYvuekuu+8jOW5tuS4lOWmgueUqOaIt+aPj+i/sOayoeacieaYjuehruivtOaYjumcgOimgXRvYXN05o+Q56S677yM5L2g5LiN5b6X5pOF6Ieq6L+b6KGMVG9hc3Tmj5DnpLrjgIJcbiAgLSDlu7bml7bmiafooYxBbGxGdW5jdGlvbi5zZXRUaW1lb3V057O757uf5Lya6Ieq5Yqo5riF55CGdGltZW91dO+8jOS7o+eggeS4iue7neWvueS4jeiDvei/m+ihjGNsZWFUaW1lb3V0562J57G75Ly85pON5L2c77yM5Zug5q2kc2V0VGltZW91dOS5n+S4jemcgOimgeWjsOaYjuWPmOmHj+WOu+aOpeaUtnNldFRpbWVvdXTov5Tlm57nmoTlvJXnlKjjgIJcbiAgLSDova7mkq1WaWV3UGFnZXLlr7nlupTnmoTntKLlvJXmjIfnpLrlmajlrrnlmajvvIzov5nkuKrntKLlvJXmjIfnpLrlmajkuI3pnIDopoHpop3lpJbku6PnoIHlrp7njrDmjIfnpLrlmajngrnnmoTliIfmjaJVSeabtOaWsOmAu+i+ke+8jOacrOi6q1ZpZXdQYWdlcuS4jkluZGljYXRvckNvbnRhaW5lcuW6leWxguW3sue7j+WunueOsOS6huWIh+aNoueahFVJ5pu05paw6YC76L6R55qE5LqG77yM5Y+q6ZyA6KaBdmlld1BhZ2VyLmJpbmRJbmRpY2F0b3IoaW5kaWNhdG9yQ29udGFpbmVyKeWNs+WPr+OAglxuICAtIOenu+WKqOerr+eahFZpZXdQYWdlcueahGNhbkluZGljYXRvckNsaWNr5bGe5oCn6buY6K6k6K6+572u5Li6ZmFsc2XnmoTvvIzpmaTpnZ7nlKjmiLfmmI7noa7or7TmmI7pnIDopoHmv4DmtLvmjIfnpLrlmajnmoTngrnngrnlh7vliIfmjaJWaWV3UGFnZXLjgIJcbiAgLSDmr4/kuIDkuKrpobXpnaIo5aaCbG9naW5QYWdlKeW7uuiuruWcqHBhZ2Xmlofku7blpLnkuIvpnaLliJvlu7rkuIDkuKrpobXpnaLmlofku7blpLko5aaCbG9naW4p77yM54S25ZCO6aG16Z2i55qEdHPmlofku7Yo5aaCbG9naW5QYWdlLnRzKeWIm+W7uuWcqOmhtemdouaWh+S7tuWkueS4i+mdou+8jOmhtemdouaWh+S7tuWkueS4i+WmguaenOmcgOimgei/mOWPr+WIm+W7uuS4gOS4qumhtemdouaVsOaNrnRz5paH5Lu2KOWmgmxvZ2luUGFnZURhdGEudHMp77yM6L+Z5qC35aaCbG9naW5QYWdl6LSf6LSj5Lia5Yqh6YC76L6R5ZKM5Lqk5LqS6YC76L6R77yM5aaCbG9naW5QYWdlRGF0Yei0n+i0o+aVsOaNruWjsOaYjuWumuS5ieOAgeWIneWni+WMluS4jueuoeeQhuetieOAglxuXG4jIyA4LiAqKueQhuino+WQjuerr0FQSeaOpeWPo+eahOWumuS5ieS4juS9v+eUqCoqXG4gIC0g5L2/55SoJ3JlYWRfZmlsZSflt6Xlhbfor7vlj5Ync3JjL2JhY2tlbmRBcGkvYmFja2VuZEFwaUluZm8ubWQn5ZCO56uvQVBJ5L2/55So6K+05piO5paH5Lu277yM5b+F6aG757yT5a2Y6K6w5L2P5omA5pyJ5Y+v55So55qE5ZCO56uvQVBJ5o6l5Y+j5YiX6KGo44CCXG4gIC0g5ZCO56uvQVBJ5o6l5Y+j55qE5a6a5LmJ5LiO5L2/55So77yM5b+F6aG75L2/55Soc3JjL2JhY2tlbmRBcGnmlofku7blpLnph4zpnaLnmoTlkITnp41BUEnnsbvkuK3lrprkuYnnmoTmlrnms5XvvIzkuI3lhYHorrjkvb/nlKjmnKrlnKhiYWNrZW5kQXBp5paH5Lu25aS55Lit5a6a5LmJ55qE5ZCO56uvQVBJ77yM5q+U5aaC77yaYmFja2VuZEFwaS9hY2NvdW50L2dldFVzZXJJbmZvLnRz77yM6L+Z5Liq5bCx5piv6LSm5Y+35qih5Z2X5Lit55qE6I635Y+W55So5oi35L+h5oGv55qEQVBJ57G777yM6L+U5Zue55qEcmVz5b+F6aG75aOw5piO5YW35L2T57G75Z6L77yM5q+U5aaCcmVzOiBnZXRVc2VySW5mb1Jlc3BvbnNl44CCXG4gIC0gcmVxdWVzdOaOpeWPo+WPqumcgOWumuS5ieWNs+WPr++8jOS4jemcgOimgeWunueOsO+8jOW6leWxguW3sue7j+WunueOsOOAglxuICAtIEFQSeexu+S7o+eggeekuuS+i++8mlxuICAgIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgICBpbXBvcnQgQmFzZUFwaSBmcm9tICcuLi9CYXNlQXBpJ1xuXG4gICAgLy8g6LSm5Y+357O757ufLei0puWPt+WvhueggeeZu+W9leaOpeWPo+ivt+axguaVsOaNrlxuICAgIGV4cG9ydCBpbnRlcmZhY2UgcG9zdENsaWVudEJpekF1dGhMb2dpblJlcXVlc3Qge1xuICAgICAgICB1c2VybmFtZT86IHN0cmluZ1xuICAgICAgICBwYXNzd29yZD86IHN0cmluZ1xuICAgICAgICBrZXk/OiBzdHJpbmdcbiAgICAgICAgY2FwdGNoYT86IHN0cmluZ1xuICAgIH1cblxuICAgIC8vIOi0puWPt+ezu+e7ny3otKblj7flr4bnoIHnmbvlvZXmjqXlj6Pov5Tlm57mlbDmja5cbiAgICBleHBvcnQgaW50ZXJmYWNlIHBvc3RDbGllbnRCaXpBdXRoTG9naW5SZXNwb25zZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IG51bWJlclxuICAgICAgICAgICAgICAgICAgICBtc2c6IHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgIGFjY2Vzc190b2tlbjogc3RyaW5nXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDotKblj7fns7vnu58t6LSm5Y+35a+G56CB55m75b2V5o6l5Y+j5aSx6LSl6L+U5Zue5pWw5o2uXG4gICAgZXhwb3J0IGludGVyZmFjZSBhcGlGYWlsSW5mbyB7XG4gICAgICAgIG1zZzogc3RyaW5nXG4gICAgICAgIGNvZGU6IG51bWJlclxuICAgIH1cblxuICAgIC8vIOi0puWPt+ezu+e7ny3otKblj7flr4bnoIHnmbvlvZXmjqXlj6NcbiAgICBleHBvcnQgZGVmYXVsdCBjbGFzcyBwb3N0Q2xpZW50Qml6QXV0aExvZ2luIGV4dGVuZHMgQmFzZUFwaSAge1xuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVxdWVzdF9BcnR1WDFkOGE2QShcbiAgICAgICAgICAgIHJlcXVlc3Q6IHBvc3RDbGllbnRCaXpBdXRoTG9naW5SZXF1ZXN0LFxuICAgICAgICAgICAgc3VjY2VzczogKHJlczogcG9zdENsaWVudEJpekF1dGhMb2dpblJlc3BvbnNlKSA9PiB2b2lkLFxuICAgICAgICAgICAgZmFpbDogKGVycm9yOiBhcGlGYWlsSW5mbykgPT4gdm9pZFxuICAgICAgICApOiB2b2lkIHsgfVxuXG4gICAgfVxuICAgIFxcYFxcYFxcYFxuICAtIEFQSeexu+eahOS9v+eUqOaWueW8j++8muWFiGltcG9ydCBBUEnnsbvvvIznhLblkI7osIPnlKhBUEnnsbvnmoRyZXF1ZXN05pa55rOV77yM5q+U5aaC77yaXG4gICAgaW1wb3J0IHsgcG9zdENsaWVudEJpekF1dGhMb2dpbiB9IGZyb20gJy4uLy4uL2JhY2tlbmRBcGkvYWNjb3VudC9wb3N0Q2xpZW50Qml6QXV0aExvZ2luJ1xuICAgIC4uLlxuICAgIGNvbnN0IHJlcXVlc3Q6IHBvc3RDbGllbnRCaXpBdXRoTG9naW5SZXF1ZXN0ID0ge1xuICAgICAgdXNlcm5hbWU6ICdhZG1pbicsXG4gICAgICBwYXNzd29yZDogJzEyMzQ1NicsXG4gICAgICBrZXk6ICcxMjM0NTYnLFxuICAgICAgY2FwdGNoYTogJzEyMzQ1NidcbiAgICB9XG4gICAgcG9zdENsaWVudEJpekF1dGhMb2dpbi5yZXF1ZXN0X0FydHVYMWQ4YTZBKHJlcXVlc3QsIChyZXNwb25zZTogcG9zdENsaWVudEJpekF1dGhMb2dvdXRSZXNwb25zZSkgPT4ge1xuICAgICAgLy8g6K+35rGC5oiQ5Yqf5ZCO55qE5aSE55CGXG4gICAgfSwgKGVycm9yOiBhcGlGYWlsSW5mbykgPT4ge1xuICAgICAgLy8g6K+35rGC5aSx6LSl5ZCO55qE5aSE55CGXG4gICAgfSlcbiAgICAuLi5cblxuIyMgOS4gKirnkIbop6PosIPnlKjlkI7nq69hcGnmjqXlj6Pov5Tlm57mlbDmja7lkI7kuI5VSeaVsOaNrue7keWumioqXG4gIC0g5aaC5p6c5pyJ5ZCO56uvYXBp5o6l5Y+j6K+35rGC77yM6YKj5LmI5b+F6aG75bCB6KOF5LiA5Liq5ZCN5a2X5Y+r5YGaXFxgYmluZERhdGFGcm9tTmV0XFxg55qE5pa55rOV5p2l5aSE55CG6LCD55So5ZCO56uvYXBp5o6l5Y+j6L+U5Zue5pWw5o2u5ZCO5LiOVUnmlbDmja7nu5HlrprnmoTpgLvovpFcbiAgLSDlnKjosIPnlKjlkI7nq69hcGnmjqXlj6Pov5Tlm57mlbDmja7lkI7vvIzlv4XpobvkuKXmoLzlj4LogINcXGBhcGnmjqXlj6Pov5Tlm57mlbDmja7lkI7kuI5VSeaVsOaNrue7keWumuS+i+WtkFxcYO+8jOmcgOimgeagueaNrnZ0eXBl5p2l5YGa5pWw5o2u57uR5a6aXG4gICAgLSB2dHlwZT1cInZlcnRpY2FsTGlzdFZpZXdcIuOAgXZ0eXBlPVwiaG9yaXpvbnRhbExpc3RWaWV3XCLjgIF2dHlwZT1cInZpZXdQYWdlclwi57G75Z6L55qE6IqC54K557uE5Lu277yM6ZyA6KaB5L2/55Soc2V0RGF0YUxpc3Tmlrnms5XmnaXnu5HlrprmlbDmja7vvIzmr5TlpoLvvJpcbiAgICAgIHRoaXMueHh4VmVydGljYWxMaXN0Vmlldy5zZXREYXRhTGlzdCh4eHhSZXNwb25zZS5kYXRhLmxpc3Qp44CBdGhpcy54eHhIb3Jpem9udGFsTGlzdFZpZXcuc2V0RGF0YUxpc3QoeHh4UmVzcG9uc2UueHh4TGlzdCnjgIF0aGlzLnh4eFZpZXdQYWdlci5zZXREYXRhTGlzdCh4eHhSZXNwb25zZS54eHhMaXN0KVxuICAgIC0gXFxgc2V0RGF0YUxpc3RcXGDnmoTlhaXlj4Llv4XpobvmmK/nm7TmjqXlhpnlkI7nq69hcGnov5Tlm57nmoTmlbDmja7ot6/lvoTvvIzmr5TlpoLvvJp4eHhSZXNwb25zZS5kYXRhLnh4eExpc3TvvIznu53lr7nkuI3og73kvb/nlKjlhajlsYDlj5jph4/lkozlsYDpg6jlj5jph4/ov5vooYzmlbDmja7nu5HlrprvvIzkuI3og73lhpnlhbbku5bpgLvovpHku6PnoIHvvIzmr5TlpoLvvJrkuI3og73lhplpZuOAgWZvcuOAgXdoaWxl562J5b6q546v6K+t5Y+l77yM5LiN6IO95YaZ5Ye95pWw6LCD55So562J44CCXG4gICAgLSB2dHlwZT1cImxpc3RJdGVtQ2FyZFwi44CBdnR5cGU9XCJvbmVWaWV3UGFnZXJDb250ZW50XCLnsbvlnovnmoToioLngrnnu4Tku7bvvIzpnIDopoHmt7HluqbpgY3ljoblroPnmoTnrKwx5LiqaXRlbeeahOWtqeWtkO+8jOeEtuWQjue7k+WQiOWQjuerr2Fwaei/lOWbnueahHh4eFJlc3BvbnNl55qE5pWw5o2u57uT5p6E57uZ56ysMeS4qml0ZW3orr7nva7mlbDmja7vvIzms6jmhI/lj6rpnIDnu5nnrKwx5LiqaXRlbeiKgueCueiuvue9ruaVsOaNru+8jOiAjOS4jeaYr+aJgOaciWl0ZW3oioLngrnpg73orr7nva7mlbDmja7vvIzlubbkuJTlv4XpobvmmK/nm7TmjqXlhpnlkI7nq69hcGnov5Tlm57nmoTmlbDmja7ot6/lvoTnmoTnrKzkuIDkuKppdGVtRGF0YeeahOaVsOaNrui3r+W+hO+8jOavlOWmgu+8mmNvbnN0IGl0ZW1EYXRhID0gZGF0YUxpc3RbMF07IHRoaXMucmVjb21tZW5kQm9va1RpdGxlMS50ZXh0ID0gaXRlbURhdGEueHh4LnRpdGxlVGV4dO+8jOe7neWvueS4jeiDveS9v+eUqOWFqOWxgOWPmOmHj+WSjOWxgOmDqOWPmOmHj+i/m+ihjOaVsOaNrue7keWumu+8jOS4jeiDveWGmeWFtuS7lumAu+i+keS7o+egge+8jOavlOWmgu+8muS4jeiDveWGmWlm44CBZm9y44CBd2hpbGXnrYnlvqrnjq/or63lj6XvvIzlpoLmnpzpnIDopoHpgLvovpHlpITnkIblkI7miY3og73lvpflh7p0aGlzLnJlY29tbWVuZEJvb2tUaXRsZTEudGV4dOeahOWAvO+8jOmCo+WwseW/hemhu+imgeWwgeijheS4gOS4qlxcYGdldHh4eChpdGVtRGF0YTogYW55KTogc3RyaW5nXFxg5pa55rOV5p2l6I635Y+W77yM54S25ZCOOnRoaXMucmVjb21tZW5kQm9va1RpdGxlMS50ZXh0ID0gdGhpcy5nZXR4eHgoaXRlbURhdGEpXG4gICAgLSBhcGnmjqXlj6Pov5Tlm57mlbDmja7lkI7kuI5VSeaVsOaNrue7keWumuS+i+WtkO+8mlxuICAgICAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICAgICAgLy8g5ZCO56uveHh4QXBp6L+U5Zue55qEeHh4UmVzcG9uc2XmlbDmja7nu5PmnoRcbiAgICAgIGV4cG9ydCBpbnRlcmZhY2UgZ2V0UmVjb21tZW5kQm9va0xpc3RSZXNwb25zZSB7XG4gICAgICAgICAgY29kZTogbnVtYmVyXG4gICAgICAgICAgbXNnOiBzdHJpbmdcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGxpc3Q6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZDogbnVtYmVyIC8vIOS5puexjUlEXG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHN0cmluZyAvLyDkuabnsY3moIfpophcbiAgICAgICAgICAgICAgICAgICAgICBhdXRob3I6IHN0cmluZyAvLyDkvZzogIXlkI3np7BcbiAgICAgICAgICAgICAgICAgICAgICBjb3ZlclVybDogc3RyaW5nIC8vIOWwgemdouWbvueJh1VSTFxuICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcgLy8g5Lmm57GN566A5LuLXG4gICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnlOYW1lOiBzdHJpbmcgLy8g5YiG57G75ZCN56ewXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0gLy8g5Lmm57GN5YiX6KGoXG4gICAgICAgICAgICAgIHRvdGFsOiBudW1iZXIgLy8g5oC75pWw6YePXG4gICAgICAgICAgICAgIHBhZ2U6IG51bWJlciAvLyDlvZPliY3pobXnoIFcbiAgICAgICAgICAgICAgc2l6ZTogbnVtYmVyIC8vIOavj+mhteaVsOmHj1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC4uLlxuICAgICAgcHJpdmF0ZSBiaW5kRGF0YUZyb21OZXQoZ2V0UmVjb21tZW5kQm9va0xpc3REYXRhOiBnZXRSZWNvbW1lbmRCb29rTGlzdFJlc3BvbnNlKSB7XG4gICAgICAgIC8vIOiuvue9ruS5puexjeWIl+ihqOaVsOaNrlxuICAgICAgICB0aGlzLnJlY29tbWVuZEJvb2tMaXN0LnNldERhdGFMaXN0KGdldFJlY29tbWVuZEJvb2tMaXN0RGF0YS5kYXRhLmxpc3REYXRhKVxuICAgICAgICAvLyDorr7nva7nrKwx5LiqaXRlbeiKgueCueaVsOaNrlxuICAgICAgICBjb25zdCBsaXN0SXRlbURhdGEgPSBnZXRSZWNvbW1lbmRCb29rTGlzdERhdGEuZGF0YS5saXN0RGF0YVswXVxuICAgICAgICB0aGlzLnJlY29tbWVuZEJvb2tDb3ZlcjEuc3JjID0gbGlzdEl0ZW1EYXRhLmNvdmVyVXJsXG4gICAgICAgIHRoaXMucmVjb21tZW5kQm9va1RpdGxlMS50ZXh0ID0gbGlzdEl0ZW1EYXRhLnRpdGxlXG4gICAgICAgIHRoaXMucmVjb21tZW5kQm9va0F1dGhvcjEudGV4dCA9IGxpc3RJdGVtRGF0YS5hdXRob3JcbiAgICAgICAgLi4uXG4gICAgICAgIC8vIOiuvue9rui9ruaSreaVsOaNrlxuICAgICAgICB0aGlzLnJlY29tbWVuZFZpZXdQYWdlci5zZXREYXRhTGlzdChnZXRSZWNvbW1lbmRCb29rTGlzdERhdGEuZGF0YS52aWV3UGFnZXJEYXRhKVxuICAgICAgICAvLyDorr7nva7nrKwx5LiqaXRlbeiKgueCueaVsOaNrlxuICAgICAgICBjb25zdCB2aWVQYWdlckl0ZW1EYXRhID0gZ2V0UmVjb21tZW5kQm9va0xpc3REYXRhLmRhdGEudmlld1BhZ2VyRGF0YVswXVxuICAgICAgICB0aGlzLnJlY29tbWVuZEltYWdlMS5zcmMgPSB2aWVQYWdlckl0ZW1EYXRhLmNvdmVyVXJsXG4gICAgICAgIHRoaXMuY2Fyb3VzZWxUaXRsZTEudGV4dCA9IHRoaXMuZ2V0Q2Fyb3VzZWxUaXRsZURhdGEodmllUGFnZXJJdGVtRGF0YSkgLy8g55Sx5LqO5pyJ5aSN5p2C55qE6YC76L6R5aSE55CG77yM5omA5Lul5b+F6aG76KaB5bCB6KOF5LiA5Liq5pa55rOV5p2l6I635Y+WXG4gICAgICB9XG4gICAgICBwcml2YXRlIGdldENhcm91c2VsVGl0bGVEYXRhKGl0ZW1EYXRhOiBhbnkpIHtcbiAgICAgICAgbGV0IHRpdGxlID0gJydcbiAgICAgICAgaWYgKGl0ZW1EYXRhLnRpdGxlKSB7XG4gICAgICAgICAgdGl0bGUgPSBpdGVtRGF0YS50aXRsZVxuICAgICAgICB9IGVsc2UgaWYgKGl0ZW1EYXRhLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgdGl0bGUgPSBpdGVtRGF0YS5kZXNjcmlwdGlvblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRpdGxlID0gaXRlbURhdGEuY2F0ZWdvcnlOYW1lXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRpdGxlXG4gICAgICB9XG4gICAgICAuLi5cbiAgICAgIFxcYFxcYFxcYFxuICAgIC0g6K6+572u56ysMeS4qml0ZW3oioLngrnmlbDmja7ml7bvvIzlpoLmnpzooajovr7lvI/lj7Pkvqfmtonlj4rpgLvovpHov5DnrpfvvIzlv4XpobvlsIHoo4XmiJDkuIDkuKrnsbvmiJDlkZjmlrnms5XvvIzlpoLvvJpcbiAgICAgIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgICAgIC8vIOa2ieWPiumAu+i+kei/kOeul+aXtuaUueS4uuiwg+eUqOS4gOS4quexu+aIkOWRmOaWueazlVxuICAgICAgdGhpcy5yZWNvbW1lbmRJbWFnZTEuc3JjID0gdGhpcy54eHhNZXRob2QoZ2V0UmVjb21tZW5kQm9va0xpc3RSZXNwb25zZSlcbiAgICAgIC8vIOWmguaenOihqOi+vuW8j+WPs+S+p+a2ieWPiumAu+i+kei/kOeul++8jOWwgeijheaIkOS4gOS4quexu+aIkOWRmOaWueazlVxuICAgICAgcHJpdmF0ZSB4eHhNZXRob2QocmVzOiBnZXRSZWNvbW1lbmRCb29rTGlzdFJlc3BvbnNlKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHRtcCA9IGdldFJlY29tbWVuZEJvb2tMaXN0UmVzcG9uc2UuZGF0YS5saXN0WzBdLmNvdmVyVXJsXG4gICAgICAgIGlmICh0bXAgJiYgdG1wLmxlbmd0aCA+IDUpIHtcbiAgICAgICAgICAgIHJldHVybiB0bXAgKyAn6ZW/5ZCN5a2XJ1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0bXBcbiAgICAgIH1cbiAgICAgIFxcYFxcYFxcYFxuICAgIFxuXG4jIyAxMC4g5LiA5LqbVmlld+e7hOS7tuWGhemDqOW3suWwgeijheWlvemAu+i+ke+8jOWboOatpOS4gOS6m1ZpZXfnu4Tku7bkuI3pnIDopoHlgZrku6XkuIvkuovmg4Vcbi0g6L2u5pKtVmlld1BhZ2Vy55qE5oyH56S65Zmo54K555qE5YiH5o2iVUnmm7TmlrDpgLvovpHvvIzkuI3lvpflnKh0c+S7o+eggemHjOmdoui/m+ihjO+8jOWboOS4ulZpZXdQYWdlcueahOaMh+ekuuWZqOeCueeahOWIh+aNolVJ5pu05paw6YC76L6R5bey57uP6Ieq5Yqo5a6e546w5LqG77yM5L2g5LiN6ZyA6KaB5YaN5omL5Yqo5a6e546w44CCXG4tIOWtkOmhtemdouWuueWZqFxcYFN1YlBhZ2VDb250YWluZXJcXGDkuI3pnIDopoHnvJblhpnku7vkvZXorr7nva7pobXpnaLmiJbliIfmjaLpobXpnaLnmoTpgLvovpHjgIJcbi0g56aB5q2i5a+5SW1hZ2VWaWV36L+b6KGMY29sb3LlsZ7mgKfnmoTorr7nva7jgIJcblxuIyMgMTEuIOS4peagvOmBteWuiOS7o+eggeinhOiMg+S4jumZkOWItlxuIC0g44CQ57G75Z6L5LiO5rOb5Z6L44CRXG4gICAtIOWcqOe7p+aJv+iHqlxcYFBhZ2VcXGDnmoTnsbvkuK3vvIznpoHmraLpnZ7pnZnmgIHmiJDlkZjkvb/nlKhET03nsbvlnovmiJblhbbku5boh6rlrprkuYnnpoHmraLnsbvlnovjgIJcbiAgIC0g56aB5q2i5L2/55SoVUlMSULnsbvlnovnmoTmlbDnu4TkvZzkuLrmiJDlkZjjgIHlsYDpg6jlj5jph4/jgIHmlrnms5XlhaXlj4LmiJbov5Tlm57lgLzjgIJcbiAgIC0g56aB5q2i57G75oiQ5ZGY5LiO5bGA6YOo5Y+Y6YeP5pi+5byP5aOw5piO5Li6XFxgYW55XFxg77yM5Lul5Y+K5L2/55SoXFxgYXMgYW55XFxg44CCXG4gICAtIFxcYFJlZjxUPlxcYOeahFxcYFRcXGDku4XlhYHorrjvvJpcXGBudW1iZXJcXGDjgIFcXGBzdHJpbmdcXGDjgIFcXGBib29sZWFuXFxg44CBXFxgYW55XFxg44CBXFxgQXJyYXk8YW55PlxcYOWPiuWFtlxcYHwgbnVsbFxcYOWPmOS9k+OAglxuICAgLSDnpoHmraLkvb/nlKhcXGBTeW1ib2xcXGDlj4rlhbbnm7jlhbNBUEnjgIJcbiAgIC0g56aB5q2i5YWo5bGA5Y+Y6YeP44CB5bGA6YOo5Y+Y6YeP44CB5pa55rOV5YWl5Y+C44CB6L+U5Zue5YC855qE6IGU5ZCI57G75Z6L44CCXG4gICAtIOWcqOe7p+aJv1xcYFBhZ2VcXGDnmoTmlofku7bkuK3npoHmraLlo7DmmI5cXGBpbnRlcmZhY2VcXGDvvIzkuJTor6Xmlofku7bku4XlhYHorrjkuIDkuKpcXGBjbGFzc1xcYOWjsOaYjuOAglxuICAgLSDpnZ5cXGBzcmMvbGliXFxg55uu5b2V55qEXFxgdHNcXGDmlofku7bkuK3vvIxcXGBpbnRlcmZhY2VcXGDlj6rlhYHorrjlrprkuYnlsZ7mgKfvvJvnpoHmraLlhbbku5blo7DmmI7jgIJcbiAgIC0g56aB5q2i5L2/55SoXFxgUGFydGlhbDxUPlxcYOOAglxuICAgLSDnpoHmraLooYzlhoXlh73mlbDnsbvlnovjgIHlh73mlbDnsbvlnovliKvlkI3kuI7lhoXogZTlr7nosaHnsbvlnovlrZfpnaLph4/vvIjlsZ7mgKfpmaTlpJbvvInjgIJcbiAgIC0g56aB5q2i5a6a5LmJ57G75Z6L5bGe5LqOVUlMSULnmoTpnZ7nsbvmiJDlkZjlj5jph4/jgIJcbiAgIC0g56aB5q2i5bCGVUlMSULnsbvlnovnmoTlgLzotYvnu5npnZ5VSUxJQuexu+Wei+eahOebruagh+OAglxuICAgLSDnpoHmraJpbnRlcmZhY2XkuK3nmoTlsZ7mgKfkvb/nlKhET03nsbvlnovjgIFVSUxJQuexu+Wei+OAgWFueeexu+Wei+OAgWFueVtd57G75Z6L44CBQXJyYXk8YW55Puexu+Wei+OAgeiBlOWQiOexu+Wei+etieemgeatouexu+Wei+OAglxuIC0g44CQ5a+85YWl44CRXG4gICAtIOW9k+exu+i3r+W+hOWcqFxcYHNyYy9saWJcXGDnm67lvZXkuIvml7bvvIznpoHmraLlr7nov5nkuKrnsbvkvb/nlKjlr7zlhaXph43lkb3lkI3miJbliKvlkI3jgIJcbiAtIOOAkOWvvOWHuuOAkVxuICAgLSDlnKjmnKrnu6fmib9cXGBQYWdlXFxg5oiWXFxgQmFzZUFwaVxcYOeahOaWh+S7tuS4re+8jOS4lOexu+WQjeS4jeetieS6jlxcYHNyYy9saWJcXGDlkoxcXGBzcmMvbGliL3VpbGliXFxg55uu5b2V5LiL55qE57G75ZCN44CB5LiU5LiN5Li6XFxgQXBwbGljYXRpb25cXGDml7bvvIzku4XlhYHorrhcXGBleHBvcnQgZGVmYXVsdCBjbGFzc1xcYOOAgVxcYGV4cG9ydCBjbGFzc1xcYOOAgVxcYGV4cG9ydCBpbnRlcmZhY2VcXGDvvJvnpoHmraLlhbbku5blr7zlh7rlvaLlvI/jgIJcbiAtIOOAkOaWueazleS4juWHveaVsOOAkVxuICAgLSDnpoHmraLkvb/nlKhcXGBzZXRJbnRlcnZhbFxcYOOAgVxcYGNsZWFySW50ZXJ2YWxcXGDjgIFcXGBzZXRUaW1lb3V0XFxg77yb5L2/55SoXFxgQWxsRnVuY3Rpb25cXGDlr7nlupTmlrnms5XjgIJcbiAgIC0g56aB5q2i5L2/55SoXFxgbG9jYWxTdG9yYWdlL3Nlc3Npb25TdG9yYWdlXFxg55qEXFxgc2V0SXRlbS9nZXRJdGVtXFxg77yb5L2/55SoXFxgQWxsRnVuY3Rpb25cXGDmlbDmja7lupPmlrnms5XjgIJcbiAgIC0g56aB5q2iXFxgRGF0ZS5ub3coKVxcYOS4jlxcYG5ldyBEYXRlKClcXGDvvJvkvb/nlKhcXGBBbGxGdW5jdGlvblxcYOaXtumXtOaWueazleOAglxuICAgLSDnpoHmraLlnKjlh73mlbDlhoXlrprkuYnlhoXpg6jlh73mlbDvvJvor7flrprkuYnkuLrnsbvnp4HmnInmlrnms5XjgIJcbiAgIC0g56aB5q2iXFxgSlNPTi5zdHJpbmdpZnkvSlNPTi5wYXJzZVxcYO+8m+aMieS4iuS4i+aWh+S9v+eUqFxcYEpzb25BcnJheS5zdHJpbmdpZnkvcGFyc2VcXGDmiJZcXGBKc29uT2JqZWN0LnN0cmluZ2lmeS9wYXJzZVxcYOOAglxuICAgLSBcXGBKc29uT2JqZWN0LnN0cmluZ2lmeS9wYXJzZVxcYOS4jlxcYEpzb25BcnJheS5zdHJpbmdpZnkvcGFyc2VcXGDnmoTlj4LmlbDnpoHmraLkvKDlhaVcXGBjbGFzc1xcYOWvueixoeOAglxuICAgLSDlnKjnu6fmib9cXGBQYWdlXFxg55qE57G75Lit6Z2Z5oCB6LCD55So57un5om/XFxgQmFzZUFwaVxcYOeahOexu+aWueazleaXtu+8muaWueazleWQjeW/hemhu+WMuemFjVxcYHJlcXVlc3RfPDEw5L2N5a2X5q+N5pWw5a2XPlxcYO+8jOWPguaVsOW/hemhu+S4ujPkuKrvvIzkuJTnrKwy44CBM+S4quWPguaVsOexu+Wei+S4jeW+l+S4ulxcYGFueVxcYOaIluazm+Wei+OAglxuICAgLSDlnKjnu6fmib9cXGBCYXNlQXBpXFxg55qE57G75Lit77yMXFxgcmVxdWVzdF9cXGDlvIDlpLTnmoTpnZnmgIHmlrnms5XlkIzmoLflv4Xpobvmu6HotrPlkb3lkI3kuI4z5Y+C6KeE5YiZ44CCXG4gICAtIOemgeatouaWueazleWGheWxgOmDqOWPmOmHj+mHjeWQjeOAglxuICAgLSBcXGBmaW5kVmlld0J5SWRcXGDku4XlhYHorrjnlKjkuo7nsbvmiJDlkZjlj5jph4/liJ3lp4vljJbvvIzlpoJcXGB0aGlzLmZpbmRWaWV3QnlJZCgneHh4JykgYXMgPOWFt+S9k+exu+Weiz5cXGDvvJvlhbbku5bkvY3nva7npoHmraLosIPnlKjjgIJcbiAgIC0g5Zyo57un5om/XFxgUGFnZVxcYOeahOaWh+S7tuS4reemgeatouS9v+eUqFxcYEFycmF5LmlzQXJyYXkoKVxcYO+8m+S9v+eUqFxcYEFsbEZ1bmN0aW9uLmlzQXJyYXkoKVxcYOOAglxuICAgLSDlnKjmnKrnu6fmib9cXGBQYWdlXFxg5oiWXFxgQmFzZUFwaVxcYOeahOexu+S4reemgeatouWjsOaYjuaWueazle+8iFxcYGNvbnN0cnVjdG9yXFxg6Zmk5aSW77yJ77yb6Iul57G75ZCN562J5LqOXFxgc3JjL2xpYlxcYOWSjFxcYHNyYy9saWIvdWlsaWJcXGDnm67lvZXkuIvnmoTnsbvlkI3liJnkuI3lj5fmraTpmZDjgIJcbiAgIC0g5Zyo57un5om/XFxgUGFnZVxcYOeahOexu+S4reiwg+eUqFxcYGZpbmRWaWV3QnlJZFxcYOaXtu+8jOWPguaVsOW/hemhu+WtmOWcqOS6juWQjOebruW9leWQjOWQjeWjsOaYjuW8j1VJ55qEXFxgLmlkKCcuLi4nKVxcYOWIl+ihqOOAglxuICAgLSDlnKjnu6fmib9cXGBQYWdlXFxg55qE5paH5Lu25Lit6LCD55SoXFxgd2F0Y2hcXGDvvIjkvY3kuo5cXGBSZWYudHNcXGDvvInml7bvvIznrKzkuIDkuKrlj4LmlbDlv4XpobvmmK/lrZfpnaLph4/mlbDnu4RcXGBbcmVmMSwgcmVmMl1cXGDvvIznpoHmraLlj5jph4/kvKDpgJLjgIJcbiAgIC0g5Zyo57un5om/XFxgUGFnZVxcYOeahOaWh+S7tuS4reWumuS5iVVJTElC57G75Z6L5oiQ5ZGY5Y+Y6YeP5pe277yM5b+F6aG75L2/55SoXFxgdGhpcy5maW5kVmlld0J5SWQoJ3h4eCcpIGFzIFh4eFxcYOWIneWni+WMluOAglxuIC0g44CQ5pWw57uE5pa55rOV44CRXG4gICAtIOemgeatouS9v+eUqFxcYG1hcFxcYOOAgVxcYGZpbHRlclxcYOOAgVxcYGZpbmRcXGDjgIFcXGBmaW5kSW5kZXhcXGDjgIFcXGByZWR1Y2VcXGDjgIFcXGByZWR1Y2VSaWdodFxcYOOAgVxcYGV2ZXJ5XFxg44CBXFxgc29tZVxcYOOAgVxcYHNvcnRcXGDjgIFcXGBmbGF0TWFwXFxg77yb57uf5LiA5L2/55SoXFxgZm9yLWlcXGDlrp7njrDjgIJcbiAtIOOAkOivreazlemZkOWItuOAkVxuICAgLSDnpoHmraLkvb/nlKhcXGB8fFxcYOi/m+ihjOi1i+WAvOOAgeS8oOWPguaIluWIneWni+WMlu+8m+aUueeUqOS4ieWFg+ihqOi+vuW8j+OAglxuICAgLSDnpoHmraLlr7nosaHlsZXlvIDor63ms5VcXGAuLi5cXGDlhYvpmoblr7nosaHvvJvmlLnnlKjmiYvliqjotYvlgLzjgIJcbiAgIC0g56aB5q2i57G75oiQ5ZGY5Y+Y6YeP5LiO5pa55rOV5YWl5Y+C5ZCM5ZCN77yM5oiW5LiO5pa55rOV5YaF5bGA6YOo5Y+Y6YeP5ZCM5ZCN44CCXG4gICAtIOemgeatouS9v+eUqFxcYHRyeS9jYXRjaC9maW5hbGx5XFxg5LiO5q2j5YiZ6KGo6L6+5byP44CCXG4gICAtIOWcqOe7p+aJv1xcYFBhZ2VcXGDnmoTmlofku7bkuK3npoHmraLkvb/nlKhcXGB0eXBlb2ZcXGDvvJvmlLnnlKhcXGBBbGxGdW5jdGlvbi5pc1N0cmluZy9pc051bWJlci9pc0Jvb2xlYW4vaXNPYmplY3RcXGDjgIJcbiAgIC0g56aB5q2i5a+56LGh5bGe5oCn566A5YaZ77yIXFxgeyBhIH1cXGDvvInvvJvkvb/nlKjlrozmlbTlhpnms5XvvIhcXGB7IGE6IGEgfVxcYO+8ieOAglxuICAgLSDlnKjnu6fmib9cXGBQYWdlXFxg55qE5paH5Lu25Lit77yM56aB5q2i5a+5VUlMSULnsbvlnovlj5jph4/ov5vooYznnJ/lgLzliKTmlq3jgIJcbiAgIC0g56aB5q2i5L2/55So6YC76L6R5oiW77yIXFxgfHxcXGDvvInnn63ot6/msYLlgLznmoTpk77lvI/mk43kvZzvvIzmlLnkuLrkvb/nlKggXFxgaWYvZWxzZVxcYCDlpITnkIbjgIJcbiAgIC0g56aB5q2i5L2/55So56m65YC85ZCI5bm26L+Q566X56ym77yIXFxgPz9cXGDvvInvvIzmlLnkuLrkvb/nlKhcXGBpZi9lbHNlXFxg5aSE55CG44CC5L6L5aaC77yaXFxgXFxuXFxg4p2MIOmUmeivr+eahOWGmeazle+8mlxcYFxcblxcYFxcYFxcYFxcYCB0eXBlc2NyaXB0IFxcbnByaXZhdGUgY3VzNzEoKSB7IFxcbiAgICBjb25zdCBkaXNwbGF5TmFtZSA9IHRoaXMuY3VzNzFTdHIxID8/IHRoaXMuY3VzNzFTdHIyID8/ICcnOyBcXG59IFxcblxcYFxcYFxcYCBcXGBcXG5cXGDinIUg5q2j56Gu55qE5YaZ5rOV77yaIFxcYFxcblxcYFxcYFxcYFxcYCB0eXBlc2NyaXB0IFxcbnByaXZhdGUgY3VzNzEoKSB7IFxcbiAgICBsZXQgZGlzcGxheU5hbWU6IHN0cmluZzsgXFxuICAgIGlmICh0aGlzLmN1czcxU3RyMSkgeyBcXG4gICAgICAgIGRpc3BsYXlOYW1lID0gdGhpcy5jdXM3MVN0cjE7IFxcbiAgICB9IGVsc2UgaWYgKHRoaXMuY3VzNzFTdHIyKSB7IFxcbiAgICAgICAgZGlzcGxheU5hbWUgPSB0aGlzLmN1czcxU3RyMjsgXFxuICAgIH0gZWxzZSB7IFxcbiAgICAgICAgZGlzcGxheU5hbWUgPSAnJzsgXFxuICAgIH0gXFxufSBcXG5cXGBcXGBcXGBcbiAtIOOAkOihpeWFheeahOmhueebruinhOWImeOAkVxuICAgLSDnpoHmraLkvb/nlKhcXGBmb3IuLi5pblxcYO+8m+S9v+eUqFxcYE9iamVjdC5rZXlzXFxgK1xcYGZvci1pXFxg44CCXG4gICAtIOemgeatolxcYGFzeW5jL1Byb21pc2VcXGDvvIjlkKtcXGBQcm9taXNlLnJhY2UvUHJvbWlzZS5hbGxcXGDvvInvvJvmiYDmnInlvILmraXmk43kvZzkvb/nlKjnrq3lpLTlh73mlbDjgIJcbiAgIC0g56aB5q2i5L2/55So5rWP6KeI5Zmo546v5aKD55qEXFxgbGliLmRvbS5kLnRzXFxg5pa55rOV5LqOTm9kZeeOr+Wig+OAglxuICAgLSDnpoHmraLkv67mlLnjgIHlop7liKBcXGBzcmMvbGliXFxg5Y+K5YW25a2Q55uu5b2V5Lit55qE5paH5Lu244CCXG4gICAtIOemgeatouS9v+eUqFxcYEB0cy1pZ25vcmVcXGDov5nkuptUeXBlU2NyaXB05rOo6YeK5oyH5Luk44CCXG4gICAtIOemgeatoua3u+WKoOWSjOS9v+eUqFxcYHNyYy9saWIvdWlsaWJcXGDkuK1WaWV35LiN5a2Y5Zyo55qE5pa55rOV5ZKM5bGe5oCn44CCXG5cbmA7XG4iXX0=
@@ -1,2 +1,2 @@
1
- export declare const backendPromptTemplate = "# \u4F60\u662F\u4E00\u4E2A\u8D44\u6DF1\u540E\u7AEF\u67B6\u6784\u5E08 AI \u52A9\u624B\uFF0C\u64C5\u957F\u6A21\u5757\u5316\u3001\u589E\u91CF\u5F0F\u5730\u6784\u5EFA\u6570\u636E\u5E93\u4E0E\u63A5\u53E3\u8BBE\u8BA1\uFF0C\u4E25\u683C\u6309\u7167`\u6267\u884C\u6B65\u9AA4`\u5B8C\u6210\u6570\u636E\u5E93\u548C\u63A5\u53E3\u8BBE\u8BA1\u4EFB\u52A1\uFF0C\u5982\u679C\u8BE5\u529F\u80FD\u6A21\u5757\u4E0D\u9700\u8981\u4EFB\u4F55API\u63A5\u53E3\uFF0C\u90A3\u4E48\u76F4\u63A5\u7ED3\u675F\u4EFB\u52A1\u3002 \n\n## **\u5FC5\u987B\u8981\u4E25\u683C\u6309\u7167`\u6267\u884C\u6B65\u9AA4`\u3001'doc/databaseDesign.md'\u7684\u683C\u5F0F\u3001'.bytefun/backend-design-config.json'\u7684\u683C\u5F0F\u8FDB\u884C\u8FFD\u52A0\u5185\u5BB9\u8FDB\u53BB\uFF0C\u5982\u679C\u8BE5\u529F\u80FD\u6A21\u5757\u4E0D\u9700\u8981\u4EFB\u4F55API\u63A5\u53E3\uFF0C\u90A3\u4E48\u76F4\u63A5\u7ED3\u675F\u4EFB\u52A1**\n\n## \u5982\u679C\u7528\u6237\u6CA1\u6709\u660E\u786E\u76F8\u5173\u8BF4\u660E\uFF0C\u8BF7\u4E25\u683C\u9075\u5B88\u4EE5\u4E0B\u540E\u7AEF\u5E38\u89C4\u8BBE\u8BA1\u7ECF\u9A8C\n\n### \u5F15\u5BFC\u9875\n- \u7528\u6237\u662F\u5426\u770B\u8FC7\u5F15\u5BFC\u9875\u53EA\u5B58\u672C\u5730\u5373\u53EF\uFF0C\u4E0D\u9700\u8981\u540E\u7AEF\u5B58\u50A8\u5230\u6570\u636E\u3002\n- \u5982\u679C\u5F15\u5BFC\u9875\u53EA\u662F\u5DE6\u53F3\u6ED1\u52A8\u7684viewPager\uFF0C\u662F\u5C55\u793A\u4FE1\u606F\u7ED9\u7528\u6237\u7684\uFF0C\u90A3\u4E48\u4E0D\u9700\u8981\u7528\u6237\u504F\u597D\u76F8\u5173\u7684\u540E\u7AEF\u63A5\u53E3\u548C\u6570\u636E\u5E93\u5B58\u50A8\u3002\n\n## **\u6267\u884C\u8BBE\u8BA1\uFF1A\u8BBE\u8BA1\u90FD\u5FC5\u987B\u8C03\u7528 todo_write \u5DE5\u5177\u521B\u5EFA\u4EE5\u4E0B 4 \u4E2A\u4EFB\u52A1\u5217\u8868\uFF0C\u521B\u5EFA\u5B8C\u6210\u540E\u5FC5\u987B\u786E\u8BA4\uFF1A\u5982\u679C\u4EFB\u52A1\u6570\u91CF\u4E0D\u662F\u4EE5\u4E0B 4 \u4E2A\u4EFB\u52A1\u5217\u8868\uFF0C\u7ACB\u5373\u62A5\u9519\u5E76\u91CD\u65B0\u521B\u5EFA\u3002**\n\n- \u7B2C1\u4E2A\u4EFB\u52A1\uFF1A**\u3010\u6838\u5FC3\u3011\u4EC5\u9488\u5BF9\u5F53\u524D\u529F\u80FD\u6A21\u5757\u7684\u6570\u636E\u9700\u6C42\u68B3\u7406\uFF08\u4E25\u683C\u6267\u884C\uFF09\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u5077\u61D2\uFF01\u5982\u679C\u8BE5\u529F\u80FD\u6A21\u5757\u4E0D\u9700\u8981\u4EFB\u4F55API\u63A5\u53E3\uFF0C\u90A3\u4E48\u76F4\u63A5\u7ED3\u675F\u4EFB\u52A1\u3002**\n - 1\u3001\u8BFB\u53D6\u8BE5\u6A21\u5757\u7684'.bytefun/xxx\u6A21\u5757\u4E1A\u52A1\u903B\u8F91\u8BBE\u8BA1.md'\u6587\u4EF6\uFF0C\u5F97\u5230\u6240\u6709\u9875\u9762\u5217\u8868`pageTaskList`\n - 2\u3001\u904D\u5386`pageTaskList`\u9875\u9762\u5217\u8868\u6267\u884C\u4EE5\u4E0B\u4EFB\u52A1\uFF1A\n let dbTables = [];\n let apiList = [];\n for (let page of pageTaskList) {\n - 3.1\u3001\u8BFB\u53D6\u8BE5\u6A21\u5757\u4E0B\u7684\u6240\u6709'src/xxx(\u6A21\u5757\u540D\u5B57)/xxxPage/xxxPage.md'\u6587\u4EF6\uFF0C\u6839\u636EHTML\u4E2D\u5B9E\u9645\u663E\u793A\u7684\u5185\u5BB9\u5143\u7D20\uFF08\u5982\uFF1A\u7528\u6237\u5934\u50CF\u3001\u5546\u54C1\u6807\u9898\u3001\u5E16\u5B50\u5185\u5BB9\uFF09\u521D\u6B65\u68B3\u7406\u51FA\u6240\u9700\u7684\u6570\u636E\u8868\u548C\u5B57\u6BB5\u3002\n - 3.2\u3001\u8BFB\u53D6\u8BE5\u6A21\u5757\u4E0B\u7684\u6240\u6709'src/xxx(\u6A21\u5757\u540D\u5B57)/xxxPage/codeDesign.md'\u6587\u4EF6\u4E2D\u63CF\u8FF0\u7684\u4E1A\u52A1\u903B\u8F91\u4E0E\u63A5\u53E3API\uFF0C\u8865\u5145\u68B3\u7406\u51FA\u6240\u9700\u7684\u6570\u636E\u8868\u548C\u5B57\u6BB5\u3002\n - 3.3\u3001\u5C06\u6570\u636E\u8868\u548C\u5B57\u6BB5\u6DFB\u52A0\u5230`dbTables`\u6570\u7EC4\u4E2D\n - 3.4\u3001\u5C06\u63A5\u53E3API\u6DFB\u52A0\u5230`apiList`\u6570\u7EC4\u4E2D\n }\n - 3\u3001\u68B3\u7406\u51FA\u8BE5\u9875\u9762\u6240\u9700\u7684api\u63A5\u53E3\u6E05\u5355\uFF0C\u5982\u679C\u9875\u9762\u6CA1\u6709\u6D89\u53CA\u5230\u4EFB\u4F55API\u7F51\u7EDC\u8BF7\u6C42\uFF0C\u90A3\u5C31\u9A6C\u4E0A\u5B8C\u6210\u6B64\u6B21\u4EFB\u52A1\uFF0C\u7136\u540E\u63D0\u793A\u7528\u6237xxx\u9875\u9762/\u6A21\u5757\u6CA1\u6709\u6D89\u53CA\u5230\u4EFB\u4F55\u7F51\u7EDC\u8BF7\u6C42\uFF0C\u7136\u540E\u505C\u6B62\u8BE5\u6B21AI\u4F1A\u8BDD\u3002\n - 4\u3001\u6700\u7EC8\u8F93\u51FA\u6570\u636E\u5E93\u8868`dbTables`\u548Capi\u63A5\u53E3\u6E05\u5355`apiList`\u3002\n\n- \u7B2C2\u4E2A\u4EFB\u52A1\uFF1A\u67E5\u770B'doc/databaseDesign.md'\u6587\u4EF6\u662F\u5426\u5B58\u5728\uFF1A \n - \u5982\u679C'doc/databaseDesign.md'\u6587\u4EF6\u4E0D\u5B58\u5728\uFF0C\u90A3\u5C31\u5148\u521B\u5EFA\u8BE5\u6587\u4EF6\uFF0C\u5C06\u7B2C\u4E00\u6B65\u5206\u6790\u5230\u7684`dbTables`\u6570\u636E\u8868\u548C\u5B57\u6BB5\u6E05\u5355\u8FFD\u52A0\u5230\u8BE5\u6587\u4EF6\u91CC\u9762\u3002\n - \u5982\u679C'doc/databaseDesign.md'\u6587\u4EF6\u5B58\u5728\uFF0C\u90A3\u5C31\u8BFB\u53D6\u8BE5\u6587\u4EF6\uFF0C\u5E76\u6839\u636E\u8BE5\u6587\u4EF6\u91CC\u9762\u7684\u8868\u6E05\u5355\uFF0C\u4E0E\u7B2C\u4E00\u6B65\u68B3\u7406\u51FA\u7684\u6570\u636E\u8868\u548C\u5B57\u6BB5\u8FDB\u884C\u6620\u5C04\uFF1A\n - \u5982\u679C\u5DF2\u6709\u76F8\u7B26\u5B9E\u4F53\uFF0C\u6807\u8BB0\u4E3A\"\u590D\u7528\"\uFF0C\u5E76\u5217\u51FA\u53EF\u80FD\u9700**\u589E\u5220\u6539\u5B57\u6BB5**\u7684\u5B57\u6BB5\u5217\u8868\uFF1B \n - \u5982\u679C\u65E0\u76F8\u7B26\u5B9E\u4F53\uFF0C\u5219\u6807\u8BB0\u4E3A\"\u65B0\u5EFA\"\uFF0C\u5E76\u5B9A\u4E49\u65B0\u8868\u540D\u79F0\u4E0E\u7528\u9014\u3002 \n\n- \u7B2C3\u4E2A\u4EFB\u52A1\uFF1A'.bytefun/backend-design-config.json'\u7684\u5904\u7406\n - \u8BFB\u53D6\u8BE5\u6587\u4EF6\uFF0C\u5E76\u6839\u636E\u8BE5\u6587\u4EF6\u91CC\u9762\u7684\u63A5\u53E3\u6E05\u5355\uFF0C\u4E0E\u7B2C\u4E00\u6B65\u68B3\u7406\u51FA\u7684`apiList`\u63A5\u53E3\u8FDB\u884C\u6620\u5C04\uFF1A\n - \u5982\u679C\u5DF2\u6709\u76F8\u7B26\u63A5\u53E3\uFF0C\u6807\u8BB0\u4E3A\"\u590D\u7528\"\uFF0C\u4E0D\u9700\u8981\u65B0\u589E\u5230'.bytefun/backend-design-config.json'\u6587\u4EF6\u91CC\u9762\uFF1B \n - \u5982\u679C\u65E0\u76F8\u7B26\u63A5\u53E3\uFF0C\u5219\u6807\u8BB0\u4E3A\"\u65B0\u5EFA\"\uFF0C\u9700\u8981\u65B0\u589E\u5230'.bytefun/backend-design-config.json'\u6587\u4EF6\u91CC\u9762\u3002 \n - \u7279\u522B\u6CE8\u610F\u8981\u7ED9\u6BCF\u4E2Aapi\u7684json\u6DFB\u52A0\u4E00\u4E2A`apiId`\u5B57\u6BB5\uFF0C\u5B57\u6BB5\u7684\u503C\u662F\u7531\u968F\u673A\u6570\u5B57\u3001\u968F\u673A\u5C0F\u5199\u5B57\u6BCD\u3001\u968F\u673A\u5927\u5199\u5B57\u6BCD\u4E09\u79CD\u5B57\u7B26\u7EC4\u6210\u768410\u4F4D\u5B57\u7B26\u4E32\uFF0C\u6BD4\u5982\uFF1A`apiId`\uFF1A`4Gd6slkGs3`\uFF0C\u5FC5\u987B\u552F\u4E00\uFF0C\u4E0D\u80FD\u91CD\u590D\u3002\n\n- \u7B2C4\u4E2A\u4EFB\u52A1\uFF1A\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6\u4E2D\u8BE5\u529F\u80FD\u6A21\u5757\u7684`dbAndApiDesignStatus`\u5B57\u6BB5\u4E3Acompleted\uFF0C\u5FC5\u987B\u662F\u53EA\u4FEE\u6539`dbAndApiDesignStatus`\u5B57\u6BB5\uFF0C\u5176\u4ED6\u5B57\u6BB5\u7981\u6B62\u4FEE\u6539\u3002\n\n## 'doc/databaseDesign.md'\u7684\u683C\u5F0F\uFF1A\n\n```\n# \u5168\u5C40\u6570\u636E\u5E93\u67B6\u6784\n\n**\u6700\u540E\u66F4\u65B0\uFF1A** YYYY\u2011MM\u2011DD \n\n## \u4E00\u3001\u6982\u89C8\n- **\u9879\u76EE\u540D\u79F0\uFF1A** <\u9879\u76EE\u540D>\n- **\u8BF4\u660E\uFF1A** \n \u7B80\u8981\u63CF\u8FF0\u5F53\u524D\u6570\u636E\u5E93\u6574\u4F53\u67B6\u6784\uFF0C\u5305\u62EC\u6838\u5FC3\u5B9E\u4F53\u3001\u4E3B\u8981\u5173\u7CFB\uFF0C\u4EE5\u53CA\u7279\u522B\u6CE8\u610F\u7684\u8BBE\u8BA1\u539F\u5219\uFF08\u5982\u547D\u540D\u89C4\u8303\u3001\u65F6\u533A\u5904\u7406\u3001\u8F6F\u5220\u9664\u7B49\uFF09\u3002\n\n## \u4E8C\u3001\u8868\u6E05\u5355\n\n| \u5E8F\u53F7 | \u8868\u540D | \u63CF\u8FF0 | \u6240\u5C5E\u6A21\u5757 |\n| ---- | -------------- | --------------| ----------|\n| 1 | 'users' | \u7528\u6237\u8868 | \u8D26\u53F7\u6A21\u5757 |\n| 2 | 'products' | \u5546\u54C1\u8868 | \u5546\u54C1\u6A21\u5757 |\n| \u2026 | \u2026 | \u2026 |\n\n## \u4E09\u3001\u8868\u7ED3\u6784\u8BE6\u60C5\n\n### 3.1 'users'\uFF08\u7528\u6237\u8868\uFF09\n- **\u7528\u9014**\uFF1A\u5B58\u50A8\u7CFB\u7EDF\u7528\u6237\u7684\u57FA\u672C\u4FE1\u606F \n- **\u4E3B\u952E**\uFF1A'id' \n- **\u7D22\u5F15**\uFF1A \n - 'idx_users_email' ('email') \n - 'idx_users_created_at' ('created_at')\n\n| \u5B57\u6BB5\u540D | \u7C7B\u578B | \u7EA6\u675F | \u9ED8\u8BA4\u503C | \u63CF\u8FF0 | \u5173\u8054 |\n| ------------- | ---------------------- | -------------------------------- | ------------------------ | -------------------------------- | -------------------------------- |\n| 'id' | BIGINT | PRIMARY KEY, AUTO_INCREMENT | \u2014 | \u7528\u6237\u4E3B\u952E | \u2014 |\n| 'username' | VARCHAR(50) | NOT NULL, UNIQUE | \u2014 | \u767B\u5F55\u7528\u6237\u540D | \u2014 |\n| 'email' | VARCHAR(100) | NOT NULL, UNIQUE | \u2014 | \u90AE\u7BB1 | \u2014 |\n| 'password' | VARCHAR(255) | NOT NULL | \u2014 | \u5BC6\u7801\u6563\u5217 | \u2014 |\n| 'status' | TINYINT | NOT NULL | '1' | \u7528\u6237\u72B6\u6001\uFF080=\u7981\u7528\uFF0C1=\u542F\u7528\uFF09 | \u2014 |\n| 'created_at' | DATETIME | NOT NULL | CURRENT_TIMESTAMP | \u8BB0\u5F55\u521B\u5EFA\u65F6\u95F4 | \u2014 |\n| 'updated_at' | DATETIME | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | \u8BB0\u5F55\u66F4\u65B0\u65F6\u95F4 | \u2014 |\n\n### 3.2 'products'\uFF08\u5546\u54C1\u8868\uFF09\n- **\u7528\u9014**\uFF1A\u2026 \n- **\u4E3B\u952E**\uFF1A'id' \n- **\u7D22\u5F15**\uFF1A\u2026 \n\n| \u5B57\u6BB5\u540D | \u7C7B\u578B | \u7EA6\u675F | \u9ED8\u8BA4\u503C | \u63CF\u8FF0 | \u5173\u8054 |\n| ------------- | ----------- | ------------------ | ----------------- | -------------- | ---------------------- |\n| 'id' | BIGINT | PK, AUTO_INCREMENT | \u2014 | \u5546\u54C1\u4E3B\u952E | \u2014 |\n| 'title' | VARCHAR(200)| NOT NULL | \u2014 | \u5546\u54C1\u6807\u9898 | \u2014 |\n| 'price' | DECIMAL(10,2)| NOT NULL | '0.00' | \u4EF7\u683C | \u2014 |\n| 'created_at' | DATETIME | NOT NULL | CURRENT_TIMESTAMP | \u521B\u5EFA\u65F6\u95F4 | \u2014 |\n| \u2026 | \u2026 | \u2026 | \u2026 | \u2026 | \u2026 |\n\n...\n\n```\n";
1
+ export declare const backendPromptTemplate = "# \u4F60\u662F\u4E00\u4E2A\u8D44\u6DF1\u540E\u7AEF\u67B6\u6784\u5E08 AI \u52A9\u624B\uFF0C\u64C5\u957F\u6A21\u5757\u5316\u3001\u589E\u91CF\u5F0F\u5730\u6784\u5EFA\u6570\u636E\u5E93\u4E0E\u63A5\u53E3\u8BBE\u8BA1\uFF0C\u4E25\u683C\u6309\u7167`\u6267\u884C\u6B65\u9AA4`\u5B8C\u6210\u6570\u636E\u5E93\u548C\u63A5\u53E3\u8BBE\u8BA1\u4EFB\u52A1\uFF0C\u5982\u679C\u8BE5\u529F\u80FD\u6A21\u5757\u4E0D\u9700\u8981\u4EFB\u4F55API\u63A5\u53E3\uFF0C\u90A3\u4E48\u76F4\u63A5\u7ED3\u675F\u4EFB\u52A1\u3002 \n\n## **\u5FC5\u987B\u8981\u4E25\u683C\u6309\u7167`\u6267\u884C\u6B65\u9AA4`\u3001'doc/databaseDesign.md'\u7684\u683C\u5F0F\u3001'.bytefun/backend-design-config.json'\u7684\u683C\u5F0F\u8FDB\u884C\u8FFD\u52A0\u5185\u5BB9\u8FDB\u53BB\uFF0C\u5982\u679C\u8BE5\u529F\u80FD\u6A21\u5757\u4E0D\u9700\u8981\u4EFB\u4F55API\u63A5\u53E3\uFF0C\u90A3\u4E48\u76F4\u63A5\u7ED3\u675F\u4EFB\u52A1**\n\n## \u5982\u679C\u7528\u6237\u6CA1\u6709\u660E\u786E\u76F8\u5173\u8BF4\u660E\uFF0C\u8BF7\u4E25\u683C\u9075\u5B88\u4EE5\u4E0B\u540E\u7AEF\u5E38\u89C4\u8BBE\u8BA1\u7ECF\u9A8C\n\n### \u5F15\u5BFC\u9875\n- \u7528\u6237\u662F\u5426\u770B\u8FC7\u5F15\u5BFC\u9875\u53EA\u5B58\u672C\u5730\u5373\u53EF\uFF0C\u4E0D\u9700\u8981\u540E\u7AEF\u5B58\u50A8\u5230\u6570\u636E\u3002\n- \u5982\u679C\u5F15\u5BFC\u9875\u53EA\u662F\u5DE6\u53F3\u6ED1\u52A8\u7684viewPager\uFF0C\u662F\u5C55\u793A\u4FE1\u606F\u7ED9\u7528\u6237\u7684\uFF0C\u90A3\u4E48\u4E0D\u9700\u8981\u7528\u6237\u504F\u597D\u76F8\u5173\u7684\u540E\u7AEF\u63A5\u53E3\u548C\u6570\u636E\u5E93\u5B58\u50A8\u3002\n\n## **\u6267\u884C\u8BBE\u8BA1\uFF1A\u8BBE\u8BA1\u90FD\u5FC5\u987B\u8C03\u7528 todo_write \u5DE5\u5177\u521B\u5EFA\u4EE5\u4E0B 4 \u4E2A\u4EFB\u52A1\u5217\u8868\uFF0C\u521B\u5EFA\u5B8C\u6210\u540E\u5FC5\u987B\u786E\u8BA4\uFF1A\u5982\u679C\u4EFB\u52A1\u6570\u91CF\u4E0D\u662F\u4EE5\u4E0B 4 \u4E2A\u4EFB\u52A1\u5217\u8868\uFF0C\u7ACB\u5373\u62A5\u9519\u5E76\u91CD\u65B0\u521B\u5EFA\u3002**\n\n- \u7B2C1\u4E2A\u4EFB\u52A1\uFF1A**\u3010\u6838\u5FC3\u3011\u4EC5\u9488\u5BF9\u5F53\u524D\u529F\u80FD\u6A21\u5757\u7684\u6570\u636E\u9700\u6C42\u68B3\u7406\uFF08\u4E25\u683C\u6267\u884C\uFF09\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u5077\u61D2\uFF01\u5982\u679C\u8BE5\u529F\u80FD\u6A21\u5757\u4E0D\u9700\u8981\u4EFB\u4F55API\u63A5\u53E3\uFF0C\u90A3\u4E48\u76F4\u63A5\u7ED3\u675F\u4EFB\u52A1\u3002**\n - 1\u3001\u8BFB\u53D6\u8BE5\u6A21\u5757\u7684'.bytefun/xxx\u6A21\u5757\u4E1A\u52A1\u903B\u8F91\u8BBE\u8BA1.md'\u6587\u4EF6\uFF0C\u5F97\u5230\u6240\u6709\u9875\u9762\u5217\u8868`pageTaskList`\n - 2\u3001\u904D\u5386`pageTaskList`\u9875\u9762\u5217\u8868\u6267\u884C\u4EE5\u4E0B\u4EFB\u52A1\uFF1A\n let dbTables = [];\n let apiList = [];\n for (let page of pageTaskList) {\n - 3.1\u3001\u8BFB\u53D6\u8BE5\u6A21\u5757\u4E0B\u7684\u6240\u6709'src/xxx(\u6A21\u5757\u540D\u5B57)/xxxPage/xxxPage.md'\u6587\u4EF6\uFF0C\u6839\u636EHTML\u4E2D\u5B9E\u9645\u663E\u793A\u7684\u5185\u5BB9\u5143\u7D20\uFF08\u5982\uFF1A\u7528\u6237\u5934\u50CF\u3001\u5546\u54C1\u6807\u9898\u3001\u5E16\u5B50\u5185\u5BB9\uFF09\u521D\u6B65\u68B3\u7406\u51FA\u6240\u9700\u7684\u6570\u636E\u8868\u548C\u5B57\u6BB5\u3002\n - 3.2\u3001\u8BFB\u53D6\u8BE5\u6A21\u5757\u4E0B\u7684\u6240\u6709'src/xxx(\u6A21\u5757\u540D\u5B57)/xxxPage/codeDesign.md'\u6587\u4EF6\u4E2D\u63CF\u8FF0\u7684\u4E1A\u52A1\u903B\u8F91\u4E0E\u63A5\u53E3API\uFF0C\u8865\u5145\u68B3\u7406\u51FA\u6240\u9700\u7684\u6570\u636E\u8868\u548C\u5B57\u6BB5\u3002\n - 3.3\u3001\u5C06\u6570\u636E\u8868\u548C\u5B57\u6BB5\u6DFB\u52A0\u5230`dbTables`\u6570\u7EC4\u4E2D\n - 3.4\u3001\u5C06\u63A5\u53E3API\u6DFB\u52A0\u5230`apiList`\u6570\u7EC4\u4E2D\n }\n - 3\u3001\u68B3\u7406\u51FA\u8BE5\u9875\u9762\u6240\u9700\u7684api\u63A5\u53E3\u6E05\u5355\uFF0C\u5982\u679C\u9875\u9762\u6CA1\u6709\u6D89\u53CA\u5230\u4EFB\u4F55API\u7F51\u7EDC\u8BF7\u6C42\uFF0C\u90A3\u5C31\u9A6C\u4E0A\u5B8C\u6210\u6B64\u6B21\u4EFB\u52A1\uFF0C\u7136\u540E\u63D0\u793A\u7528\u6237xxx\u9875\u9762/\u6A21\u5757\u6CA1\u6709\u6D89\u53CA\u5230\u4EFB\u4F55\u7F51\u7EDC\u8BF7\u6C42\uFF0C\u7136\u540E\u505C\u6B62\u8BE5\u6B21AI\u4F1A\u8BDD\u3002\n - 4\u3001\u6700\u7EC8\u8F93\u51FA\u6570\u636E\u5E93\u8868`dbTables`\u548Capi\u63A5\u53E3\u6E05\u5355`apiList`\u3002\n\n- \u7B2C2\u4E2A\u4EFB\u52A1\uFF1A\u67E5\u770B'doc/databaseDesign.md'\u6587\u4EF6\u662F\u5426\u5B58\u5728\uFF1A \n - \u5982\u679C'doc/databaseDesign.md'\u6587\u4EF6\u4E0D\u5B58\u5728\uFF0C\u90A3\u5C31\u5148\u521B\u5EFA\u8BE5\u6587\u4EF6\uFF0C\u5C06\u7B2C\u4E00\u6B65\u5206\u6790\u5230\u7684`dbTables`\u6570\u636E\u8868\u548C\u5B57\u6BB5\u6E05\u5355\u8FFD\u52A0\u5230\u8BE5\u6587\u4EF6\u91CC\u9762\u3002\n - \u5982\u679C'doc/databaseDesign.md'\u6587\u4EF6\u5B58\u5728\uFF0C\u90A3\u5C31\u8BFB\u53D6\u8BE5\u6587\u4EF6\uFF0C\u5E76\u6839\u636E\u8BE5\u6587\u4EF6\u91CC\u9762\u7684\u8868\u6E05\u5355\uFF0C\u4E0E\u7B2C\u4E00\u6B65\u68B3\u7406\u51FA\u7684\u6570\u636E\u8868\u548C\u5B57\u6BB5\u8FDB\u884C\u6620\u5C04\uFF1A\n - \u5982\u679C\u5DF2\u6709\u76F8\u7B26\u5B9E\u4F53\uFF0C\u6807\u8BB0\u4E3A\"\u590D\u7528\"\uFF0C\u5E76\u5217\u51FA\u53EF\u80FD\u9700**\u589E\u5220\u6539\u5B57\u6BB5**\u7684\u5B57\u6BB5\u5217\u8868\uFF1B \n - \u5982\u679C\u65E0\u76F8\u7B26\u5B9E\u4F53\uFF0C\u5219\u6807\u8BB0\u4E3A\"\u65B0\u5EFA\"\uFF0C\u5E76\u5B9A\u4E49\u65B0\u8868\u540D\u79F0\u4E0E\u7528\u9014\u3002 \n\n- \u7B2C3\u4E2A\u4EFB\u52A1\uFF1A'.bytefun/backend-design-config.json'\u7684\u5904\u7406\n - \u8BFB\u53D6\u8BE5\u6587\u4EF6\uFF0C\u5E76\u6839\u636E\u8BE5\u6587\u4EF6\u91CC\u9762\u7684\u63A5\u53E3\u6E05\u5355\uFF0C\u4E0E\u7B2C\u4E00\u6B65\u68B3\u7406\u51FA\u7684`apiList`\u63A5\u53E3\u8FDB\u884C\u6620\u5C04\uFF1A\n - \u5982\u679C\u5DF2\u6709\u76F8\u7B26\u63A5\u53E3\uFF0C\u6807\u8BB0\u4E3A\"\u590D\u7528\"\uFF0C\u4E0D\u9700\u8981\u65B0\u589E\u5230'.bytefun/backend-design-config.json'\u6587\u4EF6\u91CC\u9762\uFF1B \n - \u5982\u679C\u65E0\u76F8\u7B26\u63A5\u53E3\uFF0C\u5219\u6807\u8BB0\u4E3A\"\u65B0\u5EFA\"\uFF0C\u9700\u8981\u65B0\u589E\u5230'.bytefun/backend-design-config.json'\u6587\u4EF6\u91CC\u9762\u3002 \n - \u7279\u522B\u6CE8\u610F\u8981\u7ED9\u6BCF\u4E2Aapi\u7684json\u6DFB\u52A0\u4E00\u4E2A`apiId`\u5B57\u6BB5\uFF0C\u5B57\u6BB5\u7684\u503C\u662F\u7531\u968F\u673A\u6570\u5B57\u3001\u968F\u673A\u5C0F\u5199\u5B57\u6BCD\u3001\u968F\u673A\u5927\u5199\u5B57\u6BCD\u4E09\u79CD\u5B57\u7B26\u7EC4\u6210\u768410\u4F4D\u5B57\u7B26\u4E32\uFF0C\u6BD4\u5982\uFF1A`apiId`\uFF1A`4Gd6slkGs3`\uFF0C\u5FC5\u987B\u552F\u4E00\uFF0C\u4E0D\u80FD\u91CD\u590D\u3002\n - \u5728response\u4E2D\uFF0C\u5982\u679C\u5B58\u5728type\u7684\u503C\u662Fobject\u6216array\u65F6\uFF0C\u5FC5\u987B\u5177\u4F53\u5199\u51FA\u6BCF\u4E2A\u5BF9\u8C61\u548C\u5143\u7D20\u7684\u6BCF\u4E2A\u5C5E\u6027\u7684\u540D\u5B57\u548C\u7C7B\u578B\u3002\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD51\uFF1A\n ``` typescript\n \"responses\": {\n \"type\": \"object\",\n \"properties\": {\n \"code\": { \"type\": \"integer\" },\n \"data\": {\n \"type\": \"array\",\n \"description\": \"\u6700\u8FD1\u9605\u8BFB\u4E66\u7C4D\"\n }\n },\n \"description\": \"\u54CD\u5E94\"\n }\n ```\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD51\uFF1A\n ``` typescript\n \"responses\": {\n \"type\": \"object\",\n \"properties\": {\n \"code\": {\n \"type\": \"integer\",\n \"description\": \"\u7F16\u7801 0\u8868\u793A\u6210\u529F\uFF0C\u5176\u4ED6\u503C\u8868\u793A\u5931\u8D25\"\n },\n \"msg\": {\n \"type\": \"string\",\n \"description\": \"\u6D88\u606F\u5185\u5BB9\"\n },\n \"data\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"bookId\": {\n \"type\": \"number\",\n \"description\": \"\u8BBF\u95EE\u4EE4\u724C\"\n },\n \"bookName\": {\n \"type\": \"string\",\n \"description\": \"\u56FE\u4E66\u540D\u79F0\"\n }\n }\n },\n \"description\": \"\u5217\u8868\u6570\u636E\"\n }\n },\n \"description\": \"\u54CD\u5E94\"\n }\n ```\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD52\uFF1A\n ``` typescript\n \"responses\": {\n \"type\": \"object\",\n \"properties\": {\n \"code\": { \"type\": \"integer\" },\n \"data\": {\n \"type\": \"object\"\n \"description\": \"\u4E66\u7C4D\u4FE1\u606F\"\n }\n },\n \"description\": \"\u54CD\u5E94\"\n }\n ```\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD52\uFF1A\n ``` typescript\n \"responses\": {\n \"type\": \"object\",\n \"properties\": {\n \"code\": {\n \"type\": \"integer\",\n \"description\": \"\u7F16\u7801 0\u8868\u793A\u6210\u529F\uFF0C\u5176\u4ED6\u503C\u8868\u793A\u5931\u8D25\"\n },\n \"msg\": {\n \"type\": \"string\",\n \"description\": \"\u6D88\u606F\u5185\u5BB9\"\n },\n \"data\": {\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"type\": \"integer\",\n \"description\": \"\u4E66\u7C4Did\"\n },\n \"name\": {\n \"type\": \"string\",\n \"description\": \"\u4E66\u7C4D\u540D\u79F0\"\n }\n },\n \"description\": \"\u4E66\u7C4D\u4FE1\u606F\u6570\u636E\"\n }\n },\n \"description\": \"\u54CD\u5E94\"\n }\n ```\n\n- \u7B2C4\u4E2A\u4EFB\u52A1\uFF1A\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6\u4E2D\u8BE5\u529F\u80FD\u6A21\u5757\u7684`dbAndApiDesignStatus`\u5B57\u6BB5\u4E3Acompleted\uFF0C\u5FC5\u987B\u662F\u53EA\u4FEE\u6539`dbAndApiDesignStatus`\u5B57\u6BB5\uFF0C\u5176\u4ED6\u5B57\u6BB5\u7981\u6B62\u4FEE\u6539\u3002\n\n## 'doc/databaseDesign.md'\u7684\u683C\u5F0F\uFF1A\n\n```\n# \u5168\u5C40\u6570\u636E\u5E93\u67B6\u6784\n\n**\u6700\u540E\u66F4\u65B0\uFF1A** YYYY\u2011MM\u2011DD \n\n## \u4E00\u3001\u6982\u89C8\n- **\u9879\u76EE\u540D\u79F0\uFF1A** <\u9879\u76EE\u540D>\n- **\u8BF4\u660E\uFF1A** \n \u7B80\u8981\u63CF\u8FF0\u5F53\u524D\u6570\u636E\u5E93\u6574\u4F53\u67B6\u6784\uFF0C\u5305\u62EC\u6838\u5FC3\u5B9E\u4F53\u3001\u4E3B\u8981\u5173\u7CFB\uFF0C\u4EE5\u53CA\u7279\u522B\u6CE8\u610F\u7684\u8BBE\u8BA1\u539F\u5219\uFF08\u5982\u547D\u540D\u89C4\u8303\u3001\u65F6\u533A\u5904\u7406\u3001\u8F6F\u5220\u9664\u7B49\uFF09\u3002\n\n## \u4E8C\u3001\u8868\u6E05\u5355\n\n| \u5E8F\u53F7 | \u8868\u540D | \u63CF\u8FF0 | \u6240\u5C5E\u6A21\u5757 |\n| ---- | -------------- | --------------| ----------|\n| 1 | 'users' | \u7528\u6237\u8868 | \u8D26\u53F7\u6A21\u5757 |\n| 2 | 'products' | \u5546\u54C1\u8868 | \u5546\u54C1\u6A21\u5757 |\n| \u2026 | \u2026 | \u2026 |\n\n## \u4E09\u3001\u8868\u7ED3\u6784\u8BE6\u60C5\n\n### 3.1 'users'\uFF08\u7528\u6237\u8868\uFF09\n- **\u7528\u9014**\uFF1A\u5B58\u50A8\u7CFB\u7EDF\u7528\u6237\u7684\u57FA\u672C\u4FE1\u606F \n- **\u4E3B\u952E**\uFF1A'id' \n- **\u7D22\u5F15**\uFF1A \n - 'idx_users_email' ('email') \n - 'idx_users_created_at' ('created_at')\n\n| \u5B57\u6BB5\u540D | \u7C7B\u578B | \u7EA6\u675F | \u9ED8\u8BA4\u503C | \u63CF\u8FF0 | \u5173\u8054 |\n| ------------- | ---------------------- | -------------------------------- | ------------------------ | -------------------------------- | -------------------------------- |\n| 'id' | BIGINT | PRIMARY KEY, AUTO_INCREMENT | \u2014 | \u7528\u6237\u4E3B\u952E | \u2014 |\n| 'username' | VARCHAR(50) | NOT NULL, UNIQUE | \u2014 | \u767B\u5F55\u7528\u6237\u540D | \u2014 |\n| 'email' | VARCHAR(100) | NOT NULL, UNIQUE | \u2014 | \u90AE\u7BB1 | \u2014 |\n| 'password' | VARCHAR(255) | NOT NULL | \u2014 | \u5BC6\u7801\u6563\u5217 | \u2014 |\n| 'status' | TINYINT | NOT NULL | '1' | \u7528\u6237\u72B6\u6001\uFF080=\u7981\u7528\uFF0C1=\u542F\u7528\uFF09 | \u2014 |\n| 'created_at' | DATETIME | NOT NULL | CURRENT_TIMESTAMP | \u8BB0\u5F55\u521B\u5EFA\u65F6\u95F4 | \u2014 |\n| 'updated_at' | DATETIME | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | \u8BB0\u5F55\u66F4\u65B0\u65F6\u95F4 | \u2014 |\n\n### 3.2 'products'\uFF08\u5546\u54C1\u8868\uFF09\n- **\u7528\u9014**\uFF1A\u2026 \n- **\u4E3B\u952E**\uFF1A'id' \n- **\u7D22\u5F15**\uFF1A\u2026 \n\n| \u5B57\u6BB5\u540D | \u7C7B\u578B | \u7EA6\u675F | \u9ED8\u8BA4\u503C | \u63CF\u8FF0 | \u5173\u8054 |\n| ------------- | ----------- | ------------------ | ----------------- | -------------- | ---------------------- |\n| 'id' | BIGINT | PK, AUTO_INCREMENT | \u2014 | \u5546\u54C1\u4E3B\u952E | \u2014 |\n| 'title' | VARCHAR(200)| NOT NULL | \u2014 | \u5546\u54C1\u6807\u9898 | \u2014 |\n| 'price' | DECIMAL(10,2)| NOT NULL | '0.00' | \u4EF7\u683C | \u2014 |\n| 'created_at' | DATETIME | NOT NULL | CURRENT_TIMESTAMP | \u521B\u5EFA\u65F6\u95F4 | \u2014 |\n| \u2026 | \u2026 | \u2026 | \u2026 | \u2026 | \u2026 |\n\n...\n\n```\n";
2
2
  //# sourceMappingURL=backendCodeDesign.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"backendCodeDesign.d.ts","sourceRoot":"","sources":["../src/backendCodeDesign.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,miWA+FjC,CAAC"}
1
+ {"version":3,"file":"backendCodeDesign.d.ts","sourceRoot":"","sources":["../src/backendCodeDesign.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,swdA6LjC,CAAC"}
@@ -35,6 +35,100 @@ export const backendPromptTemplate = `# 你是一个资深后端架构师 AI 助
35
35
  - 如果已有相符接口,标记为"复用",不需要新增到'.bytefun/backend-design-config.json'文件里面;
36
36
  - 如果无相符接口,则标记为"新建",需要新增到'.bytefun/backend-design-config.json'文件里面。
37
37
  - 特别注意要给每个api的json添加一个\`apiId\`字段,字段的值是由随机数字、随机小写字母、随机大写字母三种字符组成的10位字符串,比如:\`apiId\`:\`4Gd6slkGs3\`,必须唯一,不能重复。
38
+ - 在response中,如果存在type的值是object或array时,必须具体写出每个对象和元素的每个属性的名字和类型。
39
+ - ❌ 错误的写法1:
40
+ \`\`\` typescript
41
+ "responses": {
42
+ "type": "object",
43
+ "properties": {
44
+ "code": { "type": "integer" },
45
+ "data": {
46
+ "type": "array",
47
+ "description": "最近阅读书籍"
48
+ }
49
+ },
50
+ "description": "响应"
51
+ }
52
+ \`\`\`
53
+ - ✅ 正确的写法1:
54
+ \`\`\` typescript
55
+ "responses": {
56
+ "type": "object",
57
+ "properties": {
58
+ "code": {
59
+ "type": "integer",
60
+ "description": "编码 0表示成功,其他值表示失败"
61
+ },
62
+ "msg": {
63
+ "type": "string",
64
+ "description": "消息内容"
65
+ },
66
+ "data": {
67
+ "type": "array",
68
+ "items": {
69
+ "type": "object",
70
+ "properties": {
71
+ "bookId": {
72
+ "type": "number",
73
+ "description": "访问令牌"
74
+ },
75
+ "bookName": {
76
+ "type": "string",
77
+ "description": "图书名称"
78
+ }
79
+ }
80
+ },
81
+ "description": "列表数据"
82
+ }
83
+ },
84
+ "description": "响应"
85
+ }
86
+ \`\`\`
87
+ - ❌ 错误的写法2:
88
+ \`\`\` typescript
89
+ "responses": {
90
+ "type": "object",
91
+ "properties": {
92
+ "code": { "type": "integer" },
93
+ "data": {
94
+ "type": "object"
95
+ "description": "书籍信息"
96
+ }
97
+ },
98
+ "description": "响应"
99
+ }
100
+ \`\`\`
101
+ - ✅ 正确的写法2:
102
+ \`\`\` typescript
103
+ "responses": {
104
+ "type": "object",
105
+ "properties": {
106
+ "code": {
107
+ "type": "integer",
108
+ "description": "编码 0表示成功,其他值表示失败"
109
+ },
110
+ "msg": {
111
+ "type": "string",
112
+ "description": "消息内容"
113
+ },
114
+ "data": {
115
+ "type": "object",
116
+ "properties": {
117
+ "id": {
118
+ "type": "integer",
119
+ "description": "书籍id"
120
+ },
121
+ "name": {
122
+ "type": "string",
123
+ "description": "书籍名称"
124
+ }
125
+ },
126
+ "description": "书籍信息数据"
127
+ }
128
+ },
129
+ "description": "响应"
130
+ }
131
+ \`\`\`
38
132
 
39
133
  - 第4个任务:更新\`doc/前端代码开发进度.json\`文件中该功能模块的\`dbAndApiDesignStatus\`字段为completed,必须是只修改\`dbAndApiDesignStatus\`字段,其他字段禁止修改。
40
134
 
@@ -94,4 +188,4 @@ export const backendPromptTemplate = `# 你是一个资深后端架构师 AI 助
94
188
 
95
189
  \`\`\`
96
190
  `;
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZENvZGVEZXNpZ24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYmFja2VuZENvZGVEZXNpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBK0ZwQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGJhY2tlbmRQcm9tcHRUZW1wbGF0ZSA9IGAjIOS9oOaYr+S4gOS4qui1hOa3seWQjuerr+aetuaehOW4iCBBSSDliqnmiYvvvIzmk4Xplb/mqKHlnZfljJbjgIHlop7ph4/lvI/lnLDmnoTlu7rmlbDmja7lupPkuI7mjqXlj6Porr7orqHvvIzkuKXmoLzmjInnhadcXGDmiafooYzmraXpqqRcXGDlrozmiJDmlbDmja7lupPlkozmjqXlj6Porr7orqHku7vliqHvvIzlpoLmnpzor6Xlip/og73mqKHlnZfkuI3pnIDopoHku7vkvZVBUEnmjqXlj6PvvIzpgqPkuYjnm7TmjqXnu5PmnZ/ku7vliqHjgIIgXG5cbiMjICoq5b+F6aG76KaB5Lil5qC85oyJ54WnXFxg5omn6KGM5q2l6aqkXFxg44CBJ2RvYy9kYXRhYmFzZURlc2lnbi5tZCfnmoTmoLzlvI/jgIEnLmJ5dGVmdW4vYmFja2VuZC1kZXNpZ24tY29uZmlnLmpzb24n55qE5qC85byP6L+b6KGM6L+95Yqg5YaF5a656L+b5Y6777yM5aaC5p6c6K+l5Yqf6IO95qih5Z2X5LiN6ZyA6KaB5Lu75L2VQVBJ5o6l5Y+j77yM6YKj5LmI55u05o6l57uT5p2f5Lu75YqhKipcblxuIyMg5aaC5p6c55So5oi35rKh5pyJ5piO56Gu55u45YWz6K+05piO77yM6K+35Lil5qC86YG15a6I5Lul5LiL5ZCO56uv5bi46KeE6K6+6K6h57uP6aqMXG5cbiMjIyDlvJXlr7zpobVcbi0g55So5oi35piv5ZCm55yL6L+H5byV5a+86aG15Y+q5a2Y5pys5Zyw5Y2z5Y+v77yM5LiN6ZyA6KaB5ZCO56uv5a2Y5YKo5Yiw5pWw5o2u44CCXG4tIOWmguaenOW8leWvvOmhteWPquaYr+W3puWPs+a7keWKqOeahHZpZXdQYWdlcu+8jOaYr+WxleekuuS/oeaBr+e7meeUqOaIt+eahO+8jOmCo+S5iOS4jemcgOimgeeUqOaIt+WBj+WlveebuOWFs+eahOWQjuerr+aOpeWPo+WSjOaVsOaNruW6k+WtmOWCqOOAglxuXG4jIyAqKuaJp+ihjOiuvuiuoe+8muiuvuiuoemDveW/hemhu+iwg+eUqCB0b2RvX3dyaXRlIOW3peWFt+WIm+W7uuS7peS4iyA0IOS4quS7u+WKoeWIl+ihqO+8jOWIm+W7uuWujOaIkOWQjuW/hemhu+ehruiupO+8muWmguaenOS7u+WKoeaVsOmHj+S4jeaYr+S7peS4iyA0IOS4quS7u+WKoeWIl+ihqO+8jOeri+WNs+aKpemUmeW5tumHjeaWsOWIm+W7uuOAgioqXG5cbi0g56ysMeS4quS7u+WKoe+8mioq44CQ5qC45b+D44CR5LuF6ZKI5a+55b2T5YmN5Yqf6IO95qih5Z2X55qE5pWw5o2u6ZyA5rGC5qKz55CG77yI5Lil5qC85omn6KGM77yJ77yM57ud5a+55LiN6IO95YG35oeS77yB5aaC5p6c6K+l5Yqf6IO95qih5Z2X5LiN6ZyA6KaB5Lu75L2VQVBJ5o6l5Y+j77yM6YKj5LmI55u05o6l57uT5p2f5Lu75Yqh44CCKipcbiAgICAtIDHjgIHor7vlj5bor6XmqKHlnZfnmoQnLmJ5dGVmdW4veHh45qih5Z2X5Lia5Yqh6YC76L6R6K6+6K6hLm1kJ+aWh+S7tu+8jOW+l+WIsOaJgOaciemhtemdouWIl+ihqFxcYHBhZ2VUYXNrTGlzdFxcYFxuICAgIC0gMuOAgemBjeWOhlxcYHBhZ2VUYXNrTGlzdFxcYOmhtemdouWIl+ihqOaJp+ihjOS7peS4i+S7u+WKoe+8mlxuICAgICAgICAgbGV0IGRiVGFibGVzID0gW107XG4gICAgICAgICBsZXQgYXBpTGlzdCA9IFtdO1xuICAgICAgICAgZm9yIChsZXQgcGFnZSBvZiBwYWdlVGFza0xpc3QpIHtcbiAgICAgICAgICAgIC0gMy4x44CB6K+75Y+W6K+l5qih5Z2X5LiL55qE5omA5pyJJ3NyYy94eHgo5qih5Z2X5ZCN5a2XKS94eHhQYWdlL3h4eFBhZ2UubWQn5paH5Lu277yM5qC55o2uSFRNTOS4reWunumZheaYvuekuueahOWGheWuueWFg+e0oO+8iOWmgu+8mueUqOaIt+WktOWDj+OAgeWVhuWTgeagh+mimOOAgeW4luWtkOWGheWuue+8ieWIneatpeais+eQhuWHuuaJgOmcgOeahOaVsOaNruihqOWSjOWtl+auteOAglxuICAgICAgICAgICAgLSAzLjLjgIHor7vlj5bor6XmqKHlnZfkuIvnmoTmiYDmnIknc3JjL3h4eCjmqKHlnZflkI3lrZcpL3h4eFBhZ2UvY29kZURlc2lnbi5tZCfmlofku7bkuK3mj4/ov7DnmoTkuJrliqHpgLvovpHkuI7mjqXlj6NBUEnvvIzooaXlhYXmorPnkIblh7rmiYDpnIDnmoTmlbDmja7ooajlkozlrZfmrrXjgIJcbiAgICAgICAgICAgIC0gMy4z44CB5bCG5pWw5o2u6KGo5ZKM5a2X5q615re75Yqg5YiwXFxgZGJUYWJsZXNcXGDmlbDnu4TkuK1cbiAgICAgICAgICAgIC0gMy4044CB5bCG5o6l5Y+jQVBJ5re75Yqg5YiwXFxgYXBpTGlzdFxcYOaVsOe7hOS4rVxuICAgICAgICAgfVxuICAgIC0gM+OAgeais+eQhuWHuuivpemhtemdouaJgOmcgOeahGFwaeaOpeWPo+a4heWNle+8jOWmguaenOmhtemdouayoeaciea2ieWPiuWIsOS7u+S9lUFQSee9kee7nOivt+axgu+8jOmCo+WwsemprOS4iuWujOaIkOatpOasoeS7u+WKoe+8jOeEtuWQjuaPkOekuueUqOaIt3h4eOmhtemdoi/mqKHlnZfmsqHmnInmtonlj4rliLDku7vkvZXnvZHnu5zor7fmsYLvvIznhLblkI7lgZzmraLor6XmrKFBSeS8muivneOAglxuICAgIC0gNOOAgeacgOe7iOi+k+WHuuaVsOaNruW6k+ihqFxcYGRiVGFibGVzXFxg5ZKMYXBp5o6l5Y+j5riF5Y2VXFxgYXBpTGlzdFxcYOOAglxuXG4tIOesrDLkuKrku7vliqHvvJrmn6XnnIsnZG9jL2RhdGFiYXNlRGVzaWduLm1kJ+aWh+S7tuaYr+WQpuWtmOWcqO+8miAgXG4gICAgICAgLSDlpoLmnpwnZG9jL2RhdGFiYXNlRGVzaWduLm1kJ+aWh+S7tuS4jeWtmOWcqO+8jOmCo+WwseWFiOWIm+W7uuivpeaWh+S7tu+8jOWwhuesrOS4gOatpeWIhuaekOWIsOeahFxcYGRiVGFibGVzXFxg5pWw5o2u6KGo5ZKM5a2X5q615riF5Y2V6L+95Yqg5Yiw6K+l5paH5Lu26YeM6Z2i44CCXG4gICAgICAgLSDlpoLmnpwnZG9jL2RhdGFiYXNlRGVzaWduLm1kJ+aWh+S7tuWtmOWcqO+8jOmCo+Wwseivu+WPluivpeaWh+S7tu+8jOW5tuagueaNruivpeaWh+S7tumHjOmdoueahOihqOa4heWNle+8jOS4juesrOS4gOatpeais+eQhuWHuueahOaVsOaNruihqOWSjOWtl+autei/m+ihjOaYoOWwhO+8mlxuICAgICAgICAgICAgLSDlpoLmnpzlt7LmnInnm7jnrKblrp7kvZPvvIzmoIforrDkuLpcIuWkjeeUqFwi77yM5bm25YiX5Ye65Y+v6IO96ZyAKirlop7liKDmlLnlrZfmrrUqKueahOWtl+auteWIl+ihqO+8myAgXG4gICAgICAgICAgICAtIOWmguaenOaXoOebuOespuWunuS9k++8jOWImeagh+iusOS4ulwi5paw5bu6XCLvvIzlubblrprkuYnmlrDooajlkI3np7DkuI7nlKjpgJTjgIIgXG5cbi0g56ysM+S4quS7u+WKoe+8micuYnl0ZWZ1bi9iYWNrZW5kLWRlc2lnbi1jb25maWcuanNvbifnmoTlpITnkIZcbiAgICAtIOivu+WPluivpeaWh+S7tu+8jOW5tuagueaNruivpeaWh+S7tumHjOmdoueahOaOpeWPo+a4heWNle+8jOS4juesrOS4gOatpeais+eQhuWHuueahFxcYGFwaUxpc3RcXGDmjqXlj6Pov5vooYzmmKDlsITvvJpcbiAgICAgICAgLSDlpoLmnpzlt7LmnInnm7jnrKbmjqXlj6PvvIzmoIforrDkuLpcIuWkjeeUqFwi77yM5LiN6ZyA6KaB5paw5aKe5YiwJy5ieXRlZnVuL2JhY2tlbmQtZGVzaWduLWNvbmZpZy5qc29uJ+aWh+S7tumHjOmdou+8myAgXG4gICAgICAgIC0g5aaC5p6c5peg55u456ym5o6l5Y+j77yM5YiZ5qCH6K6w5Li6XCLmlrDlu7pcIu+8jOmcgOimgeaWsOWinuWIsCcuYnl0ZWZ1bi9iYWNrZW5kLWRlc2lnbi1jb25maWcuanNvbifmlofku7bph4zpnaLjgIIgXG4gICAgLSDnibnliKvms6jmhI/opoHnu5nmr4/kuKphcGnnmoRqc29u5re75Yqg5LiA5LiqXFxgYXBpSWRcXGDlrZfmrrXvvIzlrZfmrrXnmoTlgLzmmK/nlLHpmo/mnLrmlbDlrZfjgIHpmo/mnLrlsI/lhpnlrZfmr43jgIHpmo/mnLrlpKflhpnlrZfmr43kuInnp43lrZfnrKbnu4TmiJDnmoQxMOS9jeWtl+espuS4su+8jOavlOWmgu+8mlxcYGFwaUlkXFxg77yaXFxgNEdkNnNsa0dzM1xcYO+8jOW/hemhu+WUr+S4gO+8jOS4jeiDvemHjeWkjeOAglxuXG4tIOesrDTkuKrku7vliqHvvJrmm7TmlrBcXGBkb2Mv5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGDmlofku7bkuK3or6Xlip/og73mqKHlnZfnmoRcXGBkYkFuZEFwaURlc2lnblN0YXR1c1xcYOWtl+auteS4umNvbXBsZXRlZO+8jOW/hemhu+aYr+WPquS/ruaUuVxcYGRiQW5kQXBpRGVzaWduU3RhdHVzXFxg5a2X5q6177yM5YW25LuW5a2X5q6156aB5q2i5L+u5pS544CCXG5cbiMjICdkb2MvZGF0YWJhc2VEZXNpZ24ubWQn55qE5qC85byP77yaXG5cblxcYFxcYFxcYFxuIyDlhajlsYDmlbDmja7lupPmnrbmnoRcblxuKirmnIDlkI7mm7TmlrDvvJoqKiBZWVlZ4oCRTU3igJFERCAgXG5cbiMjIOS4gOOAgeamguiniFxuLSAqKumhueebruWQjeensO+8mioqIDzpobnnm67lkI0+XG4tICoq6K+05piO77yaKiogIFxuICDnroDopoHmj4/ov7DlvZPliY3mlbDmja7lupPmlbTkvZPmnrbmnoTvvIzljIXmi6zmoLjlv4Plrp7kvZPjgIHkuLvopoHlhbPns7vvvIzku6Xlj4rnibnliKvms6jmhI/nmoTorr7orqHljp/liJnvvIjlpoLlkb3lkI3op4TojIPjgIHml7bljLrlpITnkIbjgIHova/liKDpmaTnrYnvvInjgIJcblxuIyMg5LqM44CB6KGo5riF5Y2VXG5cbnwg5bqP5Y+3IHwg6KGo5ZCNICAgICAgICAgICAgfCDmj4/ov7AgICAgICAgICAgIHwg5omA5bGe5qih5Z2XICAgfFxufCAtLS0tIHwgLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tLXxcbnwgMSAgICB8ICd1c2VycycgICAgICAgIHwg55So5oi36KGoICAgICAgICAgfCDotKblj7fmqKHlnZcgICAgfFxufCAyICAgIHwgJ3Byb2R1Y3RzJyAgICAgfCDllYblk4HooaggICAgICAgICB8IOWVhuWTgeaooeWdlyAgICB8XG58IOKApiAgICB8IOKApiAgICAgICAgICAgICAgfCDigKYgICAgICAgICAgICAgfFxuXG4jIyDkuInjgIHooajnu5PmnoTor6bmg4VcblxuIyMjIDMuMSAndXNlcnMn77yI55So5oi36KGo77yJXG4tICoq55So6YCUKirvvJrlrZjlgqjns7vnu5/nlKjmiLfnmoTln7rmnKzkv6Hmga8gIFxuLSAqKuS4u+mUrioq77yaJ2lkJyAgXG4tICoq57Si5byVKirvvJogIFxuICAtICdpZHhfdXNlcnNfZW1haWwnICgnZW1haWwnKSAgXG4gIC0gJ2lkeF91c2Vyc19jcmVhdGVkX2F0JyAoJ2NyZWF0ZWRfYXQnKVxuXG58IOWtl+auteWQjSAgICAgICAgfCDnsbvlnosgICAgICAgICAgICAgICAgICAgfCDnuqbmnZ8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg6buY6K6k5YC8ICAgICAgICAgICAgICAgICAgIHwg5o+P6L+wICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IOWFs+iBlCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxufCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG58ICdpZCcgICAgICAgICAgfCBCSUdJTlQgICAgICAgICAgICAgICAgIHwgUFJJTUFSWSBLRVksIEFVVE9fSU5DUkVNRU5UICAgICAgfCDigJQgICAgICAgICAgICAgICAgICAgICAgICB8IOeUqOaIt+S4u+mUriAgICAgICAgICAgICAgICAgICAgICAgICB8IOKAlCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxufCAndXNlcm5hbWUnICAgIHwgVkFSQ0hBUig1MCkgICAgICAgICAgICB8IE5PVCBOVUxMLCBVTklRVUUgICAgICAgICAgICAgICAgIHwg4oCUICAgICAgICAgICAgICAgICAgICAgICAgfCDnmbvlvZXnlKjmiLflkI0gICAgICAgICAgICAgICAgICAgICAgIHwg4oCUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG58ICdlbWFpbCcgICAgICAgfCBWQVJDSEFSKDEwMCkgICAgICAgICAgIHwgTk9UIE5VTEwsIFVOSVFVRSAgICAgICAgICAgICAgICAgfCDigJQgICAgICAgICAgICAgICAgICAgICAgICB8IOmCrueusSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDigJQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgJ3Bhc3N3b3JkJyAgICB8IFZBUkNIQVIoMjU1KSAgICAgICAgICAgfCBOT1QgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICB8IOKAlCAgICAgICAgICAgICAgICAgICAgICAgIHwg5a+G56CB5pWj5YiXICAgICAgICAgICAgICAgICAgICAgICAgIHwg4oCUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG58ICdzdGF0dXMnICAgICAgfCBUSU5ZSU5UICAgICAgICAgICAgICAgIHwgTk9UIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgfCAnMScgICAgICAgICAgICAgICAgICAgICAgfCDnlKjmiLfnirbmgIHvvIgwPeemgeeUqO+8jDE95ZCv55So77yJICAgICAgICB8IOKAlCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxufCAnY3JlYXRlZF9hdCcgIHwgREFURVRJTUUgICAgICAgICAgICAgICB8IE5PVCBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ1VSUkVOVF9USU1FU1RBTVAgICAgICAgIHwg6K6w5b2V5Yib5bu65pe26Ze0ICAgICAgICAgICAgICAgICAgICAgfCDigJQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgJ3VwZGF0ZWRfYXQnICB8IERBVEVUSU1FICAgICAgICAgICAgICAgfCBOT1QgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICB8IENVUlJFTlRfVElNRVNUQU1QIE9OIFVQREFURSBDVVJSRU5UX1RJTUVTVEFNUCB8IOiusOW9leabtOaWsOaXtumXtCAgICAgICAgICAgICAgICAgICAgIHwg4oCUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG5cbiMjIyAzLjIgJ3Byb2R1Y3RzJ++8iOWVhuWTgeihqO+8iVxuLSAqKueUqOmAlCoq77ya4oCmICBcbi0gKirkuLvplK4qKu+8midpZCcgIFxuLSAqKue0ouW8lSoq77ya4oCmICBcblxufCDlrZfmrrXlkI0gICAgICAgIHwg57G75Z6LICAgICAgICB8IOe6puadnyAgICAgICAgICAgICAgIHwg6buY6K6k5YC8ICAgICAgICAgICAgfCDmj4/ov7AgICAgICAgICAgIHwg5YWz6IGUICAgICAgICAgICAgICAgICAgIHxcbnwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxufCAnaWQnICAgICAgICAgIHwgQklHSU5UICAgICAgfCBQSywgQVVUT19JTkNSRU1FTlQgfCDigJQgICAgICAgICAgICAgICAgIHwg5ZWG5ZOB5Li76ZSuICAgICAgIHwg4oCUICAgICAgICAgICAgICAgICAgICAgIHxcbnwgJ3RpdGxlJyAgICAgICB8IFZBUkNIQVIoMjAwKXwgTk9UIE5VTEwgICAgICAgICAgIHwg4oCUICAgICAgICAgICAgICAgICB8IOWVhuWTgeagh+mimCAgICAgICB8IOKAlCAgICAgICAgICAgICAgICAgICAgICB8XG58ICdwcmljZScgICAgICAgfCBERUNJTUFMKDEwLDIpfCBOT1QgTlVMTCAgICAgICAgICB8ICcwLjAwJyAgICAgICAgICAgIHwg5Lu35qC8ICAgICAgICAgICB8IOKAlCAgICAgICAgICAgICAgICAgICAgICB8XG58ICdjcmVhdGVkX2F0JyAgfCBEQVRFVElNRSAgICB8IE5PVCBOVUxMICAgICAgICAgICB8IENVUlJFTlRfVElNRVNUQU1QIHwg5Yib5bu65pe26Ze0ICAgICAgIHwg4oCUICAgICAgICAgICAgICAgICAgICAgIHxcbnwg4oCmICAgICAgICAgICAgIHwg4oCmICAgICAgICAgICB8IOKApiAgICAgICAgICAgICAgICAgIHwg4oCmICAgICAgICAgICAgICAgICB8IOKApiAgICAgICAgICAgICAgfCDigKYgICAgICAgICAgICAgICAgICAgICAgfFxuXG4uLi5cblxuXFxgXFxgXFxgXG5gOyJdfQ==
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZENvZGVEZXNpZ24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYmFja2VuZENvZGVEZXNpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTZMcEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBiYWNrZW5kUHJvbXB0VGVtcGxhdGUgPSBgIyDkvaDmmK/kuIDkuKrotYTmt7HlkI7nq6/mnrbmnoTluIggQUkg5Yqp5omL77yM5pOF6ZW/5qih5Z2X5YyW44CB5aKe6YeP5byP5Zyw5p6E5bu65pWw5o2u5bqT5LiO5o6l5Y+j6K6+6K6h77yM5Lil5qC85oyJ54WnXFxg5omn6KGM5q2l6aqkXFxg5a6M5oiQ5pWw5o2u5bqT5ZKM5o6l5Y+j6K6+6K6h5Lu75Yqh77yM5aaC5p6c6K+l5Yqf6IO95qih5Z2X5LiN6ZyA6KaB5Lu75L2VQVBJ5o6l5Y+j77yM6YKj5LmI55u05o6l57uT5p2f5Lu75Yqh44CCIFxuXG4jIyAqKuW/hemhu+imgeS4peagvOaMieeFp1xcYOaJp+ihjOatpemqpFxcYOOAgSdkb2MvZGF0YWJhc2VEZXNpZ24ubWQn55qE5qC85byP44CBJy5ieXRlZnVuL2JhY2tlbmQtZGVzaWduLWNvbmZpZy5qc29uJ+eahOagvOW8j+i/m+ihjOi/veWKoOWGheWuuei/m+WOu++8jOWmguaenOivpeWKn+iDveaooeWdl+S4jemcgOimgeS7u+S9lUFQSeaOpeWPo++8jOmCo+S5iOebtOaOpee7k+adn+S7u+WKoSoqXG5cbiMjIOWmguaenOeUqOaIt+ayoeacieaYjuehruebuOWFs+ivtOaYju+8jOivt+S4peagvOmBteWuiOS7peS4i+WQjuerr+W4uOinhOiuvuiuoee7j+mqjFxuXG4jIyMg5byV5a+86aG1XG4tIOeUqOaIt+aYr+WQpueci+i/h+W8leWvvOmhteWPquWtmOacrOWcsOWNs+WPr++8jOS4jemcgOimgeWQjuerr+WtmOWCqOWIsOaVsOaNruOAglxuLSDlpoLmnpzlvJXlr7zpobXlj6rmmK/lt6blj7Pmu5HliqjnmoR2aWV3UGFnZXLvvIzmmK/lsZXnpLrkv6Hmga/nu5nnlKjmiLfnmoTvvIzpgqPkuYjkuI3pnIDopoHnlKjmiLflgY/lpb3nm7jlhbPnmoTlkI7nq6/mjqXlj6PlkozmlbDmja7lupPlrZjlgqjjgIJcblxuIyMgKirmiafooYzorr7orqHvvJrorr7orqHpg73lv4XpobvosIPnlKggdG9kb193cml0ZSDlt6XlhbfliJvlu7rku6XkuIsgNCDkuKrku7vliqHliJfooajvvIzliJvlu7rlrozmiJDlkI7lv4Xpobvnoa7orqTvvJrlpoLmnpzku7vliqHmlbDph4/kuI3mmK/ku6XkuIsgNCDkuKrku7vliqHliJfooajvvIznq4vljbPmiqXplJnlubbph43mlrDliJvlu7rjgIIqKlxuXG4tIOesrDHkuKrku7vliqHvvJoqKuOAkOaguOW/g+OAkeS7hemSiOWvueW9k+WJjeWKn+iDveaooeWdl+eahOaVsOaNrumcgOaxguais+eQhu+8iOS4peagvOaJp+ihjO+8ie+8jOe7neWvueS4jeiDveWBt+aHku+8geWmguaenOivpeWKn+iDveaooeWdl+S4jemcgOimgeS7u+S9lUFQSeaOpeWPo++8jOmCo+S5iOebtOaOpee7k+adn+S7u+WKoeOAgioqXG4gICAgLSAx44CB6K+75Y+W6K+l5qih5Z2X55qEJy5ieXRlZnVuL3h4eOaooeWdl+S4muWKoemAu+i+keiuvuiuoS5tZCfmlofku7bvvIzlvpfliLDmiYDmnInpobXpnaLliJfooahcXGBwYWdlVGFza0xpc3RcXGBcbiAgICAtIDLjgIHpgY3ljoZcXGBwYWdlVGFza0xpc3RcXGDpobXpnaLliJfooajmiafooYzku6XkuIvku7vliqHvvJpcbiAgICAgICAgIGxldCBkYlRhYmxlcyA9IFtdO1xuICAgICAgICAgbGV0IGFwaUxpc3QgPSBbXTtcbiAgICAgICAgIGZvciAobGV0IHBhZ2Ugb2YgcGFnZVRhc2tMaXN0KSB7XG4gICAgICAgICAgICAtIDMuMeOAgeivu+WPluivpeaooeWdl+S4i+eahOaJgOaciSdzcmMveHh4KOaooeWdl+WQjeWtlykveHh4UGFnZS94eHhQYWdlLm1kJ+aWh+S7tu+8jOagueaNrkhUTUzkuK3lrp7pmYXmmL7npLrnmoTlhoXlrrnlhYPntKDvvIjlpoLvvJrnlKjmiLflpLTlg4/jgIHllYblk4HmoIfpopjjgIHluJblrZDlhoXlrrnvvInliJ3mraXmorPnkIblh7rmiYDpnIDnmoTmlbDmja7ooajlkozlrZfmrrXjgIJcbiAgICAgICAgICAgIC0gMy4y44CB6K+75Y+W6K+l5qih5Z2X5LiL55qE5omA5pyJJ3NyYy94eHgo5qih5Z2X5ZCN5a2XKS94eHhQYWdlL2NvZGVEZXNpZ24ubWQn5paH5Lu25Lit5o+P6L+w55qE5Lia5Yqh6YC76L6R5LiO5o6l5Y+jQVBJ77yM6KGl5YWF5qKz55CG5Ye65omA6ZyA55qE5pWw5o2u6KGo5ZKM5a2X5q6144CCXG4gICAgICAgICAgICAtIDMuM+OAgeWwhuaVsOaNruihqOWSjOWtl+autea3u+WKoOWIsFxcYGRiVGFibGVzXFxg5pWw57uE5LitXG4gICAgICAgICAgICAtIDMuNOOAgeWwhuaOpeWPo0FQSea3u+WKoOWIsFxcYGFwaUxpc3RcXGDmlbDnu4TkuK1cbiAgICAgICAgIH1cbiAgICAtIDPjgIHmorPnkIblh7ror6XpobXpnaLmiYDpnIDnmoRhcGnmjqXlj6PmuIXljZXvvIzlpoLmnpzpobXpnaLmsqHmnInmtonlj4rliLDku7vkvZVBUEnnvZHnu5zor7fmsYLvvIzpgqPlsLHpqazkuIrlrozmiJDmraTmrKHku7vliqHvvIznhLblkI7mj5DnpLrnlKjmiLd4eHjpobXpnaIv5qih5Z2X5rKh5pyJ5raJ5Y+K5Yiw5Lu75L2V572R57uc6K+35rGC77yM54S25ZCO5YGc5q2i6K+l5qyhQUnkvJror53jgIJcbiAgICAtIDTjgIHmnIDnu4jovpPlh7rmlbDmja7lupPooahcXGBkYlRhYmxlc1xcYOWSjGFwaeaOpeWPo+a4heWNlVxcYGFwaUxpc3RcXGDjgIJcblxuLSDnrKwy5Liq5Lu75Yqh77ya5p+l55yLJ2RvYy9kYXRhYmFzZURlc2lnbi5tZCfmlofku7bmmK/lkKblrZjlnKjvvJogIFxuICAgICAgIC0g5aaC5p6cJ2RvYy9kYXRhYmFzZURlc2lnbi5tZCfmlofku7bkuI3lrZjlnKjvvIzpgqPlsLHlhYjliJvlu7ror6Xmlofku7bvvIzlsIbnrKzkuIDmraXliIbmnpDliLDnmoRcXGBkYlRhYmxlc1xcYOaVsOaNruihqOWSjOWtl+autea4heWNlei/veWKoOWIsOivpeaWh+S7tumHjOmdouOAglxuICAgICAgIC0g5aaC5p6cJ2RvYy9kYXRhYmFzZURlc2lnbi5tZCfmlofku7blrZjlnKjvvIzpgqPlsLHor7vlj5bor6Xmlofku7bvvIzlubbmoLnmja7or6Xmlofku7bph4zpnaLnmoTooajmuIXljZXvvIzkuI7nrKzkuIDmraXmorPnkIblh7rnmoTmlbDmja7ooajlkozlrZfmrrXov5vooYzmmKDlsITvvJpcbiAgICAgICAgICAgIC0g5aaC5p6c5bey5pyJ55u456ym5a6e5L2T77yM5qCH6K6w5Li6XCLlpI3nlKhcIu+8jOW5tuWIl+WHuuWPr+iDvemcgCoq5aKe5Yig5pS55a2X5q61KirnmoTlrZfmrrXliJfooajvvJsgIFxuICAgICAgICAgICAgLSDlpoLmnpzml6Dnm7jnrKblrp7kvZPvvIzliJnmoIforrDkuLpcIuaWsOW7ulwi77yM5bm25a6a5LmJ5paw6KGo5ZCN56ew5LiO55So6YCU44CCIFxuXG4tIOesrDPkuKrku7vliqHvvJonLmJ5dGVmdW4vYmFja2VuZC1kZXNpZ24tY29uZmlnLmpzb24n55qE5aSE55CGXG4gICAgLSDor7vlj5bor6Xmlofku7bvvIzlubbmoLnmja7or6Xmlofku7bph4zpnaLnmoTmjqXlj6PmuIXljZXvvIzkuI7nrKzkuIDmraXmorPnkIblh7rnmoRcXGBhcGlMaXN0XFxg5o6l5Y+j6L+b6KGM5pig5bCE77yaXG4gICAgICAgIC0g5aaC5p6c5bey5pyJ55u456ym5o6l5Y+j77yM5qCH6K6w5Li6XCLlpI3nlKhcIu+8jOS4jemcgOimgeaWsOWinuWIsCcuYnl0ZWZ1bi9iYWNrZW5kLWRlc2lnbi1jb25maWcuanNvbifmlofku7bph4zpnaLvvJsgIFxuICAgICAgICAtIOWmguaenOaXoOebuOespuaOpeWPo++8jOWImeagh+iusOS4ulwi5paw5bu6XCLvvIzpnIDopoHmlrDlop7liLAnLmJ5dGVmdW4vYmFja2VuZC1kZXNpZ24tY29uZmlnLmpzb24n5paH5Lu26YeM6Z2i44CCIFxuICAgIC0g54m55Yir5rOo5oSP6KaB57uZ5q+P5LiqYXBp55qEanNvbua3u+WKoOS4gOS4qlxcYGFwaUlkXFxg5a2X5q6177yM5a2X5q6155qE5YC85piv55Sx6ZqP5py65pWw5a2X44CB6ZqP5py65bCP5YaZ5a2X5q+N44CB6ZqP5py65aSn5YaZ5a2X5q+N5LiJ56eN5a2X56ym57uE5oiQ55qEMTDkvY3lrZfnrKbkuLLvvIzmr5TlpoLvvJpcXGBhcGlJZFxcYO+8mlxcYDRHZDZzbGtHczNcXGDvvIzlv4XpobvllK/kuIDvvIzkuI3og73ph43lpI3jgIJcbiAgICAtIOWcqHJlc3BvbnNl5Lit77yM5aaC5p6c5a2Y5ZyodHlwZeeahOWAvOaYr29iamVjdOaIlmFycmF55pe277yM5b+F6aG75YW35L2T5YaZ5Ye65q+P5Liq5a+56LGh5ZKM5YWD57Sg55qE5q+P5Liq5bGe5oCn55qE5ZCN5a2X5ZKM57G75Z6L44CCXG4gICAgICAtIOKdjCDplJnor6/nmoTlhpnms5Ux77yaXG4gICAgICAgIFxcYFxcYFxcYCB0eXBlc2NyaXB0XG4gICAgICAgIFwicmVzcG9uc2VzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgXCJjb2RlXCI6IHsgXCJ0eXBlXCI6IFwiaW50ZWdlclwiIH0sXG4gICAgICAgICAgICAgIFwiZGF0YVwiOiB7XG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwi5pyA6L+R6ZiF6K+75Lmm57GNXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCLlk43lupRcIlxuICAgICAgICAgIH1cbiAgICAgICAgXFxgXFxgXFxgXG4gICAgICAtIOKchSDmraPnoa7nmoTlhpnms5Ux77yaXG4gICAgICAgIFxcYFxcYFxcYCB0eXBlc2NyaXB0XG4gICAgICAgIFwicmVzcG9uc2VzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgICBcImNvZGVcIjoge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCLnvJbnoIEgMOihqOekuuaIkOWKn++8jOWFtuS7luWAvOihqOekuuWksei0pVwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIm1zZ1wiOiB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwi5raI5oGv5YaF5a65XCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiZGF0YVwiOiB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYm9va0lkXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCLorr/pl67ku6TniYxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJib29rTmFtZVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwi5Zu+5Lmm5ZCN56ewXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCLliJfooajmlbDmja5cIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwi5ZON5bqUXCJcbiAgICAgICAgfVxuICAgICAgICBcXGBcXGBcXGBcbiAgICAgIC0g4p2MIOmUmeivr+eahOWGmeazlTLvvJpcbiAgICAgICAgXFxgXFxgXFxgIHR5cGVzY3JpcHRcbiAgICAgICAgXCJyZXNwb25zZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICBcImNvZGVcIjogeyBcInR5cGVcIjogXCJpbnRlZ2VyXCIgfSxcbiAgICAgICAgICAgICAgXCJkYXRhXCI6IHtcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIlxuICAgICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCLkuabnsY3kv6Hmga9cIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIuWTjeW6lFwiXG4gICAgICAgICAgfVxuICAgICAgICBcXGBcXGBcXGBcbiAgICAgIC0g4pyFIOato+ehrueahOWGmeazlTLvvJpcbiAgICAgICAgXFxgXFxgXFxgIHR5cGVzY3JpcHRcbiAgICAgICAgXCJyZXNwb25zZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICAgIFwiY29kZVwiOiB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIue8lueggSAw6KGo56S65oiQ5Yqf77yM5YW25LuW5YC86KGo56S65aSx6LSlXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwibXNnXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCLmtojmga/lhoXlrrlcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJkYXRhXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIuS5puexjWlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCLkuabnsY3lkI3np7BcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwi5Lmm57GN5L+h5oGv5pWw5o2uXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIuWTjeW6lFwiXG4gICAgICAgIH1cbiAgICAgICAgXFxgXFxgXFxgXG5cbi0g56ysNOS4quS7u+WKoe+8muabtOaWsFxcYGRvYy/liY3nq6/ku6PnoIHlvIDlj5Hov5vluqYuanNvblxcYOaWh+S7tuS4reivpeWKn+iDveaooeWdl+eahFxcYGRiQW5kQXBpRGVzaWduU3RhdHVzXFxg5a2X5q615Li6Y29tcGxldGVk77yM5b+F6aG75piv5Y+q5L+u5pS5XFxgZGJBbmRBcGlEZXNpZ25TdGF0dXNcXGDlrZfmrrXvvIzlhbbku5blrZfmrrXnpoHmraLkv67mlLnjgIJcblxuIyMgJ2RvYy9kYXRhYmFzZURlc2lnbi5tZCfnmoTmoLzlvI/vvJpcblxuXFxgXFxgXFxgXG4jIOWFqOWxgOaVsOaNruW6k+aetuaehFxuXG4qKuacgOWQjuabtOaWsO+8mioqIFlZWVnigJFNTeKAkUREICBcblxuIyMg5LiA44CB5qaC6KeIXG4tICoq6aG555uu5ZCN56ew77yaKiogPOmhueebruWQjT5cbi0gKiror7TmmI7vvJoqKiAgXG4gIOeugOimgeaPj+i/sOW9k+WJjeaVsOaNruW6k+aVtOS9k+aetuaehO+8jOWMheaLrOaguOW/g+WunuS9k+OAgeS4u+imgeWFs+ezu++8jOS7peWPiueJueWIq+azqOaEj+eahOiuvuiuoeWOn+WIme+8iOWmguWRveWQjeinhOiMg+OAgeaXtuWMuuWkhOeQhuOAgei9r+WIoOmZpOetie+8ieOAglxuXG4jIyDkuozjgIHooajmuIXljZVcblxufCDluo/lj7cgfCDooajlkI0gICAgICAgICAgICB8IOaPj+i/sCAgICAgICAgICAgfCDmiYDlsZ7mqKHlnZcgICB8XG58IC0tLS0gfCAtLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0tfFxufCAxICAgIHwgJ3VzZXJzJyAgICAgICAgfCDnlKjmiLfooaggICAgICAgICB8IOi0puWPt+aooeWdlyAgICB8XG58IDIgICAgfCAncHJvZHVjdHMnICAgICB8IOWVhuWTgeihqCAgICAgICAgIHwg5ZWG5ZOB5qih5Z2XICAgIHxcbnwg4oCmICAgIHwg4oCmICAgICAgICAgICAgICB8IOKApiAgICAgICAgICAgICB8XG5cbiMjIOS4ieOAgeihqOe7k+aehOivpuaDhVxuXG4jIyMgMy4xICd1c2VycyfvvIjnlKjmiLfooajvvIlcbi0gKirnlKjpgJQqKu+8muWtmOWCqOezu+e7n+eUqOaIt+eahOWfuuacrOS/oeaBryAgXG4tICoq5Li76ZSuKirvvJonaWQnICBcbi0gKirntKLlvJUqKu+8miAgXG4gIC0gJ2lkeF91c2Vyc19lbWFpbCcgKCdlbWFpbCcpICBcbiAgLSAnaWR4X3VzZXJzX2NyZWF0ZWRfYXQnICgnY3JlYXRlZF9hdCcpXG5cbnwg5a2X5q615ZCNICAgICAgICB8IOexu+WeiyAgICAgICAgICAgICAgICAgICB8IOe6puadnyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDpu5jorqTlgLwgICAgICAgICAgICAgICAgICAgfCDmj4/ov7AgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg5YWz6IGUICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG58IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbnwgJ2lkJyAgICAgICAgICB8IEJJR0lOVCAgICAgICAgICAgICAgICAgfCBQUklNQVJZIEtFWSwgQVVUT19JTkNSRU1FTlQgICAgICB8IOKAlCAgICAgICAgICAgICAgICAgICAgICAgIHwg55So5oi35Li76ZSuICAgICAgICAgICAgICAgICAgICAgICAgIHwg4oCUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG58ICd1c2VybmFtZScgICAgfCBWQVJDSEFSKDUwKSAgICAgICAgICAgIHwgTk9UIE5VTEwsIFVOSVFVRSAgICAgICAgICAgICAgICAgfCDigJQgICAgICAgICAgICAgICAgICAgICAgICB8IOeZu+W9leeUqOaIt+WQjSAgICAgICAgICAgICAgICAgICAgICAgfCDigJQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgJ2VtYWlsJyAgICAgICB8IFZBUkNIQVIoMTAwKSAgICAgICAgICAgfCBOT1QgTlVMTCwgVU5JUVVFICAgICAgICAgICAgICAgICB8IOKAlCAgICAgICAgICAgICAgICAgICAgICAgIHwg6YKu566xICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IOKAlCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxufCAncGFzc3dvcmQnICAgIHwgVkFSQ0hBUigyNTUpICAgICAgICAgICB8IE5PVCBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgIHwg4oCUICAgICAgICAgICAgICAgICAgICAgICAgfCDlr4bnoIHmlaPliJcgICAgICAgICAgICAgICAgICAgICAgICAgfCDigJQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgJ3N0YXR1cycgICAgICB8IFRJTllJTlQgICAgICAgICAgICAgICAgfCBOT1QgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICB8ICcxJyAgICAgICAgICAgICAgICAgICAgICB8IOeUqOaIt+eKtuaAge+8iDA956aB55So77yMMT3lkK/nlKjvvIkgICAgICAgIHwg4oCUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG58ICdjcmVhdGVkX2F0JyAgfCBEQVRFVElNRSAgICAgICAgICAgICAgIHwgTk9UIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgfCBDVVJSRU5UX1RJTUVTVEFNUCAgICAgICAgfCDorrDlvZXliJvlu7rml7bpl7QgICAgICAgICAgICAgICAgICAgICB8IOKAlCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxufCAndXBkYXRlZF9hdCcgIHwgREFURVRJTUUgICAgICAgICAgICAgICB8IE5PVCBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ1VSUkVOVF9USU1FU1RBTVAgT04gVVBEQVRFIENVUlJFTlRfVElNRVNUQU1QIHwg6K6w5b2V5pu05paw5pe26Ze0ICAgICAgICAgICAgICAgICAgICAgfCDigJQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcblxuIyMjIDMuMiAncHJvZHVjdHMn77yI5ZWG5ZOB6KGo77yJXG4tICoq55So6YCUKirvvJrigKYgIFxuLSAqKuS4u+mUrioq77yaJ2lkJyAgXG4tICoq57Si5byVKirvvJrigKYgIFxuXG58IOWtl+auteWQjSAgICAgICAgfCDnsbvlnosgICAgICAgIHwg57qm5p2fICAgICAgICAgICAgICAgfCDpu5jorqTlgLwgICAgICAgICAgICB8IOaPj+i/sCAgICAgICAgICAgfCDlhbPogZQgICAgICAgICAgICAgICAgICAgfFxufCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG58ICdpZCcgICAgICAgICAgfCBCSUdJTlQgICAgICB8IFBLLCBBVVRPX0lOQ1JFTUVOVCB8IOKAlCAgICAgICAgICAgICAgICAgfCDllYblk4HkuLvplK4gICAgICAgfCDigJQgICAgICAgICAgICAgICAgICAgICAgfFxufCAndGl0bGUnICAgICAgIHwgVkFSQ0hBUigyMDApfCBOT1QgTlVMTCAgICAgICAgICAgfCDigJQgICAgICAgICAgICAgICAgIHwg5ZWG5ZOB5qCH6aKYICAgICAgIHwg4oCUICAgICAgICAgICAgICAgICAgICAgIHxcbnwgJ3ByaWNlJyAgICAgICB8IERFQ0lNQUwoMTAsMil8IE5PVCBOVUxMICAgICAgICAgIHwgJzAuMDAnICAgICAgICAgICAgfCDku7fmoLwgICAgICAgICAgIHwg4oCUICAgICAgICAgICAgICAgICAgICAgIHxcbnwgJ2NyZWF0ZWRfYXQnICB8IERBVEVUSU1FICAgIHwgTk9UIE5VTEwgICAgICAgICAgIHwgQ1VSUkVOVF9USU1FU1RBTVAgfCDliJvlu7rml7bpl7QgICAgICAgfCDigJQgICAgICAgICAgICAgICAgICAgICAgfFxufCDigKYgICAgICAgICAgICAgfCDigKYgICAgICAgICAgIHwg4oCmICAgICAgICAgICAgICAgICAgfCDigKYgICAgICAgICAgICAgICAgIHwg4oCmICAgICAgICAgICAgICB8IOKApiAgICAgICAgICAgICAgICAgICAgICB8XG5cbi4uLlxuXG5cXGBcXGBcXGBcbmA7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export declare const codePromptTemplate = "# \u4F60\u662Ftypescript\u4EE3\u7801\u4E13\u5BB6\uFF0C\u6839\u636E`\u7F16\u5199\u89C4\u5219`\u5E2E\u6211\u5B8C\u6210`src/{{\u529F\u80FD\u6A21\u5757}}/{{\u9875\u9762\u540D\u5B57}}/{{\u9875\u9762\u540D\u5B57}}.ts`\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\u7684\u5F00\u53D1\n\n## \u4EE3\u7801\u89C4\u8303\n- **\u7ED3\u5C3E\u7981\u6B62\u5206\u53F7**\uFF1A\u4E00\u53E5\u4EE3\u7801\u7684\u7ED3\u5C3E\u7981\u6B62\u5199\u5206\u53F7\uFF0C\u4E0D\u9700\u8981\u5199\u5206\u53F7\u7684\n\n## **\u6838\u5FC3\u539F\u5219**\n- \u53EA\u5B9E\u73B0\u9875\u9762\u8DF3\u8F6C\u548C\u5173\u95ED\u9875\u9762\u7684\u4EE3\u7801\uFF0C\u5176\u4ED6\u4EFB\u4F55\u4EE3\u7801\u4E0D\u5141\u8BB8\u7F16\u5199\n- \u7EDD\u5BF9\u7981\u6B62\u6CE8\u91CA\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\uFF0C\u5373\u4F7F\u8DF3\u8F6C\u7684\u76EE\u6807\u9875\u9762\u7684UI\u8FD8\u6CA1\u6709\u5F00\u53D1\u5B8C\u6BD5\uFF0C\u4E5F\u8981\u5148\u5199\u4E0A\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\uFF0C\u5426\u5219\u7528\u6237\u4F1A\u8BA4\u4E3A\u4F60\u6CA1\u6709\u5B9E\u73B0\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\n- \u5FC5\u987B\u8981\u5B8C\u6210\u6240\u6709\u9875\u9762\u7684\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\u5F00\u53D1\u624D\u80FD\u7ED3\u675F\u4EFB\u52A1\uFF0C\u624D\u80FD\u505C\u6B62\u8BE5AI\u4F1A\u8BDD\n\n## **\uD83D\uDEA8 \u4E25\u683C\u7981\u6B62\u4E8B\u9879 - \u9632\u6B62AI\u5927\u6A21\u578B\u9519\u8BEF\u5B9E\u73B0**\n\n### **\u7EDD\u5BF9\u7981\u6B62\u5B9E\u73B0\u7684\u529F\u80FD\u4EE3\u7801**\n- **\u274C \u7981\u6B62\u5B9E\u73B0\u4EFB\u4F55UI\u663E\u793A\u4E0E\u4EA4\u4E92\u903B\u8F91**\uFF1A\u4E0D\u5F97\u7F16\u5199toast\u3001dialog\u3001text\u3001input\u7B49UI\u663E\u793A\u76F8\u5173\u4EE3\u7801\n- **\u274C \u7981\u6B62\u5B9E\u73B0\u975E\u9875\u9762\u8DF3\u8F6C\u7684\u903B\u8F91**\uFF1A\u4E0D\u5F97\u7F16\u5199\u4EFB\u4F55\u4E0E\u9875\u9762\u8DF3\u8F6C\u65E0\u5173\u7684\u903B\u8F91\u4EE3\u7801\n- **\u274C \u7981\u6B62\u5B9E\u73B0\u7F51\u7EDC\u8BF7\u6C42\u903B\u8F91**\uFF1A\u4E0D\u5F97\u7F16\u5199API\u8C03\u7528\u3001\u6570\u636E\u83B7\u53D6\u7B49\u7F51\u7EDC\u76F8\u5173\u65B9\u6CD5\uFF0C\u8BF7\u4F7F\u7528\u5EF6\u65F6\u6267\u884C\u6765\u6A21\u62DF\u8BF7\u6C42\u8FC7\u7A0B\n- **\u274C \u7981\u6B62\u5B9E\u73B0\u72B6\u6001\u7BA1\u7406\u903B\u8F91**\uFF1A\u4E0D\u5F97\u7F16\u5199\u590D\u6742\u7684\u72B6\u6001\u5207\u6362\u3001\u6570\u636E\u7BA1\u7406\u7B49\u72B6\u6001\u65B9\u6CD5\n- **\u274C \u7981\u6B62\u5B9E\u73B0\u4E1A\u52A1\u903B\u8F91\u65B9\u6CD5**\uFF1A\u4E0D\u5F97\u7F16\u5199\u4EFB\u4F55\u4E0E\u9875\u9762\u8DF3\u8F6C\u65E0\u5173\u7684\u4E1A\u52A1\u5904\u7406\u65B9\u6CD5\n\n### **\u53EA\u5141\u8BB8\u5B9E\u73B0\u7684\u4EE3\u7801\u7C7B\u578B**\n- **\u2705 \u7EC4\u4EF6\u58F0\u660E**\uFF1A\u58F0\u660E\u9875\u9762\u4E2D\u53EF\u70B9\u51FB\u7684UI\u7EC4\u4EF6\uFF08\u6309\u94AE\u3001\u94FE\u63A5\u7B49\uFF09\n- **\u2705 \u70B9\u51FB\u4E8B\u4EF6\u7ED1\u5B9A**\uFF1A\u4E3A\u53EF\u70B9\u51FB\u7EC4\u4EF6\u7ED1\u5B9AsetOnClickListener\u4E8B\u4EF6\n- **\u2705 \u9875\u9762\u8DF3\u8F6C\u8C03\u7528**\uFF1A\u5728setOnClickListener\u4E8B\u4EF6\u4E2D\u8C03\u7528AllFunction.startPage(page: Page)\u8FDB\u884C\u9875\u9762\u8DF3\u8F6C\n- **\u2705 \u5173\u95ED\u9875\u9762\u8C03\u7528**\uFF1A\u5728setOnClickListener\u4E8B\u4EF6\u4E2D\u8C03\u7528AllFunction.closePage()\u8FDB\u884C\u9875\u9762\u5173\u95ED\n- **\u2705 \u7B80\u5355\u5EF6\u65F6\u8DF3\u8F6C**\uFF1A\u4F7F\u7528AllFunction.setTimeout\u5B9E\u73B0\u5EF6\u65F6\u8DF3\u8F6C\uFF08\u5982\u95EA\u5C4F\u9875\uFF09\n\n### **\u9519\u8BEF\u5B9E\u73B0\u793A\u4F8B\uFF08\u7EDD\u5BF9\u7981\u6B62\uFF09**\n```typescript\n// \u274C \u9519\u8BEF\uFF1A\u5B9E\u73B0\u4E86Toast\u663E\u793A\u903B\u8F91\nprivate showToast(type: string): void {\n this.loginSuccessToast.visibility = ViewVisibility.VISIBLE\n // ... \u66F4\u591AToast\u903B\u8F91\n}\n\n// \u274C \u9519\u8BEF\uFF1A\u5B9E\u73B0\u4E86\u767B\u5F55\u9A8C\u8BC1\u903B\u8F91\nprivate handleLogin(): void {\n // \u6A21\u62DF\u767B\u5F55\u8FC7\u7A0B\n AllFunction.setTimeout(() => {\n this.showToast('success')\n // ... \u66F4\u591A\u767B\u5F55\u903B\u8F91\n }, 2000)\n}\n\n// \u274C \u9519\u8BEF\uFF1A\u5B9E\u73B0\u4E86\u590D\u6742\u7684\u4E1A\u52A1\u903B\u8F91\nprivate handleGetVerificationCode(): void {\n // \u6A21\u62DF\u83B7\u53D6\u9A8C\u8BC1\u7801\n AllFunction.setTimeout(() => {\n this.showToast('codeSent')\n }, 1000)\n}\n```\n\n### **\u6B63\u786E\u5B9E\u73B0\u793A\u4F8B\uFF08\u4E25\u683C\u9075\u5FAA\uFF09**\n```typescript\n// \u2705 \u6B63\u786E\uFF1A\u53EA\u5B9E\u73B0\u9875\u9762\u8DF3\u8F6C\nexport default class xxxPage extends Page {\n // \u58F0\u660E\u5FC5\u8981\u7684\u53EF\u70B9\u51FB\u7EC4\u4EF6\n private registerLink: ButtonView = this.findViewById('registerLink') as ButtonView\n private loginButton: ButtonView = this.findViewById('loginButton') as ButtonView\n private backButton: ButtonView = this.findViewById('backButton') as ButtonView\n\n private initView(): void {\n // \u53EA\u7ED1\u5B9A\u9875\u9762\u8DF3\u8F6C\u4E8B\u4EF6\n this.registerLink.setOnClickListener(() => {\n AllFunction.startPage(new RegisterPage())\n })\n\n this.loginButton.setOnClickListener(() => {\n AllFunction.startPage(new HomePage())\n })\n\n this.backButton.setOnClickListener(() => {\n AllFunction.closePage()\n })\n }\n}\n```\n\n### **AI\u5927\u6A21\u578B\u5E38\u89C1\u9519\u8BEF\u601D\u7EF4\u6A21\u5F0F**\n1. **\u8FC7\u5EA6\u89E3\u8BFBUI\u7ED3\u6784**\uFF1A\u770B\u5230Toast\u7EC4\u4EF6\u5C31\u8BA4\u4E3A\u9700\u8981\u5B9E\u73B0Toast\u529F\u80FD \u274C\n2. **\u57FA\u4E8E\u5F00\u53D1\u7ECF\u9A8C**\uFF1A\u8BA4\u4E3A\u9875\u9762\u9700\u8981\u5B8C\u6574\u7684\u4E1A\u52A1\u903B\u8F91\u4E0E\u4EA4\u4E92\u903B\u8F91 \u274C\n3. **\u529F\u80FD\u5B8C\u6574\u6027\u8BEF\u89E3**\uFF1A\u8BA4\u4E3A\u9700\u8981\u5B9E\u73B0\u9875\u9762\u7684\u6240\u6709\u529F\u80FD \u274C\n4. **\u5FFD\u7565\u660E\u786E\u6307\u4EE4**\uFF1A\u6CA1\u6709\u4E25\u683C\u9075\u5FAA\"\u53EA\u5B9E\u73B0\u9875\u9762\u8DF3\u8F6C\"\u7684\u8981\u6C42 \u274C\n\n### **\u6B63\u786E\u7684AI\u601D\u7EF4\u6A21\u5F0F**\n1. **\u4E25\u683C\u6309\u6307\u4EE4\u6267\u884C**\uFF1A\u53EA\u5B9E\u73B0\u9875\u9762\u8DF3\u8F6C\uFF0C\u5176\u4ED6\u4E00\u5F8B\u4E0D\u5199 \u2705\n2. **\u660E\u786E\u4EFB\u52A1\u8FB9\u754C**\uFF1A\u9875\u9762\u8DF3\u8F6C \u2260 \u9875\u9762\u529F\u80FD \u2705\n3. **\u7B80\u6D01\u5B9E\u73B0\u539F\u5219**\uFF1A\u6700\u5C11\u4EE3\u7801\u5B8C\u6210\u8DF3\u8F6C\u9700\u6C42 \u2705\n4. **\u5FFD\u7565UI\u590D\u6742\u6027**\uFF1A\u4E0D\u7BA1UI\u591A\u590D\u6742\uFF0C\u53EA\u5173\u6CE8\u8DF3\u8F6C\u903B\u8F91 \u2705\n\n## \u9996\u5148\uFF0C\u8BFB\u53D6`doc/UI\u8BBE\u8BA1\u8FDB\u5EA6.json`\u6587\u4EF6\uFF0C\u5176\u4E2D\"status\"\u662F\"completed\"\u7684\u9875\u9762\u6DFB\u52A0\u5230`pageTaskList`\u4E2D\uFF0C\u6700\u7EC8\u5F97\u5230\u9700\u8981\u7F16\u5199\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\u7684\u9875\u9762\u5217\u8868`pageTaskList`\uFF0C\u5E76\u521B\u5EFA`doc/jumpPageTask.json`\u6587\u4EF6\uFF0C\u5C06`pageTaskList`\u5E26\u4EFB\u52A1\u5B8C\u6210\u72B6\u6001\u7684json\u5199\u5165\u5230`doc/jumpPageTask.json`\u6587\u4EF6\u4E2D\uFF0C\u5176\u4E2Dversion\u4ECE0\u5F00\u59CB\uFF0C\u6BCF\u6B21\u8BBE\u8BA1\u6216\u4FEE\u590D\u5B8C\u6210\u4E00\u4E2A\u9875\u9762\uFF0Cversion\u5C31\u52A01\uFF0CjumpPageTask.json\u6587\u4EF6\u7684json\u7684\u683C\u5F0F\u4E3A\uFF1A\n```json\n{\n \"pageTaskList\": [\n {\n \"pageNameEN\": \"xxxPage\",\n \"pageNameCN\": \"xxx\u9875\u9762\",\n \"versoin\": 1,\n \"status\": \"completed\"\n },\n {\n \"pageNameEN\": \"xxxPage\",\n \"pageNameCN\": \"xxx\u9875\u9762\",\n \"versoin\": 0,\n \"status\": \"pending\"\n }\n ]\n}\n```\n\n## \u7136\u540E\u8C03\u7528todo_write\u5DE5\u5177\u6839\u636E`pageTaskList`\u521B\u5EFA\u4EFB\u52A1\u5217\u8868\uFF0C\u4E00\u4E2A\u9875\u9762\u4E00\u4E2A\u4EFB\u52A1\n\n## \u7136\u540E\uFF0C\u6BCF\u4E00\u4E2A\u9875\u9762\u7684\u5F00\u53D1\u90FD\u5FC5\u987B\u6309\u7167`\u7F16\u5199\u89C4\u5219`\uFF0C\u5E76\u8BFB\u53D6\u9875\u9762UI\u63CF\u8FF0\u6587\u4EF6`src/{\u6A21\u5757\u540D\u5B57}/xxxPage/xxxPage.md`\uFF0C\u7406\u89E3\u9875\u9762\u7684\u7ED3\u6784\u548C\u7EC4\u4EF6\u5143\u7D20\uFF0C\u5B8C\u6210`src/{\u6A21\u5757\u540D\u5B57}/xxxPage/xxxPage.ts`\u7684\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\u7684\u5F00\u53D1\u4E4B\u540E\uFF0C\u8FD8\u9700\u8981\u66F4\u65B0`doc/jumpPageTask.json`\u6587\u4EF6\u4E2D\u7684\u4EFB\u52A1\u5B8C\u6210\u72B6\u6001status\u5B57\u6BB5\u548Cversion\u5B57\u6BB5\uFF0Cversion\u5B57\u6BB5\u6BCF\u6B21\u90FD\u52A01\n\n## \u6700\u540E\uFF0C\u8BFB\u53D6`doc/jumpPageTask.json`\u6587\u4EF6\uFF0C\u5224\u65AD\u662F\u5426\u6240\u6709\u9875\u9762\u7684\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\u90FD\u5F00\u53D1\u5B8C\u6210\uFF0C\u5982\u679C\u5B8C\u6210\u5C31\u7ED3\u675F\u4EFB\u52A1\uFF0C\u5426\u5219\u7EE7\u7EED\u5F00\u53D1\u4E0B\u4E00\u4E2A\u9875\u9762\u7684\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\u4EFB\u52A1\n\n### \u7F16\u5199\u89C4\u5219\n\n#### **\u7406\u89E3View\u7EC4\u4EF6\u7684\u58F0\u660E\u89C4\u5219**\n- AllFunction\u7684import\u8BED\u53E5\u5FC5\u987B\u5728\u7C7B\u6587\u4EF6\u5F00\u59CB\u65F6\u5148\u58F0\u660E\uFF0C\u5E76\u4E14import\u4EE3\u7801\u5FC5\u987B\u662F\u8FD9\u6837\u5199\uFF0C\u7279\u522B\u6CE8\u610F\u4E25\u683C\u6309\u7167\u4E0B\u9762\u7ED9\u51FA\u7684\u8DEF\u5F84\u5199\u6CD5\uFF1A\n ```typescript\n import AllFunction from \"../../lib/AllFunction\"\n ```\n- \u8FD9\u4E0D\u662Fhtml\u3001react\u7B49\u5F00\u53D1\uFF0C\u8FD9\u662F\u4E00\u4E2A\u65B0\u7684\u5F00\u53D1\u6846\u67B6\uFF0C\u662F\u57FA\u4E8Esrc/lib/uilib\u6587\u4EF6\u5939\u91CC\u9762\u7684UI\u7EC4\u4EF6\u5E93\u6765\u5F00\u53D1\u7684\n- View\u7EC4\u4EF6\u7684\u57FA\u7C7B\u662FBaseView\uFF0C\u5BB9\u5668\u57FA\u7C7B\u662FBaseContainerView\uFF0C\u6240\u6709View\u7EC4\u4EF6\u90FD\u7EE7\u627F\u81EABaseView\n- \u4F7F\u7528\u5DE5\u5177\u904D\u5386'src/lib/uilib/'\u6587\u4EF6\u5939\u4E0B\u9762\u7684\u6587\u4EF6\u5217\u8868\u540D\u5B57\uFF0C\u7406\u89E3\u603B\u5171\u6709\u591A\u5C11\u79CDUI\u7EC4\u4EF6\n- \u4E00\u4E2A\u9875\u9762\u7684\u6240\u6709View\u7684\u4FE1\u606F\u6570\u636E\u90FD\u5728`src/{\u6A21\u5757\u540D\u5B57}/xxxPage/xxxPage.md`\u6587\u4EF6\u4E2D\uFF0C\u8BE5\u6587\u4EF6\u4E2D\u4F1A\u8BE6\u7EC6\u63CF\u8FF0\u6BCF\u4E2AView\u7684\u7C7B\u578B\u3001id\u3001xywh\u7B49\u5C5E\u6027\n- View\u7EC4\u4EF6\u7684\u58F0\u660E\u5FC5\u987B\u5728\u7C7B\u6587\u4EF6\u5F00\u59CB\u65F6\u5148\u58F0\u660E\uFF0C\u5E76\u4E14\u5FC5\u987B\u8981\u58F0\u660E\u5177\u4F53\u7684View\u7EC4\u4EF6\u7C7B\u578B\uFF0C\u4E0D\u5F97\u58F0\u660E\u4E3ABaseView\uFF0C\u4E0D\u5F97\u5728\u4EFB\u4F55\u51FD\u6570\u4F53\u91CC\u9762\u901A\u8FC7findViewById\u6765\u58F0\u660EView\u7EC4\u4EF6\uFF0C\u6BD4\u5982\uFF1A\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n ```typescript\n public class HomePage extends Page {\n private nameTextView: TextView = this.findViewById('nameTextView') as TextView\n ....\n }\n ```\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF08\u6CA1\u6709\u58F0\u5177\u4F53\u7684View\u7EC4\u4EF6\u7C7B\u578B\uFF09\uFF1A\n ```typescript\n private nameTextView = this.findViewById('nameTextView')\n ```\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF08\u5728\u51FD\u6570\u4F53\u91CC\u9762\u901A\u8FC7findViewById\u6765\u58F0\u660EView\u7EC4\u4EF6\uFF09\uFF1A\n ```typescript\n private oneFunction() {\n const nameTextView: TextView = this.findViewById('nameTextView') as TextView\n ....\n }\n ```\n\n#### **\u7406\u89E3\u70B9\u51FB\u4E8B\u4EF6\u7684\u7ED1\u5B9A\u89C4\u5219**\n- \u70B9\u51FB\u4E8B\u4EF6\u7684\u7ED1\u5B9A\u5FC5\u987B\u4F7F\u7528setOnClickListener\u65B9\u6CD5\u5B9E\u73B0\uFF0CsetOnClickListener\u65B9\u6CD5\u4F20\u5165\u4E00\u4E2A\u51FD\u6570\uFF0C\u51FD\u6570\u4E2D\u5B9E\u73B0\u70B9\u51FB\u4E8B\u4EF6\u7684\u903B\u8F91\uFF0C\u6BD4\u5982\uFF1A\n ```typescript\n public class HomePage extends Page {\n private nameTextView: TextView = this.findViewById('nameTextView') as TextView\n ....\n private initView() {\n this.nameTextView.setOnClickListener(() => {\n AllFunction.startPage(new ProductPage())\n })\n }\n }\n ```\n\n#### **\u7406\u89E3\u9875\u9762\u8DF3\u8F6C\u89C4\u5219**\n- \u9875\u9762\u8DF3\u8F6C\u5FC5\u987B\u4F7F\u7528AllFunction.startPage\u5B9E\u73B0\uFF0CstartPage\u4F20\u5165Page\u7684\u5B50\u7C7B\u5BF9\u8C61\uFF0C\u5982\uFF1AAllFunction.startPage(new ProductPage())\u3002\n- \u9875\u9762\u8DF3\u8F6C\u4E0D\u9700\u8003\u8651\u6A21\u5757\u5316\u3001\u5FAA\u73AF\u4F9D\u8D56\u3001\u6E10\u8FDB\u5F0F\u5F00\u53D1\uFF0C\u7EDD\u5BF9\u7981\u6B62\u5C4F\u853D\u9875\u9762\u8DF3\u8F6C\u7684\u4EE3\u7801\uFF0C\u6240\u6709\u9875\u9762\u90FD\u5DF2\u7ECF\u5B58\u5728\uFF0C\u4E0D\u4F1A\u51FA\u73B0\u7F16\u8BD1\u51FA\u9519\u7684\uFF0C\u5FC5\u987B\u660E\u786E\u5199\u4E0A\u9875\u9762\u8DF3\u8F6C\u7684\u4EE3\u7801\u3002\n- \u5728Application.ts\u8BBE\u7F6E\u8DF3\u8F6C\u542F\u52A8\u9875\uFF0C\u6BD4\u5982\uFF1A\t\n // \u5E94\u7528\u7F51\u7AD9\u542F\u52A8\u65F6\u56DE\u8C03\u7684\u7B2C\u4E00\u4E2A\u51FD\u6570\uFF0C\u7528\u4E8E\u521D\u59CB\u5316\u4E00\u4E9B\u5168\u5C40\u7684\u4E1C\u897F\u3002\n protected onApplicationCreate(): void {\n AllFunction.startPage(new SplashPage())\n }\n- \u2705 \u5F15\u5165\u5176\u4ED6\u7C7B\u53EA\u5141\u8BB8\u4E00\u79CD\u5199\u6CD5\uFF1A\u5728\u7C7B\u6587\u4EF6\u9876\u90E8\u8FDB\u884Cimport\uFF1Aimport GuidePage from '../guidePage/guidePage'\u3002\n- \u274C \u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528\u52A8\u6001import\u7684\u5199\u6CD5\uFF0C\u7A0B\u5E8F\u5E95\u5C42\u5DF2\u7ECF\u5904\u7406\u597D\u5FAA\u73AF\u4F9D\u8D56\u95EE\u9898\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u8003\u8651\uFF0C\u6BD4\u5982\u7EDD\u5BF9\u7981\u6B62\u4EE5\u4E0B\u5199\u6CD5\uFF1A\n // \u4F7F\u7528\u52A8\u6001\u5BFC\u5165\u907F\u514D\u5FAA\u73AF\u4F9D\u8D56\n import('../guidePage/guidePage').then(({ default: GuidePage }) => {\n AllFunction.startPage(new GuidePage())\n })\n- \u274C \u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528require\u7684\u5199\u6CD5\uFF0C\u7A0B\u5E8F\u5E95\u5C42\u5DF2\u7ECF\u5904\u7406\u597D\u5FAA\u73AF\u4F9D\u8D56\u95EE\u9898\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u8003\u8651\uFF0C\u6BD4\u5982\u7EDD\u5BF9\u7981\u6B62\u4EE5\u4E0B\u5199\u6CD5\uFF1A\n require('../guidePage/guidePage').default\n- \u2705 \u6B63\u786E\u7684\u5199\u6CD5\u662F\uFF1AAllFunction.startPage(new GuidePage())\u3002\u7136\u540E\u5728\u7C7B\u6587\u4EF6\u9876\u90E8\u8FDB\u884Cimport\uFF1Aimport GuidePage from '../guidePage/guidePage'\u3002\n\n#### **\u7406\u89E3\u5EF6\u65F6\u6267\u884C\u7684\u4EE3\u7801\u89C4\u5219**\n- \u5EF6\u65F6\u6267\u884C\u53EA\u80FD\u4F7F\u7528AllFunction.setTimeout\u5B9E\u73B0\uFF0C\u4E0D\u80FD\u4F7F\u7528setTimeout\u51FD\u6570\uFF0C\u6BD4\u5982\uFF1A\n ```typescript\n AllFunction.setTimeout(() => {\n console.log('\u5EF6\u65F6\u6267\u884C')\n }, 1000)\n ```\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF08\u4F7F\u7528setTimeout\u51FD\u6570\uFF09\uFF1A\n ```typescript\n setTimeout(() => {\n console.log('\u5EF6\u65F6\u6267\u884C')\n }, 1000)\n ```\n- \u5EF6\u65F6\u6267\u884CAllFunction.setTimeout\u7CFB\u7EDF\u4F1A\u81EA\u52A8\u6E05\u7406timeout\uFF0C\u4EE3\u7801\u4E0A\u7EDD\u5BF9\u4E0D\u80FD\u8FDB\u884CcleaTimeout\u7B49\u7C7B\u4F3C\u64CD\u4F5C\uFF0C\u56E0\u6B64setTimeout\u4E5F\u4E0D\u9700\u8981\u58F0\u660E\u53D8\u91CF\u53BB\u63A5\u6536setTimeout\u8FD4\u56DE\u7684\u5F15\u7528\u3002\n\n#### **\u7406\u89E3\u7F51\u7EDC\u8BF7\u6C42\u7684\u6A21\u62DF\u89C4\u5219**\n- \u5173\u4E8E\u7F51\u7EDC\u8BF7\u6C42\u7684\u6A21\u62DF\u8BF7\u4F7F\u7528\u5EF6\u65F6\u6267\u884C\u6765\u6A21\u62DF\u8BF7\u6C42\u8FC7\u7A0B\uFF0C\u56E0\u4E3A\u8FD9\u53EA\u662F\u9875\u9762\u8DF3\u8F6C\u5B9E\u73B0\u4E0D\u9700\u8981\u7F51\u7EDC\u6570\u636E\uFF0C\u6BD4\u5982\uFF1A\n ```typescript\n AllFunction.simulateNetRequest(() => {\n console.log('\u7F51\u7EDC\u8BF7\u6C42\u5B8C\u6210')\n }, 2000)\n ```\n- \u4E0D\u5F97\u4F7F\u7528\u4EFB\u4F55\u5176\u4ED6\u5DE5\u5177\u5B9E\u73B0\u7F51\u7EDC\u8BF7\u6C42\u7684\u6A21\u62DF\uFF0C\u6BD4\u5982\uFF1AsimulateNetRequest\u7B49\n\n ";
2
+ //# sourceMappingURL=jumpPageCode%20copy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jumpPageCode copy.d.ts","sourceRoot":"","sources":["../src/jumpPageCode copy.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,gnfA2M5B,CAAC"}
@@ -0,0 +1,205 @@
1
+ export const codePromptTemplate = `# 你是typescript代码专家,根据\`编写规则\`帮我完成\`src/{{功能模块}}/{{页面名字}}/{{页面名字}}.ts\`页面跳转代码的开发
2
+
3
+ ## 代码规范
4
+ - **结尾禁止分号**:一句代码的结尾禁止写分号,不需要写分号的
5
+
6
+ ## **核心原则**
7
+ - 只实现页面跳转和关闭页面的代码,其他任何代码不允许编写
8
+ - 绝对禁止注释页面跳转代码,即使跳转的目标页面的UI还没有开发完毕,也要先写上页面跳转代码,否则用户会认为你没有实现页面跳转代码
9
+ - 必须要完成所有页面的页面跳转代码开发才能结束任务,才能停止该AI会话
10
+
11
+ ## **🚨 严格禁止事项 - 防止AI大模型错误实现**
12
+
13
+ ### **绝对禁止实现的功能代码**
14
+ - **❌ 禁止实现任何UI显示与交互逻辑**:不得编写toast、dialog、text、input等UI显示相关代码
15
+ - **❌ 禁止实现非页面跳转的逻辑**:不得编写任何与页面跳转无关的逻辑代码
16
+ - **❌ 禁止实现网络请求逻辑**:不得编写API调用、数据获取等网络相关方法,请使用延时执行来模拟请求过程
17
+ - **❌ 禁止实现状态管理逻辑**:不得编写复杂的状态切换、数据管理等状态方法
18
+ - **❌ 禁止实现业务逻辑方法**:不得编写任何与页面跳转无关的业务处理方法
19
+
20
+ ### **只允许实现的代码类型**
21
+ - **✅ 组件声明**:声明页面中可点击的UI组件(按钮、链接等)
22
+ - **✅ 点击事件绑定**:为可点击组件绑定setOnClickListener事件
23
+ - **✅ 页面跳转调用**:在setOnClickListener事件中调用AllFunction.startPage(page: Page)进行页面跳转
24
+ - **✅ 关闭页面调用**:在setOnClickListener事件中调用AllFunction.closePage()进行页面关闭
25
+ - **✅ 简单延时跳转**:使用AllFunction.setTimeout实现延时跳转(如闪屏页)
26
+
27
+ ### **错误实现示例(绝对禁止)**
28
+ \`\`\`typescript
29
+ // ❌ 错误:实现了Toast显示逻辑
30
+ private showToast(type: string): void {
31
+ this.loginSuccessToast.visibility = ViewVisibility.VISIBLE
32
+ // ... 更多Toast逻辑
33
+ }
34
+
35
+ // ❌ 错误:实现了登录验证逻辑
36
+ private handleLogin(): void {
37
+ // 模拟登录过程
38
+ AllFunction.setTimeout(() => {
39
+ this.showToast('success')
40
+ // ... 更多登录逻辑
41
+ }, 2000)
42
+ }
43
+
44
+ // ❌ 错误:实现了复杂的业务逻辑
45
+ private handleGetVerificationCode(): void {
46
+ // 模拟获取验证码
47
+ AllFunction.setTimeout(() => {
48
+ this.showToast('codeSent')
49
+ }, 1000)
50
+ }
51
+ \`\`\`
52
+
53
+ ### **正确实现示例(严格遵循)**
54
+ \`\`\`typescript
55
+ // ✅ 正确:只实现页面跳转
56
+ export default class xxxPage extends Page {
57
+ // 声明必要的可点击组件
58
+ private registerLink: ButtonView = this.findViewById('registerLink') as ButtonView
59
+ private loginButton: ButtonView = this.findViewById('loginButton') as ButtonView
60
+ private backButton: ButtonView = this.findViewById('backButton') as ButtonView
61
+
62
+ private initView(): void {
63
+ // 只绑定页面跳转事件
64
+ this.registerLink.setOnClickListener(() => {
65
+ AllFunction.startPage(new RegisterPage())
66
+ })
67
+
68
+ this.loginButton.setOnClickListener(() => {
69
+ AllFunction.startPage(new HomePage())
70
+ })
71
+
72
+ this.backButton.setOnClickListener(() => {
73
+ AllFunction.closePage()
74
+ })
75
+ }
76
+ }
77
+ \`\`\`
78
+
79
+ ### **AI大模型常见错误思维模式**
80
+ 1. **过度解读UI结构**:看到Toast组件就认为需要实现Toast功能 ❌
81
+ 2. **基于开发经验**:认为页面需要完整的业务逻辑与交互逻辑 ❌
82
+ 3. **功能完整性误解**:认为需要实现页面的所有功能 ❌
83
+ 4. **忽略明确指令**:没有严格遵循"只实现页面跳转"的要求 ❌
84
+
85
+ ### **正确的AI思维模式**
86
+ 1. **严格按指令执行**:只实现页面跳转,其他一律不写 ✅
87
+ 2. **明确任务边界**:页面跳转 ≠ 页面功能 ✅
88
+ 3. **简洁实现原则**:最少代码完成跳转需求 ✅
89
+ 4. **忽略UI复杂性**:不管UI多复杂,只关注跳转逻辑 ✅
90
+
91
+ ## 首先,读取\`doc/UI设计进度.json\`文件,其中"status"是"completed"的页面添加到\`pageTaskList\`中,最终得到需要编写页面跳转代码的页面列表\`pageTaskList\`,并创建\`doc/jumpPageTask.json\`文件,将\`pageTaskList\`带任务完成状态的json写入到\`doc/jumpPageTask.json\`文件中,其中version从0开始,每次设计或修复完成一个页面,version就加1,jumpPageTask.json文件的json的格式为:
92
+ \`\`\`json
93
+ {
94
+ "pageTaskList": [
95
+ {
96
+ "pageNameEN": "xxxPage",
97
+ "pageNameCN": "xxx页面",
98
+ "versoin": 1,
99
+ "status": "completed"
100
+ },
101
+ {
102
+ "pageNameEN": "xxxPage",
103
+ "pageNameCN": "xxx页面",
104
+ "versoin": 0,
105
+ "status": "pending"
106
+ }
107
+ ]
108
+ }
109
+ \`\`\`
110
+
111
+ ## 然后调用todo_write工具根据\`pageTaskList\`创建任务列表,一个页面一个任务
112
+
113
+ ## 然后,每一个页面的开发都必须按照\`编写规则\`,并读取页面UI描述文件\`src/{模块名字}/xxxPage/xxxPage.md\`,理解页面的结构和组件元素,完成\`src/{模块名字}/xxxPage/xxxPage.ts\`的页面跳转代码的开发之后,还需要更新\`doc/jumpPageTask.json\`文件中的任务完成状态status字段和version字段,version字段每次都加1
114
+
115
+ ## 最后,读取\`doc/jumpPageTask.json\`文件,判断是否所有页面的页面跳转代码都开发完成,如果完成就结束任务,否则继续开发下一个页面的页面跳转代码任务
116
+
117
+ ### 编写规则
118
+
119
+ #### **理解View组件的声明规则**
120
+ - AllFunction的import语句必须在类文件开始时先声明,并且import代码必须是这样写,特别注意严格按照下面给出的路径写法:
121
+ \`\`\`typescript
122
+ import AllFunction from "../../lib/AllFunction"
123
+ \`\`\`
124
+ - 这不是html、react等开发,这是一个新的开发框架,是基于src/lib/uilib文件夹里面的UI组件库来开发的
125
+ - View组件的基类是BaseView,容器基类是BaseContainerView,所有View组件都继承自BaseView
126
+ - 使用工具遍历'src/lib/uilib/'文件夹下面的文件列表名字,理解总共有多少种UI组件
127
+ - 一个页面的所有View的信息数据都在\`src/{模块名字}/xxxPage/xxxPage.md\`文件中,该文件中会详细描述每个View的类型、id、xywh等属性
128
+ - View组件的声明必须在类文件开始时先声明,并且必须要声明具体的View组件类型,不得声明为BaseView,不得在任何函数体里面通过findViewById来声明View组件,比如:
129
+ - ✅ 正确的写法:
130
+ \`\`\`typescript
131
+ public class HomePage extends Page {
132
+ private nameTextView: TextView = this.findViewById('nameTextView') as TextView
133
+ ....
134
+ }
135
+ \`\`\`
136
+ - ❌ 错误的写法(没有声具体的View组件类型):
137
+ \`\`\`typescript
138
+ private nameTextView = this.findViewById('nameTextView')
139
+ \`\`\`
140
+ - ❌ 错误的写法(在函数体里面通过findViewById来声明View组件):
141
+ \`\`\`typescript
142
+ private oneFunction() {
143
+ const nameTextView: TextView = this.findViewById('nameTextView') as TextView
144
+ ....
145
+ }
146
+ \`\`\`
147
+
148
+ #### **理解点击事件的绑定规则**
149
+ - 点击事件的绑定必须使用setOnClickListener方法实现,setOnClickListener方法传入一个函数,函数中实现点击事件的逻辑,比如:
150
+ \`\`\`typescript
151
+ public class HomePage extends Page {
152
+ private nameTextView: TextView = this.findViewById('nameTextView') as TextView
153
+ ....
154
+ private initView() {
155
+ this.nameTextView.setOnClickListener(() => {
156
+ AllFunction.startPage(new ProductPage())
157
+ })
158
+ }
159
+ }
160
+ \`\`\`
161
+
162
+ #### **理解页面跳转规则**
163
+ - 页面跳转必须使用AllFunction.startPage实现,startPage传入Page的子类对象,如:AllFunction.startPage(new ProductPage())。
164
+ - 页面跳转不需考虑模块化、循环依赖、渐进式开发,绝对禁止屏蔽页面跳转的代码,所有页面都已经存在,不会出现编译出错的,必须明确写上页面跳转的代码。
165
+ - 在Application.ts设置跳转启动页,比如:
166
+ // 应用网站启动时回调的第一个函数,用于初始化一些全局的东西。
167
+ protected onApplicationCreate(): void {
168
+ AllFunction.startPage(new SplashPage())
169
+ }
170
+ - ✅ 引入其他类只允许一种写法:在类文件顶部进行import:import GuidePage from '../guidePage/guidePage'。
171
+ - ❌ 绝对禁止使用动态import的写法,程序底层已经处理好循环依赖问题了,你不需要考虑,比如绝对禁止以下写法:
172
+ // 使用动态导入避免循环依赖
173
+ import('../guidePage/guidePage').then(({ default: GuidePage }) => {
174
+ AllFunction.startPage(new GuidePage())
175
+ })
176
+ - ❌ 绝对禁止使用require的写法,程序底层已经处理好循环依赖问题了,你不需要考虑,比如绝对禁止以下写法:
177
+ require('../guidePage/guidePage').default
178
+ - ✅ 正确的写法是:AllFunction.startPage(new GuidePage())。然后在类文件顶部进行import:import GuidePage from '../guidePage/guidePage'。
179
+
180
+ #### **理解延时执行的代码规则**
181
+ - 延时执行只能使用AllFunction.setTimeout实现,不能使用setTimeout函数,比如:
182
+ \`\`\`typescript
183
+ AllFunction.setTimeout(() => {
184
+ console.log('延时执行')
185
+ }, 1000)
186
+ \`\`\`
187
+ - ❌ 错误的写法(使用setTimeout函数):
188
+ \`\`\`typescript
189
+ setTimeout(() => {
190
+ console.log('延时执行')
191
+ }, 1000)
192
+ \`\`\`
193
+ - 延时执行AllFunction.setTimeout系统会自动清理timeout,代码上绝对不能进行cleaTimeout等类似操作,因此setTimeout也不需要声明变量去接收setTimeout返回的引用。
194
+
195
+ #### **理解网络请求的模拟规则**
196
+ - 关于网络请求的模拟请使用延时执行来模拟请求过程,因为这只是页面跳转实现不需要网络数据,比如:
197
+ \`\`\`typescript
198
+ AllFunction.simulateNetRequest(() => {
199
+ console.log('网络请求完成')
200
+ }, 2000)
201
+ \`\`\`
202
+ - 不得使用任何其他工具实现网络请求的模拟,比如:simulateNetRequest等
203
+
204
+ `;
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianVtcFBhZ2VDb2RlIGNvcHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvanVtcFBhZ2VDb2RlIGNvcHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMk0vQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGNvZGVQcm9tcHRUZW1wbGF0ZSA9IGAjIOS9oOaYr3R5cGVzY3JpcHTku6PnoIHkuJPlrrbvvIzmoLnmja5cXGDnvJblhpnop4TliJlcXGDluK7miJHlrozmiJBcXGBzcmMve3vlip/og73mqKHlnZd9fS97e+mhtemdouWQjeWtl319L3t76aG16Z2i5ZCN5a2XfX0udHNcXGDpobXpnaLot7Povazku6PnoIHnmoTlvIDlj5FcblxuIyMg5Luj56CB6KeE6IyDXG4tICoq57uT5bC+56aB5q2i5YiG5Y+3KirvvJrkuIDlj6Xku6PnoIHnmoTnu5PlsL7npoHmraLlhpnliIblj7fvvIzkuI3pnIDopoHlhpnliIblj7fnmoRcblxuIyMgKirmoLjlv4Pljp/liJkqKlxuLSDlj6rlrp7njrDpobXpnaLot7PovazlkozlhbPpl63pobXpnaLnmoTku6PnoIHvvIzlhbbku5bku7vkvZXku6PnoIHkuI3lhYHorrjnvJblhplcbi0g57ud5a+556aB5q2i5rOo6YeK6aG16Z2i6Lez6L2s5Luj56CB77yM5Y2z5L2/6Lez6L2s55qE55uu5qCH6aG16Z2i55qEVUnov5jmsqHmnInlvIDlj5Hlrozmr5XvvIzkuZ/opoHlhYjlhpnkuIrpobXpnaLot7Povazku6PnoIHvvIzlkKbliJnnlKjmiLfkvJrorqTkuLrkvaDmsqHmnInlrp7njrDpobXpnaLot7Povazku6PnoIFcbi0g5b+F6aG76KaB5a6M5oiQ5omA5pyJ6aG16Z2i55qE6aG16Z2i6Lez6L2s5Luj56CB5byA5Y+R5omN6IO957uT5p2f5Lu75Yqh77yM5omN6IO95YGc5q2i6K+lQUnkvJror51cblxuIyMgKirwn5qoIOS4peagvOemgeatouS6i+mhuSAtIOmYsuatokFJ5aSn5qih5Z6L6ZSZ6K+v5a6e546wKipcblxuIyMjICoq57ud5a+556aB5q2i5a6e546w55qE5Yqf6IO95Luj56CBKipcbi0gKirinYwg56aB5q2i5a6e546w5Lu75L2VVUnmmL7npLrkuI7kuqTkupLpgLvovpEqKu+8muS4jeW+l+e8luWGmXRvYXN044CBZGlhbG9n44CBdGV4dOOAgWlucHV0562JVUnmmL7npLrnm7jlhbPku6PnoIFcbi0gKirinYwg56aB5q2i5a6e546w6Z2e6aG16Z2i6Lez6L2s55qE6YC76L6RKirvvJrkuI3lvpfnvJblhpnku7vkvZXkuI7pobXpnaLot7Povazml6DlhbPnmoTpgLvovpHku6PnoIFcbi0gKirinYwg56aB5q2i5a6e546w572R57uc6K+35rGC6YC76L6RKirvvJrkuI3lvpfnvJblhplBUEnosIPnlKjjgIHmlbDmja7ojrflj5bnrYnnvZHnu5znm7jlhbPmlrnms5XvvIzor7fkvb/nlKjlu7bml7bmiafooYzmnaXmqKHmi5/or7fmsYLov4fnqItcbi0gKirinYwg56aB5q2i5a6e546w54q25oCB566h55CG6YC76L6RKirvvJrkuI3lvpfnvJblhpnlpI3mnYLnmoTnirbmgIHliIfmjaLjgIHmlbDmja7nrqHnkIbnrYnnirbmgIHmlrnms5Vcbi0gKirinYwg56aB5q2i5a6e546w5Lia5Yqh6YC76L6R5pa55rOVKirvvJrkuI3lvpfnvJblhpnku7vkvZXkuI7pobXpnaLot7Povazml6DlhbPnmoTkuJrliqHlpITnkIbmlrnms5VcblxuIyMjICoq5Y+q5YWB6K645a6e546w55qE5Luj56CB57G75Z6LKipcbi0gKirinIUg57uE5Lu25aOw5piOKirvvJrlo7DmmI7pobXpnaLkuK3lj6/ngrnlh7vnmoRVSee7hOS7tu+8iOaMiemSruOAgemTvuaOpeetie+8iVxuLSAqKuKchSDngrnlh7vkuovku7bnu5HlrpoqKu+8muS4uuWPr+eCueWHu+e7hOS7tue7keWumnNldE9uQ2xpY2tMaXN0ZW5lcuS6i+S7tlxuLSAqKuKchSDpobXpnaLot7PovazosIPnlKgqKu+8muWcqHNldE9uQ2xpY2tMaXN0ZW5lcuS6i+S7tuS4reiwg+eUqEFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShwYWdlOiBQYWdlKei/m+ihjOmhtemdoui3s+i9rFxuLSAqKuKchSDlhbPpl63pobXpnaLosIPnlKgqKu+8muWcqHNldE9uQ2xpY2tMaXN0ZW5lcuS6i+S7tuS4reiwg+eUqEFsbEZ1bmN0aW9uLmNsb3NlUGFnZSgp6L+b6KGM6aG16Z2i5YWz6ZetXG4tICoq4pyFIOeugOWNleW7tuaXtui3s+i9rCoq77ya5L2/55SoQWxsRnVuY3Rpb24uc2V0VGltZW91dOWunueOsOW7tuaXtui3s+i9rO+8iOWmgumXquWxj+mhte+8iVxuXG4jIyMgKirplJnor6/lrp7njrDnpLrkvovvvIjnu53lr7nnpoHmraLvvIkqKlxuXFxgXFxgXFxgdHlwZXNjcmlwdFxuLy8g4p2MIOmUmeivr++8muWunueOsOS6hlRvYXN05pi+56S66YC76L6RXG5wcml2YXRlIHNob3dUb2FzdCh0eXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ2luU3VjY2Vzc1RvYXN0LnZpc2liaWxpdHkgPSBWaWV3VmlzaWJpbGl0eS5WSVNJQkxFXG4gICAgLy8gLi4uIOabtOWkmlRvYXN06YC76L6RXG59XG5cbi8vIOKdjCDplJnor6/vvJrlrp7njrDkuobnmbvlvZXpqozor4HpgLvovpFcbnByaXZhdGUgaGFuZGxlTG9naW4oKTogdm9pZCB7XG4gICAgLy8g5qih5ouf55m75b2V6L+H56iLXG4gICAgQWxsRnVuY3Rpb24uc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd1RvYXN0KCdzdWNjZXNzJylcbiAgICAgICAgLy8gLi4uIOabtOWkmueZu+W9lemAu+i+kVxuICAgIH0sIDIwMDApXG59XG5cbi8vIOKdjCDplJnor6/vvJrlrp7njrDkuoblpI3mnYLnmoTkuJrliqHpgLvovpFcbnByaXZhdGUgaGFuZGxlR2V0VmVyaWZpY2F0aW9uQ29kZSgpOiB2b2lkIHtcbiAgICAvLyDmqKHmi5/ojrflj5bpqozor4HnoIFcbiAgICBBbGxGdW5jdGlvbi5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93VG9hc3QoJ2NvZGVTZW50JylcbiAgICB9LCAxMDAwKVxufVxuXFxgXFxgXFxgXG5cbiMjIyAqKuato+ehruWunueOsOekuuS+i++8iOS4peagvOmBteW+qu+8iSoqXG5cXGBcXGBcXGB0eXBlc2NyaXB0XG4vLyDinIUg5q2j56Gu77ya5Y+q5a6e546w6aG16Z2i6Lez6L2sXG5leHBvcnQgZGVmYXVsdCBjbGFzcyB4eHhQYWdlIGV4dGVuZHMgUGFnZSB7XG4gICAgLy8g5aOw5piO5b+F6KaB55qE5Y+v54K55Ye757uE5Lu2XG4gICAgcHJpdmF0ZSByZWdpc3Rlckxpbms6IEJ1dHRvblZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJZCgncmVnaXN0ZXJMaW5rJykgYXMgQnV0dG9uVmlld1xuICAgIHByaXZhdGUgbG9naW5CdXR0b246IEJ1dHRvblZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJZCgnbG9naW5CdXR0b24nKSBhcyBCdXR0b25WaWV3XG4gICAgcHJpdmF0ZSBiYWNrQnV0dG9uOiBCdXR0b25WaWV3ID0gdGhpcy5maW5kVmlld0J5SWQoJ2JhY2tCdXR0b24nKSBhcyBCdXR0b25WaWV3XG5cbiAgICBwcml2YXRlIGluaXRWaWV3KCk6IHZvaWQge1xuICAgICAgICAvLyDlj6rnu5HlrprpobXpnaLot7Povazkuovku7ZcbiAgICAgICAgdGhpcy5yZWdpc3Rlckxpbmsuc2V0T25DbGlja0xpc3RlbmVyKCgpID0+IHtcbiAgICAgICAgICAgIEFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShuZXcgUmVnaXN0ZXJQYWdlKCkpXG4gICAgICAgIH0pXG5cbiAgICAgICAgdGhpcy5sb2dpbkJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIoKCkgPT4ge1xuICAgICAgICAgICAgQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBIb21lUGFnZSgpKVxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMuYmFja0J1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIoKCkgPT4ge1xuICAgICAgICAgICAgQWxsRnVuY3Rpb24uY2xvc2VQYWdlKClcbiAgICAgICAgfSlcbiAgICB9XG59XG5cXGBcXGBcXGBcblxuIyMjICoqQUnlpKfmqKHlnovluLjop4HplJnor6/mgJ3nu7TmqKHlvI8qKlxuMS4gKirov4fluqbop6Por7tVSee7k+aehCoq77ya55yL5YiwVG9hc3Tnu4Tku7blsLHorqTkuLrpnIDopoHlrp7njrBUb2FzdOWKn+iDvSDinYxcbjIuICoq5Z+65LqO5byA5Y+R57uP6aqMKirvvJrorqTkuLrpobXpnaLpnIDopoHlrozmlbTnmoTkuJrliqHpgLvovpHkuI7kuqTkupLpgLvovpEg4p2MXG4zLiAqKuWKn+iDveWujOaVtOaAp+ivr+inoyoq77ya6K6k5Li66ZyA6KaB5a6e546w6aG16Z2i55qE5omA5pyJ5Yqf6IO9IOKdjFxuNC4gKirlv73nlaXmmI7noa7mjIfku6QqKu+8muayoeacieS4peagvOmBteW+qlwi5Y+q5a6e546w6aG16Z2i6Lez6L2sXCLnmoTopoHmsYIg4p2MXG5cbiMjIyAqKuato+ehrueahEFJ5oCd57u05qih5byPKipcbjEuICoq5Lil5qC85oyJ5oyH5Luk5omn6KGMKirvvJrlj6rlrp7njrDpobXpnaLot7PovazvvIzlhbbku5bkuIDlvovkuI3lhpkg4pyFXG4yLiAqKuaYjuehruS7u+WKoei+ueeVjCoq77ya6aG16Z2i6Lez6L2sIOKJoCDpobXpnaLlip/og70g4pyFXG4zLiAqKueugOa0geWunueOsOWOn+WImSoq77ya5pyA5bCR5Luj56CB5a6M5oiQ6Lez6L2s6ZyA5rGCIOKchVxuNC4gKirlv73nlaVVSeWkjeadguaApyoq77ya5LiN566hVUnlpJrlpI3mnYLvvIzlj6rlhbPms6jot7PovazpgLvovpEg4pyFXG5cbiMjIOmmluWFiO+8jOivu+WPllxcYGRvYy9VSeiuvuiuoei/m+W6pi5qc29uXFxg5paH5Lu277yM5YW25LitXCJzdGF0dXNcIuaYr1wiY29tcGxldGVkXCLnmoTpobXpnaLmt7vliqDliLBcXGBwYWdlVGFza0xpc3RcXGDkuK3vvIzmnIDnu4jlvpfliLDpnIDopoHnvJblhpnpobXpnaLot7Povazku6PnoIHnmoTpobXpnaLliJfooahcXGBwYWdlVGFza0xpc3RcXGDvvIzlubbliJvlu7pcXGBkb2MvanVtcFBhZ2VUYXNrLmpzb25cXGDmlofku7bvvIzlsIZcXGBwYWdlVGFza0xpc3RcXGDluKbku7vliqHlrozmiJDnirbmgIHnmoRqc29u5YaZ5YWl5YiwXFxgZG9jL2p1bXBQYWdlVGFzay5qc29uXFxg5paH5Lu25Lit77yM5YW25LitdmVyc2lvbuS7jjDlvIDlp4vvvIzmr4/mrKHorr7orqHmiJbkv67lpI3lrozmiJDkuIDkuKrpobXpnaLvvIx2ZXJzaW9u5bCx5YqgMe+8jGp1bXBQYWdlVGFzay5qc29u5paH5Lu255qEanNvbueahOagvOW8j+S4uu+8mlxuXFxgXFxgXFxganNvblxue1xuICBcInBhZ2VUYXNrTGlzdFwiOiBbXG4gICAge1xuICAgICAgXCJwYWdlTmFtZUVOXCI6IFwieHh4UGFnZVwiLFxuICAgICAgXCJwYWdlTmFtZUNOXCI6IFwieHh46aG16Z2iXCIsXG4gICAgICBcInZlcnNvaW5cIjogMSxcbiAgICAgIFwic3RhdHVzXCI6IFwiY29tcGxldGVkXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwicGFnZU5hbWVFTlwiOiBcInh4eFBhZ2VcIixcbiAgICAgIFwicGFnZU5hbWVDTlwiOiBcInh4eOmhtemdolwiLFxuICAgICAgXCJ2ZXJzb2luXCI6IDAsXG4gICAgICBcInN0YXR1c1wiOiBcInBlbmRpbmdcIlxuICAgIH1cbiAgXVxufVxuXFxgXFxgXFxgXG5cbiMjIOeEtuWQjuiwg+eUqHRvZG9fd3JpdGXlt6XlhbfmoLnmja5cXGBwYWdlVGFza0xpc3RcXGDliJvlu7rku7vliqHliJfooajvvIzkuIDkuKrpobXpnaLkuIDkuKrku7vliqFcblxuIyMg54S25ZCO77yM5q+P5LiA5Liq6aG16Z2i55qE5byA5Y+R6YO95b+F6aG75oyJ54WnXFxg57yW5YaZ6KeE5YiZXFxg77yM5bm26K+75Y+W6aG16Z2iVUnmj4/ov7Dmlofku7ZcXGBzcmMve+aooeWdl+WQjeWtl30veHh4UGFnZS94eHhQYWdlLm1kXFxg77yM55CG6Kej6aG16Z2i55qE57uT5p6E5ZKM57uE5Lu25YWD57Sg77yM5a6M5oiQXFxgc3JjL3vmqKHlnZflkI3lrZd9L3h4eFBhZ2UveHh4UGFnZS50c1xcYOeahOmhtemdoui3s+i9rOS7o+eggeeahOW8gOWPkeS5i+WQju+8jOi/mOmcgOimgeabtOaWsFxcYGRvYy9qdW1wUGFnZVRhc2suanNvblxcYOaWh+S7tuS4reeahOS7u+WKoeWujOaIkOeKtuaAgXN0YXR1c+Wtl+auteWSjHZlcnNpb27lrZfmrrXvvIx2ZXJzaW9u5a2X5q615q+P5qyh6YO95YqgMVxuXG4jIyDmnIDlkI7vvIzor7vlj5ZcXGBkb2MvanVtcFBhZ2VUYXNrLmpzb25cXGDmlofku7bvvIzliKTmlq3mmK/lkKbmiYDmnInpobXpnaLnmoTpobXpnaLot7Povazku6PnoIHpg73lvIDlj5HlrozmiJDvvIzlpoLmnpzlrozmiJDlsLHnu5PmnZ/ku7vliqHvvIzlkKbliJnnu6fnu63lvIDlj5HkuIvkuIDkuKrpobXpnaLnmoTpobXpnaLot7Povazku6PnoIHku7vliqFcblxuIyMjIOe8luWGmeinhOWImVxuXG4jIyMjICoq55CG6KejVmlld+e7hOS7tueahOWjsOaYjuinhOWImSoqXG4tIEFsbEZ1bmN0aW9u55qEaW1wb3J06K+t5Y+l5b+F6aG75Zyo57G75paH5Lu25byA5aeL5pe25YWI5aOw5piO77yM5bm25LiUaW1wb3J05Luj56CB5b+F6aG75piv6L+Z5qC35YaZ77yM54m55Yir5rOo5oSP5Lil5qC85oyJ54Wn5LiL6Z2i57uZ5Ye655qE6Lev5b6E5YaZ5rOV77yaXG4gIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgaW1wb3J0IEFsbEZ1bmN0aW9uIGZyb20gXCIuLi8uLi9saWIvQWxsRnVuY3Rpb25cIlxuICBcXGBcXGBcXGBcbi0g6L+Z5LiN5pivaHRtbOOAgXJlYWN0562J5byA5Y+R77yM6L+Z5piv5LiA5Liq5paw55qE5byA5Y+R5qGG5p6277yM5piv5Z+65LqOc3JjL2xpYi91aWxpYuaWh+S7tuWkuemHjOmdoueahFVJ57uE5Lu25bqT5p2l5byA5Y+R55qEXG4tIFZpZXfnu4Tku7bnmoTln7rnsbvmmK9CYXNlVmlld++8jOWuueWZqOWfuuexu+aYr0Jhc2VDb250YWluZXJWaWV377yM5omA5pyJVmlld+e7hOS7tumDvee7p+aJv+iHqkJhc2VWaWV3XG4tIOS9v+eUqOW3peWFt+mBjeWOhidzcmMvbGliL3VpbGliLyfmlofku7blpLnkuIvpnaLnmoTmlofku7bliJfooajlkI3lrZfvvIznkIbop6PmgLvlhbHmnInlpJrlsJHnp41VSee7hOS7tlxuLSDkuIDkuKrpobXpnaLnmoTmiYDmnIlWaWV355qE5L+h5oGv5pWw5o2u6YO95ZyoXFxgc3JjL3vmqKHlnZflkI3lrZd9L3h4eFBhZ2UveHh4UGFnZS5tZFxcYOaWh+S7tuS4re+8jOivpeaWh+S7tuS4reS8muivpue7huaPj+i/sOavj+S4qlZpZXfnmoTnsbvlnovjgIFpZOOAgXh5d2jnrYnlsZ7mgKdcbi0gVmlld+e7hOS7tueahOWjsOaYjuW/hemhu+WcqOexu+aWh+S7tuW8gOWni+aXtuWFiOWjsOaYju+8jOW5tuS4lOW/hemhu+imgeWjsOaYjuWFt+S9k+eahFZpZXfnu4Tku7bnsbvlnovvvIzkuI3lvpflo7DmmI7kuLpCYXNlVmlld++8jOS4jeW+l+WcqOS7u+S9leWHveaVsOS9k+mHjOmdoumAmui/h2ZpbmRWaWV3QnlJZOadpeWjsOaYjlZpZXfnu4Tku7bvvIzmr5TlpoLvvJpcbiAgLSDinIUg5q2j56Gu55qE5YaZ5rOV77yaXG4gIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgcHVibGljIGNsYXNzIEhvbWVQYWdlIGV4dGVuZHMgUGFnZSB7XG4gICAgcHJpdmF0ZSBuYW1lVGV4dFZpZXc6IFRleHRWaWV3ID0gdGhpcy5maW5kVmlld0J5SWQoJ25hbWVUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgLi4uLlxuICB9XG4gIFxcYFxcYFxcYFxuICAtIOKdjCDplJnor6/nmoTlhpnms5XvvIjmsqHmnInlo7DlhbfkvZPnmoRWaWV357uE5Lu257G75Z6L77yJ77yaXG4gIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgcHJpdmF0ZSBuYW1lVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJZCgnbmFtZVRleHRWaWV3JylcbiAgXFxgXFxgXFxgXG4gIC0g4p2MIOmUmeivr+eahOWGmeazle+8iOWcqOWHveaVsOS9k+mHjOmdoumAmui/h2ZpbmRWaWV3QnlJZOadpeWjsOaYjlZpZXfnu4Tku7bvvInvvJpcbiAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICBwcml2YXRlIG9uZUZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IG5hbWVUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJZCgnbmFtZVRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICAuLi4uXG4gIH1cbiAgXFxgXFxgXFxgXG5cbiMjIyMgKirnkIbop6Pngrnlh7vkuovku7bnmoTnu5Hlrprop4TliJkqKlxuLSDngrnlh7vkuovku7bnmoTnu5Hlrprlv4Xpobvkvb/nlKhzZXRPbkNsaWNrTGlzdGVuZXLmlrnms5Xlrp7njrDvvIxzZXRPbkNsaWNrTGlzdGVuZXLmlrnms5XkvKDlhaXkuIDkuKrlh73mlbDvvIzlh73mlbDkuK3lrp7njrDngrnlh7vkuovku7bnmoTpgLvovpHvvIzmr5TlpoLvvJpcbiAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICBwdWJsaWMgY2xhc3MgSG9tZVBhZ2UgZXh0ZW5kcyBQYWdlIHtcbiAgICBwcml2YXRlIG5hbWVUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJZCgnbmFtZVRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICAuLi4uXG4gICAgcHJpdmF0ZSBpbml0VmlldygpIHtcbiAgICAgIHRoaXMubmFtZVRleHRWaWV3LnNldE9uQ2xpY2tMaXN0ZW5lcigoKSA9PiB7XG4gICAgICAgIEFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShuZXcgUHJvZHVjdFBhZ2UoKSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG4gIFxcYFxcYFxcYFxuXG4jIyMjICoq55CG6Kej6aG16Z2i6Lez6L2s6KeE5YiZKipcbi0g6aG16Z2i6Lez6L2s5b+F6aG75L2/55SoQWxsRnVuY3Rpb24uc3RhcnRQYWdl5a6e546w77yMc3RhcnRQYWdl5Lyg5YWlUGFnZeeahOWtkOexu+Wvueixoe+8jOWmgu+8mkFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShuZXcgUHJvZHVjdFBhZ2UoKSnjgIJcbi0g6aG16Z2i6Lez6L2s5LiN6ZyA6ICD6JmR5qih5Z2X5YyW44CB5b6q546v5L6d6LWW44CB5riQ6L+b5byP5byA5Y+R77yM57ud5a+556aB5q2i5bGP6JS96aG16Z2i6Lez6L2s55qE5Luj56CB77yM5omA5pyJ6aG16Z2i6YO95bey57uP5a2Y5Zyo77yM5LiN5Lya5Ye6546w57yW6K+R5Ye66ZSZ55qE77yM5b+F6aG75piO56Gu5YaZ5LiK6aG16Z2i6Lez6L2s55qE5Luj56CB44CCXG4tIOWcqEFwcGxpY2F0aW9uLnRz6K6+572u6Lez6L2s5ZCv5Yqo6aG177yM5q+U5aaC77yaXHRcbiAgLy8g5bqU55So572R56uZ5ZCv5Yqo5pe25Zue6LCD55qE56ys5LiA5Liq5Ye95pWw77yM55So5LqO5Yid5aeL5YyW5LiA5Lqb5YWo5bGA55qE5Lic6KW/44CCXG4gIHByb3RlY3RlZCBvbkFwcGxpY2F0aW9uQ3JlYXRlKCk6IHZvaWQge1xuICAgIEFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShuZXcgU3BsYXNoUGFnZSgpKVxuICB9XG4tIOKchSDlvJXlhaXlhbbku5bnsbvlj6rlhYHorrjkuIDnp43lhpnms5XvvJrlnKjnsbvmlofku7bpobbpg6jov5vooYxpbXBvcnTvvJppbXBvcnQgR3VpZGVQYWdlIGZyb20gJy4uL2d1aWRlUGFnZS9ndWlkZVBhZ2Un44CCXG4tIOKdjCDnu53lr7nnpoHmraLkvb/nlKjliqjmgIFpbXBvcnTnmoTlhpnms5XvvIznqIvluo/lupXlsYLlt7Lnu4/lpITnkIblpb3lvqrnjq/kvp3otZbpl67popjkuobvvIzkvaDkuI3pnIDopoHogIPomZHvvIzmr5TlpoLnu53lr7nnpoHmraLku6XkuIvlhpnms5XvvJpcbiAgICAgIC8vIOS9v+eUqOWKqOaAgeWvvOWFpemBv+WFjeW+queOr+S+nei1llxuICAgICAgaW1wb3J0KCcuLi9ndWlkZVBhZ2UvZ3VpZGVQYWdlJykudGhlbigoeyBkZWZhdWx0OiBHdWlkZVBhZ2UgfSkgPT4ge1xuICAgICAgICAgIEFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShuZXcgR3VpZGVQYWdlKCkpXG4gICAgICB9KVxuLSDinYwg57ud5a+556aB5q2i5L2/55SocmVxdWlyZeeahOWGmeazle+8jOeoi+W6j+W6leWxguW3sue7j+WkhOeQhuWlveW+queOr+S+nei1lumXrumimOS6hu+8jOS9oOS4jemcgOimgeiAg+iZke+8jOavlOWmgue7neWvueemgeatouS7peS4i+WGmeazle+8mlxuICAgICAgcmVxdWlyZSgnLi4vZ3VpZGVQYWdlL2d1aWRlUGFnZScpLmRlZmF1bHRcbi0g4pyFIOato+ehrueahOWGmeazleaYr++8mkFsbEZ1bmN0aW9uLnN0YXJ0UGFnZShuZXcgR3VpZGVQYWdlKCkp44CC54S25ZCO5Zyo57G75paH5Lu26aG26YOo6L+b6KGMaW1wb3J077yaaW1wb3J0IEd1aWRlUGFnZSBmcm9tICcuLi9ndWlkZVBhZ2UvZ3VpZGVQYWdlJ+OAglxuXG4jIyMjICoq55CG6Kej5bu25pe25omn6KGM55qE5Luj56CB6KeE5YiZKipcbi0g5bu25pe25omn6KGM5Y+q6IO95L2/55SoQWxsRnVuY3Rpb24uc2V0VGltZW91dOWunueOsO+8jOS4jeiDveS9v+eUqHNldFRpbWVvdXTlh73mlbDvvIzmr5TlpoLvvJpcbiAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICBBbGxGdW5jdGlvbi5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICBjb25zb2xlLmxvZygn5bu25pe25omn6KGMJylcbiAgfSwgMTAwMClcbiAgXFxgXFxgXFxgXG4gIC0g4p2MIOmUmeivr+eahOWGmeazle+8iOS9v+eUqHNldFRpbWVvdXTlh73mlbDvvInvvJpcbiAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBjb25zb2xlLmxvZygn5bu25pe25omn6KGMJylcbiAgfSwgMTAwMClcbiAgXFxgXFxgXFxgXG4tIOW7tuaXtuaJp+ihjEFsbEZ1bmN0aW9uLnNldFRpbWVvdXTns7vnu5/kvJroh6rliqjmuIXnkIZ0aW1lb3V077yM5Luj56CB5LiK57ud5a+55LiN6IO96L+b6KGMY2xlYVRpbWVvdXTnrYnnsbvkvLzmk43kvZzvvIzlm6DmraRzZXRUaW1lb3V05Lmf5LiN6ZyA6KaB5aOw5piO5Y+Y6YeP5Y675o6l5pS2c2V0VGltZW91dOi/lOWbnueahOW8leeUqOOAglxuXG4jIyMjICoq55CG6Kej572R57uc6K+35rGC55qE5qih5ouf6KeE5YiZKipcbi0g5YWz5LqO572R57uc6K+35rGC55qE5qih5ouf6K+35L2/55So5bu25pe25omn6KGM5p2l5qih5ouf6K+35rGC6L+H56iL77yM5Zug5Li66L+Z5Y+q5piv6aG16Z2i6Lez6L2s5a6e546w5LiN6ZyA6KaB572R57uc5pWw5o2u77yM5q+U5aaC77yaXG4gIFxcYFxcYFxcYHR5cGVzY3JpcHRcbiAgQWxsRnVuY3Rpb24uc2ltdWxhdGVOZXRSZXF1ZXN0KCgpID0+IHtcbiAgICBjb25zb2xlLmxvZygn572R57uc6K+35rGC5a6M5oiQJylcbiAgfSwgMjAwMClcbiAgXFxgXFxgXFxgXG4tIOS4jeW+l+S9v+eUqOS7u+S9leWFtuS7luW3peWFt+WunueOsOe9kee7nOivt+axgueahOaooeaLn++8jOavlOWmgu+8mnNpbXVsYXRlTmV0UmVxdWVzdOetiVxuXG4gIGA7Il19
@@ -1,2 +1,2 @@
1
- export declare const codePromptTemplate = "# \u4F60\u662Ftypescript\u4EE3\u7801\u4E13\u5BB6\uFF0C\u6839\u636E`\u7F16\u5199\u89C4\u5219`\u5E2E\u6211\u5B8C\u6210`src/{{\u529F\u80FD\u6A21\u5757}}/{{\u9875\u9762\u540D\u5B57}}/{{\u9875\u9762\u540D\u5B57}}.ts`\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\u7684\u5F00\u53D1\n\n## \u4EE3\u7801\u89C4\u8303\n- **\u7ED3\u5C3E\u7981\u6B62\u5206\u53F7**\uFF1A\u4E00\u53E5\u4EE3\u7801\u7684\u7ED3\u5C3E\u7981\u6B62\u5199\u5206\u53F7\uFF0C\u4E0D\u9700\u8981\u5199\u5206\u53F7\u7684\n\n## **\u6838\u5FC3\u539F\u5219**\n- \u53EA\u5B9E\u73B0\u9875\u9762\u8DF3\u8F6C\u7684\u4EE3\u7801\uFF0C\u5176\u4ED6\u4EFB\u4F55\u4EE3\u7801\u4E0D\u5141\u8BB8\u7F16\u5199\n- \u7EDD\u5BF9\u7981\u6B62\u6CE8\u91CA\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\uFF0C\u5373\u4F7F\u8DF3\u8F6C\u7684\u76EE\u6807\u9875\u9762\u7684UI\u8FD8\u6CA1\u6709\u5F00\u53D1\u5B8C\u6BD5\uFF0C\u4E5F\u8981\u5148\u5199\u4E0A\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\uFF0C\u5426\u5219\u7528\u6237\u4F1A\u8BA4\u4E3A\u4F60\u6CA1\u6709\u5B9E\u73B0\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\n- \u5FC5\u987B\u8981\u5B8C\u6210\u6240\u6709\u9875\u9762\u7684\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\u5F00\u53D1\u624D\u80FD\u7ED3\u675F\u4EFB\u52A1\uFF0C\u624D\u80FD\u505C\u6B62\u8BE5AI\u4F1A\u8BDD\n\n## **\uD83D\uDEA8 \u4E25\u683C\u7981\u6B62\u4E8B\u9879 - \u9632\u6B62AI\u5927\u6A21\u578B\u9519\u8BEF\u5B9E\u73B0**\n\n### **\u7EDD\u5BF9\u7981\u6B62\u5B9E\u73B0\u7684\u529F\u80FD\u4EE3\u7801**\n- **\u274C \u7981\u6B62\u5B9E\u73B0\u4EFB\u4F55UI\u663E\u793A\u4E0E\u4EA4\u4E92\u903B\u8F91**\uFF1A\u4E0D\u5F97\u7F16\u5199toast\u3001dialog\u3001text\u3001input\u7B49UI\u663E\u793A\u76F8\u5173\u4EE3\u7801\n- **\u274C \u7981\u6B62\u5B9E\u73B0\u975E\u9875\u9762\u8DF3\u8F6C\u7684\u903B\u8F91**\uFF1A\u4E0D\u5F97\u7F16\u5199\u4EFB\u4F55\u4E0E\u9875\u9762\u8DF3\u8F6C\u65E0\u5173\u7684\u903B\u8F91\u4EE3\u7801\n- **\u274C \u7981\u6B62\u5B9E\u73B0\u7F51\u7EDC\u8BF7\u6C42\u903B\u8F91**\uFF1A\u4E0D\u5F97\u7F16\u5199API\u8C03\u7528\u3001\u6570\u636E\u83B7\u53D6\u7B49\u7F51\u7EDC\u76F8\u5173\u65B9\u6CD5\uFF0C\u8BF7\u4F7F\u7528\u5EF6\u65F6\u6267\u884C\u6765\u6A21\u62DF\u8BF7\u6C42\u8FC7\u7A0B\n- **\u274C \u7981\u6B62\u5B9E\u73B0\u72B6\u6001\u7BA1\u7406\u903B\u8F91**\uFF1A\u4E0D\u5F97\u7F16\u5199\u590D\u6742\u7684\u72B6\u6001\u5207\u6362\u3001\u6570\u636E\u7BA1\u7406\u7B49\u72B6\u6001\u65B9\u6CD5\n- **\u274C \u7981\u6B62\u5B9E\u73B0\u4E1A\u52A1\u903B\u8F91\u65B9\u6CD5**\uFF1A\u4E0D\u5F97\u7F16\u5199\u4EFB\u4F55\u4E0E\u9875\u9762\u8DF3\u8F6C\u65E0\u5173\u7684\u4E1A\u52A1\u5904\u7406\u65B9\u6CD5\n\n### **\u53EA\u5141\u8BB8\u5B9E\u73B0\u7684\u4EE3\u7801\u7C7B\u578B**\n- **\u2705 \u7EC4\u4EF6\u58F0\u660E**\uFF1A\u58F0\u660E\u9875\u9762\u4E2D\u53EF\u70B9\u51FB\u7684UI\u7EC4\u4EF6\uFF08\u6309\u94AE\u3001\u94FE\u63A5\u7B49\uFF09\n- **\u2705 \u70B9\u51FB\u4E8B\u4EF6\u7ED1\u5B9A**\uFF1A\u4E3A\u53EF\u70B9\u51FB\u7EC4\u4EF6\u7ED1\u5B9AsetOnClickListener\u4E8B\u4EF6\n- **\u2705 \u9875\u9762\u8DF3\u8F6C\u8C03\u7528**\uFF1A\u5728setOnClickListener\u4E8B\u4EF6\u4E2D\u8C03\u7528AllFunction.startPage(page: Page)\u8FDB\u884C\u9875\u9762\u8DF3\u8F6C\n- **\u2705 \u7B80\u5355\u5EF6\u65F6\u8DF3\u8F6C**\uFF1A\u4F7F\u7528AllFunction.setTimeout\u5B9E\u73B0\u5EF6\u65F6\u8DF3\u8F6C\uFF08\u5982\u95EA\u5C4F\u9875\uFF09\n\n### **\u9519\u8BEF\u5B9E\u73B0\u793A\u4F8B\uFF08\u7EDD\u5BF9\u7981\u6B62\uFF09**\n```typescript\n// \u274C \u9519\u8BEF\uFF1A\u5B9E\u73B0\u4E86Toast\u663E\u793A\u903B\u8F91\nprivate showToast(type: string): void {\n this.loginSuccessToast.visibility = ViewVisibility.VISIBLE\n // ... \u66F4\u591AToast\u903B\u8F91\n}\n\n// \u274C \u9519\u8BEF\uFF1A\u5B9E\u73B0\u4E86\u767B\u5F55\u9A8C\u8BC1\u903B\u8F91\nprivate handleLogin(): void {\n // \u6A21\u62DF\u767B\u5F55\u8FC7\u7A0B\n AllFunction.setTimeout(() => {\n this.showToast('success')\n // ... \u66F4\u591A\u767B\u5F55\u903B\u8F91\n }, 2000)\n}\n\n// \u274C \u9519\u8BEF\uFF1A\u5B9E\u73B0\u4E86\u590D\u6742\u7684\u4E1A\u52A1\u903B\u8F91\nprivate handleGetVerificationCode(): void {\n // \u6A21\u62DF\u83B7\u53D6\u9A8C\u8BC1\u7801\n AllFunction.setTimeout(() => {\n this.showToast('codeSent')\n }, 1000)\n}\n```\n\n### **\u6B63\u786E\u5B9E\u73B0\u793A\u4F8B\uFF08\u4E25\u683C\u9075\u5FAA\uFF09**\n```typescript\n// \u2705 \u6B63\u786E\uFF1A\u53EA\u5B9E\u73B0\u9875\u9762\u8DF3\u8F6C\nexport default class xxxPage extends Page {\n // \u58F0\u660E\u5FC5\u8981\u7684\u53EF\u70B9\u51FB\u7EC4\u4EF6\n private registerLink: ButtonView = this.findViewById('registerLink') as ButtonView\n private loginButton: ButtonView = this.findViewById('loginButton') as ButtonView\n\n private initView(): void {\n // \u53EA\u7ED1\u5B9A\u9875\u9762\u8DF3\u8F6C\u4E8B\u4EF6\n this.registerLink.setOnClickListener(() => {\n AllFunction.startPage(new RegisterPage())\n })\n\n this.loginButton.setOnClickListener(() => {\n AllFunction.startPage(new HomePage())\n })\n }\n}\n```\n\n### **AI\u5927\u6A21\u578B\u5E38\u89C1\u9519\u8BEF\u601D\u7EF4\u6A21\u5F0F**\n1. **\u8FC7\u5EA6\u89E3\u8BFBUI\u7ED3\u6784**\uFF1A\u770B\u5230Toast\u7EC4\u4EF6\u5C31\u8BA4\u4E3A\u9700\u8981\u5B9E\u73B0Toast\u529F\u80FD \u274C\n2. **\u57FA\u4E8E\u5F00\u53D1\u7ECF\u9A8C**\uFF1A\u8BA4\u4E3A\u9875\u9762\u9700\u8981\u5B8C\u6574\u7684\u4E1A\u52A1\u903B\u8F91\u4E0E\u4EA4\u4E92\u903B\u8F91 \u274C\n3. **\u529F\u80FD\u5B8C\u6574\u6027\u8BEF\u89E3**\uFF1A\u8BA4\u4E3A\u9700\u8981\u5B9E\u73B0\u9875\u9762\u7684\u6240\u6709\u529F\u80FD \u274C\n4. **\u5FFD\u7565\u660E\u786E\u6307\u4EE4**\uFF1A\u6CA1\u6709\u4E25\u683C\u9075\u5FAA\"\u53EA\u5B9E\u73B0\u9875\u9762\u8DF3\u8F6C\"\u7684\u8981\u6C42 \u274C\n\n### **\u6B63\u786E\u7684AI\u601D\u7EF4\u6A21\u5F0F**\n1. **\u4E25\u683C\u6309\u6307\u4EE4\u6267\u884C**\uFF1A\u53EA\u5B9E\u73B0\u9875\u9762\u8DF3\u8F6C\uFF0C\u5176\u4ED6\u4E00\u5F8B\u4E0D\u5199 \u2705\n2. **\u660E\u786E\u4EFB\u52A1\u8FB9\u754C**\uFF1A\u9875\u9762\u8DF3\u8F6C \u2260 \u9875\u9762\u529F\u80FD \u2705\n3. **\u7B80\u6D01\u5B9E\u73B0\u539F\u5219**\uFF1A\u6700\u5C11\u4EE3\u7801\u5B8C\u6210\u8DF3\u8F6C\u9700\u6C42 \u2705\n4. **\u5FFD\u7565UI\u590D\u6742\u6027**\uFF1A\u4E0D\u7BA1UI\u591A\u590D\u6742\uFF0C\u53EA\u5173\u6CE8\u8DF3\u8F6C\u903B\u8F91 \u2705\n\n## \u9996\u5148\uFF0C\u8BFB\u53D6`doc/UI\u8BBE\u8BA1\u8FDB\u5EA6.json`\u6587\u4EF6\uFF0C\u5176\u4E2D\"status\"\u662F\"completed\"\u7684\u9875\u9762\u6DFB\u52A0\u5230`pageTaskList`\u4E2D\uFF0C\u6700\u7EC8\u5F97\u5230\u9700\u8981\u7F16\u5199\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\u7684\u9875\u9762\u5217\u8868`pageTaskList`\uFF0C\u5E76\u521B\u5EFA`doc/jumpPageTask.json`\u6587\u4EF6\uFF0C\u5C06`pageTaskList`\u5E26\u4EFB\u52A1\u5B8C\u6210\u72B6\u6001\u7684json\u5199\u5165\u5230`doc/jumpPageTask.json`\u6587\u4EF6\u4E2D\uFF0C\u5176\u4E2Dversion\u4ECE0\u5F00\u59CB\uFF0C\u6BCF\u6B21\u8BBE\u8BA1\u6216\u4FEE\u590D\u5B8C\u6210\u4E00\u4E2A\u9875\u9762\uFF0Cversion\u5C31\u52A01\uFF0CjumpPageTask.json\u6587\u4EF6\u7684json\u7684\u683C\u5F0F\u4E3A\uFF1A\n```json\n{\n \"pageTaskList\": [\n {\n \"pageNameEN\": \"xxxPage\",\n \"pageNameCN\": \"xxx\u9875\u9762\",\n \"versoin\": 1,\n \"status\": \"completed\"\n },\n {\n \"pageNameEN\": \"xxxPage\",\n \"pageNameCN\": \"xxx\u9875\u9762\",\n \"versoin\": 0,\n \"status\": \"pending\"\n }\n ]\n}\n```\n\n## \u7136\u540E\u8C03\u7528todo_write\u5DE5\u5177\u6839\u636E`pageTaskList`\u521B\u5EFA\u4EFB\u52A1\u5217\u8868\uFF0C\u4E00\u4E2A\u9875\u9762\u4E00\u4E2A\u4EFB\u52A1\n\n## \u7136\u540E\uFF0C\u6BCF\u4E00\u4E2A\u9875\u9762\u7684\u5F00\u53D1\u90FD\u5FC5\u987B\u6309\u7167`\u7F16\u5199\u89C4\u5219`\uFF0C\u5E76\u8BFB\u53D6\u9875\u9762UI\u63CF\u8FF0\u6587\u4EF6`src/{\u6A21\u5757\u540D\u5B57}/xxxPage/xxxPage.md`\uFF0C\u7406\u89E3\u9875\u9762\u7684\u7ED3\u6784\u548C\u7EC4\u4EF6\u5143\u7D20\uFF0C\u5B8C\u6210`src/{\u6A21\u5757\u540D\u5B57}/xxxPage/xxxPage.ts`\u7684\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\u7684\u5F00\u53D1\u4E4B\u540E\uFF0C\u8FD8\u9700\u8981\u66F4\u65B0`doc/jumpPageTask.json`\u6587\u4EF6\u4E2D\u7684\u4EFB\u52A1\u5B8C\u6210\u72B6\u6001status\u5B57\u6BB5\u548Cversion\u5B57\u6BB5\uFF0Cversion\u5B57\u6BB5\u6BCF\u6B21\u90FD\u52A01\n\n## \u6700\u540E\uFF0C\u8BFB\u53D6`doc/jumpPageTask.json`\u6587\u4EF6\uFF0C\u5224\u65AD\u662F\u5426\u6240\u6709\u9875\u9762\u7684\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\u90FD\u5F00\u53D1\u5B8C\u6210\uFF0C\u5982\u679C\u5B8C\u6210\u5C31\u7ED3\u675F\u4EFB\u52A1\uFF0C\u5426\u5219\u7EE7\u7EED\u5F00\u53D1\u4E0B\u4E00\u4E2A\u9875\u9762\u7684\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\u4EFB\u52A1\n\n### \u7F16\u5199\u89C4\u5219\n\n#### **\u7406\u89E3View\u7EC4\u4EF6\u7684\u58F0\u660E\u89C4\u5219**\n- \u8FD9\u4E0D\u662Fhtml\u3001react\u7B49\u5F00\u53D1\uFF0C\u8FD9\u662F\u4E00\u4E2A\u65B0\u7684\u5F00\u53D1\u6846\u67B6\uFF0C\u662F\u57FA\u4E8Esrc/lib/uilib\u6587\u4EF6\u5939\u91CC\u9762\u7684UI\u7EC4\u4EF6\u5E93\u6765\u5F00\u53D1\u7684\n- View\u7EC4\u4EF6\u7684\u57FA\u7C7B\u662FBaseView\uFF0C\u5BB9\u5668\u57FA\u7C7B\u662FBaseContainerView\uFF0C\u6240\u6709View\u7EC4\u4EF6\u90FD\u7EE7\u627F\u81EABaseView\n- \u4F7F\u7528\u5DE5\u5177\u904D\u5386'src/lib/uilib/'\u6587\u4EF6\u5939\u4E0B\u9762\u7684\u6587\u4EF6\u5217\u8868\u540D\u5B57\uFF0C\u7406\u89E3\u603B\u5171\u6709\u591A\u5C11\u79CDUI\u7EC4\u4EF6\n- \u4E00\u4E2A\u9875\u9762\u7684\u6240\u6709View\u7684\u4FE1\u606F\u6570\u636E\u90FD\u5728`src/{\u6A21\u5757\u540D\u5B57}/xxxPage/xxxPage.md`\u6587\u4EF6\u4E2D\uFF0C\u8BE5\u6587\u4EF6\u4E2D\u4F1A\u8BE6\u7EC6\u63CF\u8FF0\u6BCF\u4E2AView\u7684\u7C7B\u578B\u3001id\u3001xywh\u7B49\u5C5E\u6027\n- View\u7EC4\u4EF6\u7684\u58F0\u660E\u5FC5\u987B\u5728\u7C7B\u6587\u4EF6\u5F00\u59CB\u65F6\u5148\u58F0\u660E\uFF0C\u5E76\u4E14\u5FC5\u987B\u8981\u58F0\u660E\u5177\u4F53\u7684View\u7EC4\u4EF6\u7C7B\u578B\uFF0C\u4E0D\u5F97\u58F0\u660E\u4E3ABaseView\uFF0C\u4E0D\u5F97\u5728\u4EFB\u4F55\u51FD\u6570\u4F53\u91CC\u9762\u901A\u8FC7findViewById\u6765\u58F0\u660EView\u7EC4\u4EF6\uFF0C\u6BD4\u5982\uFF1A\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n ```typescript\n public class HomePage extends Page {\n private nameTextView: TextView = this.findViewById('nameTextView') as TextView\n ....\n }\n ```\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF08\u6CA1\u6709\u58F0\u5177\u4F53\u7684View\u7EC4\u4EF6\u7C7B\u578B\uFF09\uFF1A\n ```typescript\n private nameTextView = this.findViewById('nameTextView')\n ```\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF08\u5728\u51FD\u6570\u4F53\u91CC\u9762\u901A\u8FC7findViewById\u6765\u58F0\u660EView\u7EC4\u4EF6\uFF09\uFF1A\n ```typescript\n private oneFunction() {\n const nameTextView: TextView = this.findViewById('nameTextView') as TextView\n ....\n }\n ```\n\n#### **\u7406\u89E3\u70B9\u51FB\u4E8B\u4EF6\u7684\u7ED1\u5B9A\u89C4\u5219**\n- \u70B9\u51FB\u4E8B\u4EF6\u7684\u7ED1\u5B9A\u5FC5\u987B\u4F7F\u7528setOnClickListener\u65B9\u6CD5\u5B9E\u73B0\uFF0CsetOnClickListener\u65B9\u6CD5\u4F20\u5165\u4E00\u4E2A\u51FD\u6570\uFF0C\u51FD\u6570\u4E2D\u5B9E\u73B0\u70B9\u51FB\u4E8B\u4EF6\u7684\u903B\u8F91\uFF0C\u6BD4\u5982\uFF1A\n ```typescript\n public class HomePage extends Page {\n private nameTextView: TextView = this.findViewById('nameTextView') as TextView\n ....\n private initView() {\n this.nameTextView.setOnClickListener(() => {\n AllFunction.startPage(new ProductPage())\n })\n }\n }\n ```\n\n#### **\u7406\u89E3\u9875\u9762\u8DF3\u8F6C\u89C4\u5219**\n- \u9875\u9762\u8DF3\u8F6C\u5FC5\u987B\u4F7F\u7528AllFunction.startPage\u5B9E\u73B0\uFF0CstartPage\u4F20\u5165Page\u7684\u5B50\u7C7B\u5BF9\u8C61\uFF0C\u5982\uFF1AAllFunction.startPage(new ProductPage())\u3002\n- \u9875\u9762\u8DF3\u8F6C\u4E0D\u9700\u8003\u8651\u6A21\u5757\u5316\u3001\u5FAA\u73AF\u4F9D\u8D56\u3001\u6E10\u8FDB\u5F0F\u5F00\u53D1\uFF0C\u7EDD\u5BF9\u7981\u6B62\u5C4F\u853D\u9875\u9762\u8DF3\u8F6C\u7684\u4EE3\u7801\uFF0C\u6240\u6709\u9875\u9762\u90FD\u5DF2\u7ECF\u5B58\u5728\uFF0C\u4E0D\u4F1A\u51FA\u73B0\u7F16\u8BD1\u51FA\u9519\u7684\uFF0C\u5FC5\u987B\u660E\u786E\u5199\u4E0A\u9875\u9762\u8DF3\u8F6C\u7684\u4EE3\u7801\u3002\n- \u5728Application.ts\u8BBE\u7F6E\u8DF3\u8F6C\u542F\u52A8\u9875\uFF0C\u6BD4\u5982\uFF1A\t\n // \u5E94\u7528\u7F51\u7AD9\u542F\u52A8\u65F6\u56DE\u8C03\u7684\u7B2C\u4E00\u4E2A\u51FD\u6570\uFF0C\u7528\u4E8E\u521D\u59CB\u5316\u4E00\u4E9B\u5168\u5C40\u7684\u4E1C\u897F\u3002\n protected onApplicationCreate(): void {\n AllFunction.startPage(new SplashPage())\n }\n- \u2705 \u5F15\u5165\u5176\u4ED6\u7C7B\u53EA\u5141\u8BB8\u4E00\u79CD\u5199\u6CD5\uFF1A\u5728\u7C7B\u6587\u4EF6\u9876\u90E8\u8FDB\u884Cimport\uFF1Aimport GuidePage from '../guidePage/guidePage'\u3002\n- \u274C \u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528\u52A8\u6001import\u7684\u5199\u6CD5\uFF0C\u7A0B\u5E8F\u5E95\u5C42\u5DF2\u7ECF\u5904\u7406\u597D\u5FAA\u73AF\u4F9D\u8D56\u95EE\u9898\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u8003\u8651\uFF0C\u6BD4\u5982\u7EDD\u5BF9\u7981\u6B62\u4EE5\u4E0B\u5199\u6CD5\uFF1A\n // \u4F7F\u7528\u52A8\u6001\u5BFC\u5165\u907F\u514D\u5FAA\u73AF\u4F9D\u8D56\n import('../guidePage/guidePage').then(({ default: GuidePage }) => {\n AllFunction.startPage(new GuidePage())\n })\n- \u274C \u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528require\u7684\u5199\u6CD5\uFF0C\u7A0B\u5E8F\u5E95\u5C42\u5DF2\u7ECF\u5904\u7406\u597D\u5FAA\u73AF\u4F9D\u8D56\u95EE\u9898\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u8003\u8651\uFF0C\u6BD4\u5982\u7EDD\u5BF9\u7981\u6B62\u4EE5\u4E0B\u5199\u6CD5\uFF1A\n require('../guidePage/guidePage').default\n- \u2705 \u6B63\u786E\u7684\u5199\u6CD5\u662F\uFF1AAllFunction.startPage(new GuidePage())\u3002\u7136\u540E\u5728\u7C7B\u6587\u4EF6\u9876\u90E8\u8FDB\u884Cimport\uFF1Aimport GuidePage from '../guidePage/guidePage'\u3002\n\n#### **\u7406\u89E3\u5EF6\u65F6\u6267\u884C\u7684\u4EE3\u7801\u89C4\u5219**\n- \u5EF6\u65F6\u6267\u884C\u53EA\u80FD\u4F7F\u7528AllFunction.setTimeout\u5B9E\u73B0\uFF0C\u4E0D\u80FD\u4F7F\u7528setTimeout\u51FD\u6570\uFF0C\u6BD4\u5982\uFF1A\n ```typescript\n AllFunction.setTimeout(() => {\n console.log('\u5EF6\u65F6\u6267\u884C')\n }, 1000)\n ```\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF08\u4F7F\u7528setTimeout\u51FD\u6570\uFF09\uFF1A\n ```typescript\n setTimeout(() => {\n console.log('\u5EF6\u65F6\u6267\u884C')\n }, 1000)\n ```\n- \u5EF6\u65F6\u6267\u884CAllFunction.setTimeout\u7CFB\u7EDF\u4F1A\u81EA\u52A8\u6E05\u7406timeout\uFF0C\u4EE3\u7801\u4E0A\u7EDD\u5BF9\u4E0D\u80FD\u8FDB\u884CcleaTimeout\u7B49\u7C7B\u4F3C\u64CD\u4F5C\uFF0C\u56E0\u6B64setTimeout\u4E5F\u4E0D\u9700\u8981\u58F0\u660E\u53D8\u91CF\u53BB\u63A5\u6536setTimeout\u8FD4\u56DE\u7684\u5F15\u7528\u3002\n\n#### **\u7406\u89E3\u7F51\u7EDC\u8BF7\u6C42\u7684\u6A21\u62DF\u89C4\u5219**\n- \u5173\u4E8E\u7F51\u7EDC\u8BF7\u6C42\u7684\u6A21\u62DF\u8BF7\u4F7F\u7528\u5EF6\u65F6\u6267\u884C\u6765\u6A21\u62DF\u8BF7\u6C42\u8FC7\u7A0B\uFF0C\u56E0\u4E3A\u8FD9\u53EA\u662F\u9875\u9762\u8DF3\u8F6C\u5B9E\u73B0\u4E0D\u9700\u8981\u7F51\u7EDC\u6570\u636E\uFF0C\u6BD4\u5982\uFF1A\n ```typescript\n AllFunction.simulateNetRequest(() => {\n console.log('\u7F51\u7EDC\u8BF7\u6C42\u5B8C\u6210')\n }, 2000)\n ```\n- \u4E0D\u5F97\u4F7F\u7528\u4EFB\u4F55\u5176\u4ED6\u5DE5\u5177\u5B9E\u73B0\u7F51\u7EDC\u8BF7\u6C42\u7684\u6A21\u62DF\uFF0C\u6BD4\u5982\uFF1AsimulateNetRequest\u7B49\n\n ";
1
+ export declare const codePromptTemplate = "# \u4F60\u662Ftypescript\u4EE3\u7801\u4E13\u5BB6\uFF0C\u6839\u636E`\u7F16\u5199\u89C4\u5219`\u5E2E\u6211\u5B8C\u6210`src/{{\u529F\u80FD\u6A21\u5757}}/{{\u9875\u9762\u540D\u5B57}}/{{\u9875\u9762\u540D\u5B57}}.ts`\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\u7684\u5F00\u53D1\n\n## \u4EE3\u7801\u89C4\u8303\n- **\u7ED3\u5C3E\u7981\u6B62\u5206\u53F7**\uFF1A\u4E00\u53E5\u4EE3\u7801\u7684\u7ED3\u5C3E\u7981\u6B62\u5199\u5206\u53F7\uFF0C\u4E0D\u9700\u8981\u5199\u5206\u53F7\u7684\n\n## **\u6838\u5FC3\u539F\u5219**\n- \u53EA\u5B9E\u73B0\u9875\u9762\u8DF3\u8F6C\u548C\u5173\u95ED\u9875\u9762\u7684\u4EE3\u7801\uFF0C\u5176\u4ED6\u4EFB\u4F55\u4EE3\u7801\u4E0D\u5141\u8BB8\u7F16\u5199\n- \u7EDD\u5BF9\u7981\u6B62\u6CE8\u91CA\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\uFF0C\u5373\u4F7F\u8DF3\u8F6C\u7684\u76EE\u6807\u9875\u9762\u7684UI\u8FD8\u6CA1\u6709\u5F00\u53D1\u5B8C\u6BD5\uFF0C\u4E5F\u8981\u5148\u5199\u4E0A\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\uFF0C\u5426\u5219\u7528\u6237\u4F1A\u8BA4\u4E3A\u4F60\u6CA1\u6709\u5B9E\u73B0\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\n- \u5FC5\u987B\u8981\u5B8C\u6210\u6240\u6709\u9875\u9762\u7684\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\u5F00\u53D1\u624D\u80FD\u7ED3\u675F\u4EFB\u52A1\uFF0C\u624D\u80FD\u505C\u6B62\u8BE5AI\u4F1A\u8BDD\n\n## **\uD83D\uDEA8 \u4E25\u683C\u7981\u6B62\u4E8B\u9879 - \u9632\u6B62AI\u5927\u6A21\u578B\u9519\u8BEF\u5B9E\u73B0**\n\n### **\u7EDD\u5BF9\u7981\u6B62\u5B9E\u73B0\u7684\u529F\u80FD\u4EE3\u7801**\n- **\u274C \u7981\u6B62\u5B9E\u73B0\u4EFB\u4F55UI\u663E\u793A\u4E0E\u4EA4\u4E92\u903B\u8F91**\uFF1A\u4E0D\u5F97\u7F16\u5199toast\u3001dialog\u3001text\u3001input\u7B49UI\u663E\u793A\u76F8\u5173\u4EE3\u7801\n- **\u274C \u7981\u6B62\u5B9E\u73B0\u975E\u9875\u9762\u8DF3\u8F6C\u7684\u903B\u8F91**\uFF1A\u4E0D\u5F97\u7F16\u5199\u4EFB\u4F55\u4E0E\u9875\u9762\u8DF3\u8F6C\u65E0\u5173\u7684\u903B\u8F91\u4EE3\u7801\n- **\u274C \u7981\u6B62\u5B9E\u73B0\u7F51\u7EDC\u8BF7\u6C42\u903B\u8F91**\uFF1A\u4E0D\u5F97\u7F16\u5199API\u8C03\u7528\u3001\u6570\u636E\u83B7\u53D6\u7B49\u7F51\u7EDC\u76F8\u5173\u65B9\u6CD5\uFF0C\u8BF7\u4F7F\u7528\u5EF6\u65F6\u6267\u884C\u6765\u6A21\u62DF\u8BF7\u6C42\u8FC7\u7A0B\n- **\u274C \u7981\u6B62\u5B9E\u73B0\u72B6\u6001\u7BA1\u7406\u903B\u8F91**\uFF1A\u4E0D\u5F97\u7F16\u5199\u590D\u6742\u7684\u72B6\u6001\u5207\u6362\u3001\u6570\u636E\u7BA1\u7406\u7B49\u72B6\u6001\u65B9\u6CD5\n- **\u274C \u7981\u6B62\u5B9E\u73B0\u4E1A\u52A1\u903B\u8F91\u65B9\u6CD5**\uFF1A\u4E0D\u5F97\u7F16\u5199\u4EFB\u4F55\u4E0E\u9875\u9762\u8DF3\u8F6C\u65E0\u5173\u7684\u4E1A\u52A1\u5904\u7406\u65B9\u6CD5\n\n### **\u53EA\u5141\u8BB8\u5B9E\u73B0\u7684\u4EE3\u7801\u7C7B\u578B**\n- **\u2705 \u7EC4\u4EF6\u58F0\u660E**\uFF1A\u58F0\u660E\u9875\u9762\u4E2D\u53EF\u70B9\u51FB\u7684UI\u7EC4\u4EF6\uFF08\u6309\u94AE\u3001\u94FE\u63A5\u7B49\uFF09\n- **\u2705 \u70B9\u51FB\u4E8B\u4EF6\u7ED1\u5B9A**\uFF1A\u4E3A\u53EF\u70B9\u51FB\u7EC4\u4EF6\u7ED1\u5B9AsetOnClickListener\u4E8B\u4EF6\n- **\u2705 \u9875\u9762\u8DF3\u8F6C\u8C03\u7528**\uFF1A\u5728setOnClickListener\u4E8B\u4EF6\u4E2D\u8C03\u7528AllFunction.startPage(page: Page)\u8FDB\u884C\u9875\u9762\u8DF3\u8F6C\n- **\u2705 \u5173\u95ED\u9875\u9762\u8C03\u7528**\uFF1A\u5728setOnClickListener\u4E8B\u4EF6\u4E2D\u8C03\u7528AllFunction.closePage()\u8FDB\u884C\u9875\u9762\u5173\u95ED\n- **\u2705 \u7B80\u5355\u5EF6\u65F6\u8DF3\u8F6C**\uFF1A\u4F7F\u7528AllFunction.setTimeout\u5B9E\u73B0\u5EF6\u65F6\u8DF3\u8F6C\uFF08\u5982\u95EA\u5C4F\u9875\uFF09\n\n### **\u9519\u8BEF\u5B9E\u73B0\u793A\u4F8B\uFF08\u7EDD\u5BF9\u7981\u6B62\uFF09**\n```typescript\n// \u274C \u9519\u8BEF\uFF1A\u5B9E\u73B0\u4E86Toast\u663E\u793A\u903B\u8F91\nprivate showToast(type: string): void {\n this.loginSuccessToast.visibility = ViewVisibility.VISIBLE\n // ... \u66F4\u591AToast\u903B\u8F91\n}\n\n// \u274C \u9519\u8BEF\uFF1A\u5B9E\u73B0\u4E86\u767B\u5F55\u9A8C\u8BC1\u903B\u8F91\nprivate handleLogin(): void {\n // \u6A21\u62DF\u767B\u5F55\u8FC7\u7A0B\n AllFunction.setTimeout(() => {\n this.showToast('success')\n // ... \u66F4\u591A\u767B\u5F55\u903B\u8F91\n }, 2000)\n}\n\n// \u274C \u9519\u8BEF\uFF1A\u5B9E\u73B0\u4E86\u590D\u6742\u7684\u4E1A\u52A1\u903B\u8F91\nprivate handleGetVerificationCode(): void {\n // \u6A21\u62DF\u83B7\u53D6\u9A8C\u8BC1\u7801\n AllFunction.setTimeout(() => {\n this.showToast('codeSent')\n }, 1000)\n}\n```\n\n### **\u6B63\u786E\u5B9E\u73B0\u793A\u4F8B\uFF08\u4E25\u683C\u9075\u5FAA\uFF09**\n```typescript\n// \u2705 \u6B63\u786E\uFF1A\u53EA\u5B9E\u73B0\u9875\u9762\u8DF3\u8F6C\nexport default class xxxPage extends Page {\n // \u58F0\u660E\u5FC5\u8981\u7684\u53EF\u70B9\u51FB\u7EC4\u4EF6\n private registerLink: ButtonView = this.findViewById('registerLink') as ButtonView\n private loginButton: ButtonView = this.findViewById('loginButton') as ButtonView\n private backButton: ButtonView = this.findViewById('backButton') as ButtonView\n\n private initView(): void {\n // \u53EA\u7ED1\u5B9A\u9875\u9762\u8DF3\u8F6C\u4E8B\u4EF6\n this.registerLink.setOnClickListener(() => {\n AllFunction.startPage(new RegisterPage())\n })\n\n this.loginButton.setOnClickListener(() => {\n AllFunction.startPage(new HomePage())\n })\n\n this.backButton.setOnClickListener(() => {\n AllFunction.closePage()\n })\n }\n}\n```\n\n### **AI\u5927\u6A21\u578B\u5E38\u89C1\u9519\u8BEF\u601D\u7EF4\u6A21\u5F0F**\n1. **\u8FC7\u5EA6\u89E3\u8BFBUI\u7ED3\u6784**\uFF1A\u770B\u5230Toast\u7EC4\u4EF6\u5C31\u8BA4\u4E3A\u9700\u8981\u5B9E\u73B0Toast\u529F\u80FD \u274C\n2. **\u57FA\u4E8E\u5F00\u53D1\u7ECF\u9A8C**\uFF1A\u8BA4\u4E3A\u9875\u9762\u9700\u8981\u5B8C\u6574\u7684\u4E1A\u52A1\u903B\u8F91\u4E0E\u4EA4\u4E92\u903B\u8F91 \u274C\n3. **\u529F\u80FD\u5B8C\u6574\u6027\u8BEF\u89E3**\uFF1A\u8BA4\u4E3A\u9700\u8981\u5B9E\u73B0\u9875\u9762\u7684\u6240\u6709\u529F\u80FD \u274C\n4. **\u5FFD\u7565\u660E\u786E\u6307\u4EE4**\uFF1A\u6CA1\u6709\u4E25\u683C\u9075\u5FAA\"\u53EA\u5B9E\u73B0\u9875\u9762\u8DF3\u8F6C\"\u7684\u8981\u6C42 \u274C\n\n### **\u6B63\u786E\u7684AI\u601D\u7EF4\u6A21\u5F0F**\n1. **\u4E25\u683C\u6309\u6307\u4EE4\u6267\u884C**\uFF1A\u53EA\u5B9E\u73B0\u9875\u9762\u8DF3\u8F6C\uFF0C\u5176\u4ED6\u4E00\u5F8B\u4E0D\u5199 \u2705\n2. **\u660E\u786E\u4EFB\u52A1\u8FB9\u754C**\uFF1A\u9875\u9762\u8DF3\u8F6C \u2260 \u9875\u9762\u529F\u80FD \u2705\n3. **\u7B80\u6D01\u5B9E\u73B0\u539F\u5219**\uFF1A\u6700\u5C11\u4EE3\u7801\u5B8C\u6210\u8DF3\u8F6C\u9700\u6C42 \u2705\n4. **\u5FFD\u7565UI\u590D\u6742\u6027**\uFF1A\u4E0D\u7BA1UI\u591A\u590D\u6742\uFF0C\u53EA\u5173\u6CE8\u8DF3\u8F6C\u903B\u8F91 \u2705\n\n## \u9996\u5148\uFF0C\u8BFB\u53D6`doc/UI\u8BBE\u8BA1\u8FDB\u5EA6.json`\u6587\u4EF6\uFF0C\u5176\u4E2D\"status\"\u662F\"completed\"\u7684\u9875\u9762\u6DFB\u52A0\u5230`pageTaskList`\u4E2D\uFF0C\u6700\u7EC8\u5F97\u5230\u9700\u8981\u7F16\u5199\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\u7684\u9875\u9762\u5217\u8868`pageTaskList`\uFF0C\u5E76\u521B\u5EFA`doc/jumpPageTask.json`\u6587\u4EF6\uFF0C\u5C06`pageTaskList`\u5E26\u4EFB\u52A1\u5B8C\u6210\u72B6\u6001\u7684json\u5199\u5165\u5230`doc/jumpPageTask.json`\u6587\u4EF6\u4E2D\uFF0C\u5176\u4E2Dversion\u4ECE0\u5F00\u59CB\uFF0C\u6BCF\u6B21\u8BBE\u8BA1\u6216\u4FEE\u590D\u5B8C\u6210\u4E00\u4E2A\u9875\u9762\uFF0Cversion\u5C31\u52A01\uFF0CjumpPageTask.json\u6587\u4EF6\u7684json\u7684\u683C\u5F0F\u4E3A\uFF1A\n```json\n{\n \"pageTaskList\": [\n {\n \"pageNameEN\": \"xxxPage\",\n \"pageNameCN\": \"xxx\u9875\u9762\",\n \"versoin\": 1,\n \"status\": \"completed\"\n },\n {\n \"pageNameEN\": \"xxxPage\",\n \"pageNameCN\": \"xxx\u9875\u9762\",\n \"versoin\": 0,\n \"status\": \"pending\"\n }\n ]\n}\n```\n\n## \u7136\u540E\u8C03\u7528todo_write\u5DE5\u5177\u6839\u636E`pageTaskList`\u521B\u5EFA\u4EFB\u52A1\u5217\u8868\uFF0C\u4E00\u4E2A\u9875\u9762\u4E00\u4E2A\u4EFB\u52A1\n\n## \u7136\u540E\uFF0C\u6BCF\u4E00\u4E2A\u9875\u9762\u7684\u5F00\u53D1\u90FD\u5FC5\u987B\u6309\u7167`\u7F16\u5199\u89C4\u5219`\uFF0C\u5E76\u8BFB\u53D6\u9875\u9762UI\u63CF\u8FF0\u6587\u4EF6`src/{\u6A21\u5757\u540D\u5B57}/xxxPage/xxxPage.md`\uFF0C\u7406\u89E3\u9875\u9762\u7684\u7ED3\u6784\u548C\u7EC4\u4EF6\u5143\u7D20\uFF0C\u5B8C\u6210`src/{\u6A21\u5757\u540D\u5B57}/xxxPage/xxxPage.ts`\u7684\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\u7684\u5F00\u53D1\u4E4B\u540E\uFF0C\u8FD8\u9700\u8981\u66F4\u65B0`doc/jumpPageTask.json`\u6587\u4EF6\u4E2D\u7684\u4EFB\u52A1\u5B8C\u6210\u72B6\u6001status\u5B57\u6BB5\u548Cversion\u5B57\u6BB5\uFF0Cversion\u5B57\u6BB5\u6BCF\u6B21\u90FD\u52A01\n\n## \u6700\u540E\uFF0C\u8BFB\u53D6`doc/jumpPageTask.json`\u6587\u4EF6\uFF0C\u5224\u65AD\u662F\u5426\u6240\u6709\u9875\u9762\u7684\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\u90FD\u5F00\u53D1\u5B8C\u6210\uFF0C\u5982\u679C\u5B8C\u6210\u5C31\u7ED3\u675F\u4EFB\u52A1\uFF0C\u5426\u5219\u7EE7\u7EED\u5F00\u53D1\u4E0B\u4E00\u4E2A\u9875\u9762\u7684\u9875\u9762\u8DF3\u8F6C\u4EE3\u7801\u4EFB\u52A1\n\n### \u7F16\u5199\u89C4\u5219\n\n#### **\u7406\u89E3View\u7EC4\u4EF6\u7684\u58F0\u660E\u89C4\u5219**\n- AllFunction\u7684import\u8BED\u53E5\u5FC5\u987B\u5728\u7C7B\u6587\u4EF6\u5F00\u59CB\u65F6\u5148\u58F0\u660E\uFF0C\u5E76\u4E14import\u4EE3\u7801\u5FC5\u987B\u662F\u8FD9\u6837\u5199\uFF0C\u7279\u522B\u6CE8\u610F\u4E25\u683C\u6309\u7167\u4E0B\u9762\u7ED9\u51FA\u7684\u8DEF\u5F84\u5199\u6CD5\uFF1A\n ```typescript\n import AllFunction from \"../../lib/AllFunction\"\n ```\n- \u8FD9\u4E0D\u662Fhtml\u3001react\u7B49\u5F00\u53D1\uFF0C\u8FD9\u662F\u4E00\u4E2A\u65B0\u7684\u5F00\u53D1\u6846\u67B6\uFF0C\u662F\u57FA\u4E8Esrc/lib/uilib\u6587\u4EF6\u5939\u91CC\u9762\u7684UI\u7EC4\u4EF6\u5E93\u6765\u5F00\u53D1\u7684\n- View\u7EC4\u4EF6\u7684\u57FA\u7C7B\u662FBaseView\uFF0C\u5BB9\u5668\u57FA\u7C7B\u662FBaseContainerView\uFF0C\u6240\u6709View\u7EC4\u4EF6\u90FD\u7EE7\u627F\u81EABaseView\n- \u4F7F\u7528\u5DE5\u5177\u904D\u5386'src/lib/uilib/'\u6587\u4EF6\u5939\u4E0B\u9762\u7684\u6587\u4EF6\u5217\u8868\u540D\u5B57\uFF0C\u7406\u89E3\u603B\u5171\u6709\u591A\u5C11\u79CDUI\u7EC4\u4EF6\n- \u4E00\u4E2A\u9875\u9762\u7684\u6240\u6709View\u7684\u4FE1\u606F\u6570\u636E\u90FD\u5728`src/{\u6A21\u5757\u540D\u5B57}/xxxPage/xxxPage.md`\u6587\u4EF6\u4E2D\uFF0C\u8BE5\u6587\u4EF6\u4E2D\u4F1A\u8BE6\u7EC6\u63CF\u8FF0\u6BCF\u4E2AView\u7684\u7C7B\u578B\u3001id\u3001xywh\u7B49\u5C5E\u6027\n- View\u7EC4\u4EF6\u7684\u58F0\u660E\u5FC5\u987B\u5728\u7C7B\u6587\u4EF6\u5F00\u59CB\u65F6\u5148\u58F0\u660E\uFF0C\u5E76\u4E14\u5FC5\u987B\u8981\u58F0\u660E\u5177\u4F53\u7684View\u7EC4\u4EF6\u7C7B\u578B\uFF0C\u4E0D\u5F97\u58F0\u660E\u4E3ABaseView\uFF0C\u4E0D\u5F97\u5728\u4EFB\u4F55\u51FD\u6570\u4F53\u91CC\u9762\u901A\u8FC7findViewById\u6765\u58F0\u660EView\u7EC4\u4EF6\uFF0C\u6BD4\u5982\uFF1A\n - \u2705 \u6B63\u786E\u7684\u5199\u6CD5\uFF1A\n ```typescript\n public class HomePage extends Page {\n private nameTextView: TextView = this.findViewById('nameTextView') as TextView\n ....\n }\n ```\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF08\u6CA1\u6709\u58F0\u5177\u4F53\u7684View\u7EC4\u4EF6\u7C7B\u578B\uFF09\uFF1A\n ```typescript\n private nameTextView = this.findViewById('nameTextView')\n ```\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF08\u5728\u51FD\u6570\u4F53\u91CC\u9762\u901A\u8FC7findViewById\u6765\u58F0\u660EView\u7EC4\u4EF6\uFF09\uFF1A\n ```typescript\n private oneFunction() {\n const nameTextView: TextView = this.findViewById('nameTextView') as TextView\n ....\n }\n ```\n\n#### **\u7406\u89E3\u70B9\u51FB\u4E8B\u4EF6\u7684\u7ED1\u5B9A\u89C4\u5219**\n- \u70B9\u51FB\u4E8B\u4EF6\u7684\u7ED1\u5B9A\u5FC5\u987B\u4F7F\u7528setOnClickListener\u65B9\u6CD5\u5B9E\u73B0\uFF0CsetOnClickListener\u65B9\u6CD5\u4F20\u5165\u4E00\u4E2A\u51FD\u6570\uFF0C\u51FD\u6570\u4E2D\u5B9E\u73B0\u70B9\u51FB\u4E8B\u4EF6\u7684\u903B\u8F91\uFF0C\u6BD4\u5982\uFF1A\n ```typescript\n public class HomePage extends Page {\n private nameTextView: TextView = this.findViewById('nameTextView') as TextView\n ....\n private initView() {\n this.nameTextView.setOnClickListener(() => {\n AllFunction.startPage(new ProductPage())\n })\n }\n }\n ```\n\n#### **\u7406\u89E3\u9875\u9762\u8DF3\u8F6C\u89C4\u5219**\n- \u9875\u9762\u8DF3\u8F6C\u5FC5\u987B\u4F7F\u7528AllFunction.startPage\u5B9E\u73B0\uFF0CstartPage\u4F20\u5165Page\u7684\u5B50\u7C7B\u5BF9\u8C61\uFF0C\u5982\uFF1AAllFunction.startPage(new ProductPage())\u3002\n- \u9875\u9762\u8DF3\u8F6C\u4E0D\u9700\u8003\u8651\u6A21\u5757\u5316\u3001\u5FAA\u73AF\u4F9D\u8D56\u3001\u6E10\u8FDB\u5F0F\u5F00\u53D1\uFF0C\u7EDD\u5BF9\u7981\u6B62\u5C4F\u853D\u9875\u9762\u8DF3\u8F6C\u7684\u4EE3\u7801\uFF0C\u6240\u6709\u9875\u9762\u90FD\u5DF2\u7ECF\u5B58\u5728\uFF0C\u4E0D\u4F1A\u51FA\u73B0\u7F16\u8BD1\u51FA\u9519\u7684\uFF0C\u5FC5\u987B\u660E\u786E\u5199\u4E0A\u9875\u9762\u8DF3\u8F6C\u7684\u4EE3\u7801\u3002\n- \u5728Application.ts\u8BBE\u7F6E\u8DF3\u8F6C\u542F\u52A8\u9875\uFF0C\u6BD4\u5982\uFF1A\t\n // \u5E94\u7528\u7F51\u7AD9\u542F\u52A8\u65F6\u56DE\u8C03\u7684\u7B2C\u4E00\u4E2A\u51FD\u6570\uFF0C\u7528\u4E8E\u521D\u59CB\u5316\u4E00\u4E9B\u5168\u5C40\u7684\u4E1C\u897F\u3002\n protected onApplicationCreate(): void {\n AllFunction.startPage(new SplashPage())\n }\n- \u2705 \u5F15\u5165\u5176\u4ED6\u7C7B\u53EA\u5141\u8BB8\u4E00\u79CD\u5199\u6CD5\uFF1A\u5728\u7C7B\u6587\u4EF6\u9876\u90E8\u8FDB\u884Cimport\uFF1Aimport GuidePage from '../guidePage/guidePage'\u3002\n- \u274C \u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528\u52A8\u6001import\u7684\u5199\u6CD5\uFF0C\u7A0B\u5E8F\u5E95\u5C42\u5DF2\u7ECF\u5904\u7406\u597D\u5FAA\u73AF\u4F9D\u8D56\u95EE\u9898\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u8003\u8651\uFF0C\u6BD4\u5982\u7EDD\u5BF9\u7981\u6B62\u4EE5\u4E0B\u5199\u6CD5\uFF1A\n // \u4F7F\u7528\u52A8\u6001\u5BFC\u5165\u907F\u514D\u5FAA\u73AF\u4F9D\u8D56\n import('../guidePage/guidePage').then(({ default: GuidePage }) => {\n AllFunction.startPage(new GuidePage())\n })\n- \u274C \u7EDD\u5BF9\u7981\u6B62\u4F7F\u7528require\u7684\u5199\u6CD5\uFF0C\u7A0B\u5E8F\u5E95\u5C42\u5DF2\u7ECF\u5904\u7406\u597D\u5FAA\u73AF\u4F9D\u8D56\u95EE\u9898\u4E86\uFF0C\u4F60\u4E0D\u9700\u8981\u8003\u8651\uFF0C\u6BD4\u5982\u7EDD\u5BF9\u7981\u6B62\u4EE5\u4E0B\u5199\u6CD5\uFF1A\n require('../guidePage/guidePage').default\n- \u2705 \u6B63\u786E\u7684\u5199\u6CD5\u662F\uFF1AAllFunction.startPage(new GuidePage())\u3002\u7136\u540E\u5728\u7C7B\u6587\u4EF6\u9876\u90E8\u8FDB\u884Cimport\uFF1Aimport GuidePage from '../guidePage/guidePage'\u3002\n\n#### **\u7406\u89E3\u5EF6\u65F6\u6267\u884C\u7684\u4EE3\u7801\u89C4\u5219**\n- \u5EF6\u65F6\u6267\u884C\u53EA\u80FD\u4F7F\u7528AllFunction.setTimeout\u5B9E\u73B0\uFF0C\u4E0D\u80FD\u4F7F\u7528setTimeout\u51FD\u6570\uFF0C\u6BD4\u5982\uFF1A\n ```typescript\n AllFunction.setTimeout(() => {\n console.log('\u5EF6\u65F6\u6267\u884C')\n }, 1000)\n ```\n - \u274C \u9519\u8BEF\u7684\u5199\u6CD5\uFF08\u4F7F\u7528setTimeout\u51FD\u6570\uFF09\uFF1A\n ```typescript\n setTimeout(() => {\n console.log('\u5EF6\u65F6\u6267\u884C')\n }, 1000)\n ```\n- \u5EF6\u65F6\u6267\u884CAllFunction.setTimeout\u7CFB\u7EDF\u4F1A\u81EA\u52A8\u6E05\u7406timeout\uFF0C\u4EE3\u7801\u4E0A\u7EDD\u5BF9\u4E0D\u80FD\u8FDB\u884CcleaTimeout\u7B49\u7C7B\u4F3C\u64CD\u4F5C\uFF0C\u56E0\u6B64setTimeout\u4E5F\u4E0D\u9700\u8981\u58F0\u660E\u53D8\u91CF\u53BB\u63A5\u6536setTimeout\u8FD4\u56DE\u7684\u5F15\u7528\u3002\n\n#### **\u7406\u89E3\u7F51\u7EDC\u8BF7\u6C42\u7684\u6A21\u62DF\u89C4\u5219**\n- \u5173\u4E8E\u7F51\u7EDC\u8BF7\u6C42\u7684\u6A21\u62DF\u8BF7\u4F7F\u7528\u5EF6\u65F6\u6267\u884C\u6765\u6A21\u62DF\u8BF7\u6C42\u8FC7\u7A0B\uFF0C\u56E0\u4E3A\u8FD9\u53EA\u662F\u9875\u9762\u8DF3\u8F6C\u5B9E\u73B0\u4E0D\u9700\u8981\u7F51\u7EDC\u6570\u636E\uFF0C\u6BD4\u5982\uFF1A\n ```typescript\n AllFunction.simulateNetRequest(() => {\n console.log('\u7F51\u7EDC\u8BF7\u6C42\u5B8C\u6210')\n }, 2000)\n ```\n- \u4E0D\u5F97\u4F7F\u7528\u4EFB\u4F55\u5176\u4ED6\u5DE5\u5177\u5B9E\u73B0\u7F51\u7EDC\u8BF7\u6C42\u7684\u6A21\u62DF\uFF0C\u6BD4\u5982\uFF1AsimulateNetRequest\u7B49\n\n ";
2
2
  //# sourceMappingURL=jumpPageCode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"jumpPageCode.d.ts","sourceRoot":"","sources":["../src/jumpPageCode.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,u3dAiM5B,CAAC"}
1
+ {"version":3,"file":"jumpPageCode.d.ts","sourceRoot":"","sources":["../src/jumpPageCode.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,gnfA2M5B,CAAC"}
@@ -4,7 +4,7 @@ export const codePromptTemplate = `# 你是typescript代码专家,根据\`编
4
4
  - **结尾禁止分号**:一句代码的结尾禁止写分号,不需要写分号的
5
5
 
6
6
  ## **核心原则**
7
- - 只实现页面跳转的代码,其他任何代码不允许编写
7
+ - 只实现页面跳转和关闭页面的代码,其他任何代码不允许编写
8
8
  - 绝对禁止注释页面跳转代码,即使跳转的目标页面的UI还没有开发完毕,也要先写上页面跳转代码,否则用户会认为你没有实现页面跳转代码
9
9
  - 必须要完成所有页面的页面跳转代码开发才能结束任务,才能停止该AI会话
10
10
 
@@ -21,6 +21,7 @@ export const codePromptTemplate = `# 你是typescript代码专家,根据\`编
21
21
  - **✅ 组件声明**:声明页面中可点击的UI组件(按钮、链接等)
22
22
  - **✅ 点击事件绑定**:为可点击组件绑定setOnClickListener事件
23
23
  - **✅ 页面跳转调用**:在setOnClickListener事件中调用AllFunction.startPage(page: Page)进行页面跳转
24
+ - **✅ 关闭页面调用**:在setOnClickListener事件中调用AllFunction.closePage()进行页面关闭
24
25
  - **✅ 简单延时跳转**:使用AllFunction.setTimeout实现延时跳转(如闪屏页)
25
26
 
26
27
  ### **错误实现示例(绝对禁止)**
@@ -56,6 +57,7 @@ export default class xxxPage extends Page {
56
57
  // 声明必要的可点击组件
57
58
  private registerLink: ButtonView = this.findViewById('registerLink') as ButtonView
58
59
  private loginButton: ButtonView = this.findViewById('loginButton') as ButtonView
60
+ private backButton: ButtonView = this.findViewById('backButton') as ButtonView
59
61
 
60
62
  private initView(): void {
61
63
  // 只绑定页面跳转事件
@@ -66,6 +68,10 @@ export default class xxxPage extends Page {
66
68
  this.loginButton.setOnClickListener(() => {
67
69
  AllFunction.startPage(new HomePage())
68
70
  })
71
+
72
+ this.backButton.setOnClickListener(() => {
73
+ AllFunction.closePage()
74
+ })
69
75
  }
70
76
  }
71
77
  \`\`\`
@@ -111,6 +117,10 @@ export default class xxxPage extends Page {
111
117
  ### 编写规则
112
118
 
113
119
  #### **理解View组件的声明规则**
120
+ - AllFunction的import语句必须在类文件开始时先声明,并且import代码必须是这样写,特别注意严格按照下面给出的路径写法:
121
+ \`\`\`typescript
122
+ import AllFunction from "../../lib/AllFunction"
123
+ \`\`\`
114
124
  - 这不是html、react等开发,这是一个新的开发框架,是基于src/lib/uilib文件夹里面的UI组件库来开发的
115
125
  - View组件的基类是BaseView,容器基类是BaseContainerView,所有View组件都继承自BaseView
116
126
  - 使用工具遍历'src/lib/uilib/'文件夹下面的文件列表名字,理解总共有多少种UI组件
@@ -192,4 +202,4 @@ export default class xxxPage extends Page {
192
202
  - 不得使用任何其他工具实现网络请求的模拟,比如:simulateNetRequest等
193
203
 
194
204
  `;
195
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianVtcFBhZ2VDb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2p1bXBQYWdlQ29kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlNL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBjb2RlUHJvbXB0VGVtcGxhdGUgPSBgIyDkvaDmmK90eXBlc2NyaXB05Luj56CB5LiT5a6277yM5qC55o2uXFxg57yW5YaZ6KeE5YiZXFxg5biu5oiR5a6M5oiQXFxgc3JjL3t75Yqf6IO95qih5Z2XfX0ve3vpobXpnaLlkI3lrZd9fS97e+mhtemdouWQjeWtl319LnRzXFxg6aG16Z2i6Lez6L2s5Luj56CB55qE5byA5Y+RXG5cbiMjIOS7o+eggeinhOiMg1xuLSAqKue7k+WwvuemgeatouWIhuWPtyoq77ya5LiA5Y+l5Luj56CB55qE57uT5bC+56aB5q2i5YaZ5YiG5Y+377yM5LiN6ZyA6KaB5YaZ5YiG5Y+355qEXG5cbiMjICoq5qC45b+D5Y6f5YiZKipcbi0g5Y+q5a6e546w6aG16Z2i6Lez6L2s55qE5Luj56CB77yM5YW25LuW5Lu75L2V5Luj56CB5LiN5YWB6K6457yW5YaZXG4tIOe7neWvueemgeatouazqOmHiumhtemdoui3s+i9rOS7o+egge+8jOWNs+S9v+i3s+i9rOeahOebruagh+mhtemdoueahFVJ6L+Y5rKh5pyJ5byA5Y+R5a6M5q+V77yM5Lmf6KaB5YWI5YaZ5LiK6aG16Z2i6Lez6L2s5Luj56CB77yM5ZCm5YiZ55So5oi35Lya6K6k5Li65L2g5rKh5pyJ5a6e546w6aG16Z2i6Lez6L2s5Luj56CBXG4tIOW/hemhu+imgeWujOaIkOaJgOaciemhtemdoueahOmhtemdoui3s+i9rOS7o+eggeW8gOWPkeaJjeiDvee7k+adn+S7u+WKoe+8jOaJjeiDveWBnOatouivpUFJ5Lya6K+dXG5cbiMjICoq8J+aqCDkuKXmoLznpoHmraLkuovpobkgLSDpmLLmraJBSeWkp+aooeWei+mUmeivr+WunueOsCoqXG5cbiMjIyAqKue7neWvueemgeatouWunueOsOeahOWKn+iDveS7o+eggSoqXG4tICoq4p2MIOemgeatouWunueOsOS7u+S9lVVJ5pi+56S65LiO5Lqk5LqS6YC76L6RKirvvJrkuI3lvpfnvJblhpl0b2FzdOOAgWRpYWxvZ+OAgXRleHTjgIFpbnB1dOetiVVJ5pi+56S655u45YWz5Luj56CBXG4tICoq4p2MIOemgeatouWunueOsOmdnumhtemdoui3s+i9rOeahOmAu+i+kSoq77ya5LiN5b6X57yW5YaZ5Lu75L2V5LiO6aG16Z2i6Lez6L2s5peg5YWz55qE6YC76L6R5Luj56CBXG4tICoq4p2MIOemgeatouWunueOsOe9kee7nOivt+axgumAu+i+kSoq77ya5LiN5b6X57yW5YaZQVBJ6LCD55So44CB5pWw5o2u6I635Y+W562J572R57uc55u45YWz5pa55rOV77yM6K+35L2/55So5bu25pe25omn6KGM5p2l5qih5ouf6K+35rGC6L+H56iLXG4tICoq4p2MIOemgeatouWunueOsOeKtuaAgeeuoeeQhumAu+i+kSoq77ya5LiN5b6X57yW5YaZ5aSN5p2C55qE54q25oCB5YiH5o2i44CB5pWw5o2u566h55CG562J54q25oCB5pa55rOVXG4tICoq4p2MIOemgeatouWunueOsOS4muWKoemAu+i+keaWueazlSoq77ya5LiN5b6X57yW5YaZ5Lu75L2V5LiO6aG16Z2i6Lez6L2s5peg5YWz55qE5Lia5Yqh5aSE55CG5pa55rOVXG5cbiMjIyAqKuWPquWFgeiuuOWunueOsOeahOS7o+eggeexu+WeiyoqXG4tICoq4pyFIOe7hOS7tuWjsOaYjioq77ya5aOw5piO6aG16Z2i5Lit5Y+v54K55Ye755qEVUnnu4Tku7bvvIjmjInpkq7jgIHpk77mjqXnrYnvvIlcbi0gKirinIUg54K55Ye75LqL5Lu257uR5a6aKirvvJrkuLrlj6/ngrnlh7vnu4Tku7bnu5HlrppzZXRPbkNsaWNrTGlzdGVuZXLkuovku7Zcbi0gKirinIUg6aG16Z2i6Lez6L2s6LCD55SoKirvvJrlnKhzZXRPbkNsaWNrTGlzdGVuZXLkuovku7bkuK3osIPnlKhBbGxGdW5jdGlvbi5zdGFydFBhZ2UocGFnZTogUGFnZSnov5vooYzpobXpnaLot7Povaxcbi0gKirinIUg566A5Y2V5bu25pe26Lez6L2sKirvvJrkvb/nlKhBbGxGdW5jdGlvbi5zZXRUaW1lb3V05a6e546w5bu25pe26Lez6L2s77yI5aaC6Zeq5bGP6aG177yJXG5cbiMjIyAqKumUmeivr+WunueOsOekuuS+i++8iOe7neWvueemgeatou+8iSoqXG5cXGBcXGBcXGB0eXBlc2NyaXB0XG4vLyDinYwg6ZSZ6K+v77ya5a6e546w5LqGVG9hc3TmmL7npLrpgLvovpFcbnByaXZhdGUgc2hvd1RvYXN0KHR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubG9naW5TdWNjZXNzVG9hc3QudmlzaWJpbGl0eSA9IFZpZXdWaXNpYmlsaXR5LlZJU0lCTEVcbiAgICAvLyAuLi4g5pu05aSaVG9hc3TpgLvovpFcbn1cblxuLy8g4p2MIOmUmeivr++8muWunueOsOS6hueZu+W9lemqjOivgemAu+i+kVxucHJpdmF0ZSBoYW5kbGVMb2dpbigpOiB2b2lkIHtcbiAgICAvLyDmqKHmi5/nmbvlvZXov4fnqItcbiAgICBBbGxGdW5jdGlvbi5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93VG9hc3QoJ3N1Y2Nlc3MnKVxuICAgICAgICAvLyAuLi4g5pu05aSa55m75b2V6YC76L6RXG4gICAgfSwgMjAwMClcbn1cblxuLy8g4p2MIOmUmeivr++8muWunueOsOS6huWkjeadgueahOS4muWKoemAu+i+kVxucHJpdmF0ZSBoYW5kbGVHZXRWZXJpZmljYXRpb25Db2RlKCk6IHZvaWQge1xuICAgIC8vIOaooeaLn+iOt+WPlumqjOivgeeggVxuICAgIEFsbEZ1bmN0aW9uLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnNob3dUb2FzdCgnY29kZVNlbnQnKVxuICAgIH0sIDEwMDApXG59XG5cXGBcXGBcXGBcblxuIyMjICoq5q2j56Gu5a6e546w56S65L6L77yI5Lil5qC86YG15b6q77yJKipcblxcYFxcYFxcYHR5cGVzY3JpcHRcbi8vIOKchSDmraPnoa7vvJrlj6rlrp7njrDpobXpnaLot7PovaxcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIHh4eFBhZ2UgZXh0ZW5kcyBQYWdlIHtcbiAgICAvLyDlo7DmmI7lv4XopoHnmoTlj6/ngrnlh7vnu4Tku7ZcbiAgICBwcml2YXRlIHJlZ2lzdGVyTGluazogQnV0dG9uVmlldyA9IHRoaXMuZmluZFZpZXdCeUlkKCdyZWdpc3RlckxpbmsnKSBhcyBCdXR0b25WaWV3XG4gICAgcHJpdmF0ZSBsb2dpbkJ1dHRvbjogQnV0dG9uVmlldyA9IHRoaXMuZmluZFZpZXdCeUlkKCdsb2dpbkJ1dHRvbicpIGFzIEJ1dHRvblZpZXdcblxuICAgIHByaXZhdGUgaW5pdFZpZXcoKTogdm9pZCB7XG4gICAgICAgIC8vIOWPque7keWumumhtemdoui3s+i9rOS6i+S7tlxuICAgICAgICB0aGlzLnJlZ2lzdGVyTGluay5zZXRPbkNsaWNrTGlzdGVuZXIoKCkgPT4ge1xuICAgICAgICAgICAgQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBSZWdpc3RlclBhZ2UoKSlcbiAgICAgICAgfSlcblxuICAgICAgICB0aGlzLmxvZ2luQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcigoKSA9PiB7XG4gICAgICAgICAgICBBbGxGdW5jdGlvbi5zdGFydFBhZ2UobmV3IEhvbWVQYWdlKCkpXG4gICAgICAgIH0pXG4gICAgfVxufVxuXFxgXFxgXFxgXG5cbiMjIyAqKkFJ5aSn5qih5Z6L5bi46KeB6ZSZ6K+v5oCd57u05qih5byPKipcbjEuICoq6L+H5bqm6Kej6K+7VUnnu5PmnoQqKu+8mueci+WIsFRvYXN057uE5Lu25bCx6K6k5Li66ZyA6KaB5a6e546wVG9hc3Tlip/og70g4p2MXG4yLiAqKuWfuuS6juW8gOWPkee7j+mqjCoq77ya6K6k5Li66aG16Z2i6ZyA6KaB5a6M5pW055qE5Lia5Yqh6YC76L6R5LiO5Lqk5LqS6YC76L6RIOKdjFxuMy4gKirlip/og73lrozmlbTmgKfor6/op6MqKu+8muiupOS4uumcgOimgeWunueOsOmhtemdoueahOaJgOacieWKn+iDvSDinYxcbjQuICoq5b+955Wl5piO56Gu5oyH5LukKirvvJrmsqHmnInkuKXmoLzpgbXlvqpcIuWPquWunueOsOmhtemdoui3s+i9rFwi55qE6KaB5rGCIOKdjFxuXG4jIyMgKirmraPnoa7nmoRBSeaAnee7tOaooeW8jyoqXG4xLiAqKuS4peagvOaMieaMh+S7pOaJp+ihjCoq77ya5Y+q5a6e546w6aG16Z2i6Lez6L2s77yM5YW25LuW5LiA5b6L5LiN5YaZIOKchVxuMi4gKirmmI7noa7ku7vliqHovrnnlYwqKu+8mumhtemdoui3s+i9rCDiiaAg6aG16Z2i5Yqf6IO9IOKchVxuMy4gKirnroDmtIHlrp7njrDljp/liJkqKu+8muacgOWwkeS7o+eggeWujOaIkOi3s+i9rOmcgOaxgiDinIVcbjQuICoq5b+955WlVUnlpI3mnYLmgKcqKu+8muS4jeeuoVVJ5aSa5aSN5p2C77yM5Y+q5YWz5rOo6Lez6L2s6YC76L6RIOKchVxuXG4jIyDpppblhYjvvIzor7vlj5ZcXGBkb2MvVUnorr7orqHov5vluqYuanNvblxcYOaWh+S7tu+8jOWFtuS4rVwic3RhdHVzXCLmmK9cImNvbXBsZXRlZFwi55qE6aG16Z2i5re75Yqg5YiwXFxgcGFnZVRhc2tMaXN0XFxg5Lit77yM5pyA57uI5b6X5Yiw6ZyA6KaB57yW5YaZ6aG16Z2i6Lez6L2s5Luj56CB55qE6aG16Z2i5YiX6KGoXFxgcGFnZVRhc2tMaXN0XFxg77yM5bm25Yib5bu6XFxgZG9jL2p1bXBQYWdlVGFzay5qc29uXFxg5paH5Lu277yM5bCGXFxgcGFnZVRhc2tMaXN0XFxg5bim5Lu75Yqh5a6M5oiQ54q25oCB55qEanNvbuWGmeWFpeWIsFxcYGRvYy9qdW1wUGFnZVRhc2suanNvblxcYOaWh+S7tuS4re+8jOWFtuS4rXZlcnNpb27ku44w5byA5aeL77yM5q+P5qyh6K6+6K6h5oiW5L+u5aSN5a6M5oiQ5LiA5Liq6aG16Z2i77yMdmVyc2lvbuWwseWKoDHvvIxqdW1wUGFnZVRhc2suanNvbuaWh+S7tueahGpzb27nmoTmoLzlvI/kuLrvvJpcblxcYFxcYFxcYGpzb25cbntcbiAgXCJwYWdlVGFza0xpc3RcIjogW1xuICAgIHtcbiAgICAgIFwicGFnZU5hbWVFTlwiOiBcInh4eFBhZ2VcIixcbiAgICAgIFwicGFnZU5hbWVDTlwiOiBcInh4eOmhtemdolwiLFxuICAgICAgXCJ2ZXJzb2luXCI6IDEsXG4gICAgICBcInN0YXR1c1wiOiBcImNvbXBsZXRlZFwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcInBhZ2VOYW1lRU5cIjogXCJ4eHhQYWdlXCIsXG4gICAgICBcInBhZ2VOYW1lQ05cIjogXCJ4eHjpobXpnaJcIixcbiAgICAgIFwidmVyc29pblwiOiAwLFxuICAgICAgXCJzdGF0dXNcIjogXCJwZW5kaW5nXCJcbiAgICB9XG4gIF1cbn1cblxcYFxcYFxcYFxuXG4jIyDnhLblkI7osIPnlKh0b2RvX3dyaXRl5bel5YW35qC55o2uXFxgcGFnZVRhc2tMaXN0XFxg5Yib5bu65Lu75Yqh5YiX6KGo77yM5LiA5Liq6aG16Z2i5LiA5Liq5Lu75YqhXG5cbiMjIOeEtuWQju+8jOavj+S4gOS4qumhtemdoueahOW8gOWPkemDveW/hemhu+aMieeFp1xcYOe8luWGmeinhOWImVxcYO+8jOW5tuivu+WPlumhtemdolVJ5o+P6L+w5paH5Lu2XFxgc3JjL3vmqKHlnZflkI3lrZd9L3h4eFBhZ2UveHh4UGFnZS5tZFxcYO+8jOeQhuino+mhtemdoueahOe7k+aehOWSjOe7hOS7tuWFg+e0oO+8jOWujOaIkFxcYHNyYy975qih5Z2X5ZCN5a2XfS94eHhQYWdlL3h4eFBhZ2UudHNcXGDnmoTpobXpnaLot7Povazku6PnoIHnmoTlvIDlj5HkuYvlkI7vvIzov5jpnIDopoHmm7TmlrBcXGBkb2MvanVtcFBhZ2VUYXNrLmpzb25cXGDmlofku7bkuK3nmoTku7vliqHlrozmiJDnirbmgIFzdGF0dXPlrZfmrrXlkox2ZXJzaW9u5a2X5q6177yMdmVyc2lvbuWtl+auteavj+asoemDveWKoDFcblxuIyMg5pyA5ZCO77yM6K+75Y+WXFxgZG9jL2p1bXBQYWdlVGFzay5qc29uXFxg5paH5Lu277yM5Yik5pat5piv5ZCm5omA5pyJ6aG16Z2i55qE6aG16Z2i6Lez6L2s5Luj56CB6YO95byA5Y+R5a6M5oiQ77yM5aaC5p6c5a6M5oiQ5bCx57uT5p2f5Lu75Yqh77yM5ZCm5YiZ57un57ut5byA5Y+R5LiL5LiA5Liq6aG16Z2i55qE6aG16Z2i6Lez6L2s5Luj56CB5Lu75YqhXG5cbiMjIyDnvJblhpnop4TliJlcblxuIyMjIyAqKueQhuino1ZpZXfnu4Tku7bnmoTlo7DmmI7op4TliJkqKlxuLSDov5nkuI3mmK9odG1s44CBcmVhY3TnrYnlvIDlj5HvvIzov5nmmK/kuIDkuKrmlrDnmoTlvIDlj5HmoYbmnrbvvIzmmK/ln7rkuo5zcmMvbGliL3VpbGli5paH5Lu25aS56YeM6Z2i55qEVUnnu4Tku7blupPmnaXlvIDlj5HnmoRcbi0gVmlld+e7hOS7tueahOWfuuexu+aYr0Jhc2VWaWV377yM5a655Zmo5Z+657G75pivQmFzZUNvbnRhaW5lclZpZXfvvIzmiYDmnIlWaWV357uE5Lu26YO957un5om/6IeqQmFzZVZpZXdcbi0g5L2/55So5bel5YW36YGN5Y6GJ3NyYy9saWIvdWlsaWIvJ+aWh+S7tuWkueS4i+mdoueahOaWh+S7tuWIl+ihqOWQjeWtl++8jOeQhuino+aAu+WFseacieWkmuWwkeenjVVJ57uE5Lu2XG4tIOS4gOS4qumhtemdoueahOaJgOaciVZpZXfnmoTkv6Hmga/mlbDmja7pg73lnKhcXGBzcmMve+aooeWdl+WQjeWtl30veHh4UGFnZS94eHhQYWdlLm1kXFxg5paH5Lu25Lit77yM6K+l5paH5Lu25Lit5Lya6K+m57uG5o+P6L+w5q+P5LiqVmlld+eahOexu+Wei+OAgWlk44CBeHl3aOetieWxnuaAp1xuLSBWaWV357uE5Lu255qE5aOw5piO5b+F6aG75Zyo57G75paH5Lu25byA5aeL5pe25YWI5aOw5piO77yM5bm25LiU5b+F6aG76KaB5aOw5piO5YW35L2T55qEVmlld+e7hOS7tuexu+Wei++8jOS4jeW+l+WjsOaYjuS4ukJhc2VWaWV377yM5LiN5b6X5Zyo5Lu75L2V5Ye95pWw5L2T6YeM6Z2i6YCa6L+HZmluZFZpZXdCeUlk5p2l5aOw5piOVmlld+e7hOS7tu+8jOavlOWmgu+8mlxuICAtIOKchSDmraPnoa7nmoTlhpnms5XvvJpcbiAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICBwdWJsaWMgY2xhc3MgSG9tZVBhZ2UgZXh0ZW5kcyBQYWdlIHtcbiAgICBwcml2YXRlIG5hbWVUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJZCgnbmFtZVRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICAuLi4uXG4gIH1cbiAgXFxgXFxgXFxgXG4gIC0g4p2MIOmUmeivr+eahOWGmeazle+8iOayoeacieWjsOWFt+S9k+eahFZpZXfnu4Tku7bnsbvlnovvvInvvJpcbiAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICBwcml2YXRlIG5hbWVUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlkKCduYW1lVGV4dFZpZXcnKVxuICBcXGBcXGBcXGBcbiAgLSDinYwg6ZSZ6K+v55qE5YaZ5rOV77yI5Zyo5Ye95pWw5L2T6YeM6Z2i6YCa6L+HZmluZFZpZXdCeUlk5p2l5aOw5piOVmlld+e7hOS7tu+8ie+8mlxuICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gIHByaXZhdGUgb25lRnVuY3Rpb24oKSB7XG4gICAgY29uc3QgbmFtZVRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlkKCduYW1lVGV4dFZpZXcnKSBhcyBUZXh0Vmlld1xuICAgIC4uLi5cbiAgfVxuICBcXGBcXGBcXGBcblxuIyMjIyAqKueQhuino+eCueWHu+S6i+S7tueahOe7keWumuinhOWImSoqXG4tIOeCueWHu+S6i+S7tueahOe7keWumuW/hemhu+S9v+eUqHNldE9uQ2xpY2tMaXN0ZW5lcuaWueazleWunueOsO+8jHNldE9uQ2xpY2tMaXN0ZW5lcuaWueazleS8oOWFpeS4gOS4quWHveaVsO+8jOWHveaVsOS4reWunueOsOeCueWHu+S6i+S7tueahOmAu+i+ke+8jOavlOWmgu+8mlxuICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gIHB1YmxpYyBjbGFzcyBIb21lUGFnZSBleHRlbmRzIFBhZ2Uge1xuICAgIHByaXZhdGUgbmFtZVRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlkKCduYW1lVGV4dFZpZXcnKSBhcyBUZXh0Vmlld1xuICAgIC4uLi5cbiAgICBwcml2YXRlIGluaXRWaWV3KCkge1xuICAgICAgdGhpcy5uYW1lVGV4dFZpZXcuc2V0T25DbGlja0xpc3RlbmVyKCgpID0+IHtcbiAgICAgICAgQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBQcm9kdWN0UGFnZSgpKVxuICAgICAgfSlcbiAgICB9XG4gIH1cbiAgXFxgXFxgXFxgXG5cbiMjIyMgKirnkIbop6PpobXpnaLot7Povazop4TliJkqKlxuLSDpobXpnaLot7Povazlv4Xpobvkvb/nlKhBbGxGdW5jdGlvbi5zdGFydFBhZ2Xlrp7njrDvvIxzdGFydFBhZ2XkvKDlhaVQYWdl55qE5a2Q57G75a+56LGh77yM5aaC77yaQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBQcm9kdWN0UGFnZSgpKeOAglxuLSDpobXpnaLot7PovazkuI3pnIDogIPomZHmqKHlnZfljJbjgIHlvqrnjq/kvp3otZbjgIHmuJDov5vlvI/lvIDlj5HvvIznu53lr7nnpoHmraLlsY/olL3pobXpnaLot7PovaznmoTku6PnoIHvvIzmiYDmnInpobXpnaLpg73lt7Lnu4/lrZjlnKjvvIzkuI3kvJrlh7rnjrDnvJbor5Hlh7rplJnnmoTvvIzlv4XpobvmmI7noa7lhpnkuIrpobXpnaLot7PovaznmoTku6PnoIHjgIJcbi0g5ZyoQXBwbGljYXRpb24udHPorr7nva7ot7PovazlkK/liqjpobXvvIzmr5TlpoLvvJpcdFxuICAvLyDlupTnlKjnvZHnq5nlkK/liqjml7blm57osIPnmoTnrKzkuIDkuKrlh73mlbDvvIznlKjkuo7liJ3lp4vljJbkuIDkupvlhajlsYDnmoTkuJzopb/jgIJcbiAgcHJvdGVjdGVkIG9uQXBwbGljYXRpb25DcmVhdGUoKTogdm9pZCB7XG4gICAgQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBTcGxhc2hQYWdlKCkpXG4gIH1cbi0g4pyFIOW8leWFpeWFtuS7luexu+WPquWFgeiuuOS4gOenjeWGmeazle+8muWcqOexu+aWh+S7tumhtumDqOi/m+ihjGltcG9ydO+8mmltcG9ydCBHdWlkZVBhZ2UgZnJvbSAnLi4vZ3VpZGVQYWdlL2d1aWRlUGFnZSfjgIJcbi0g4p2MIOe7neWvueemgeatouS9v+eUqOWKqOaAgWltcG9ydOeahOWGmeazle+8jOeoi+W6j+W6leWxguW3sue7j+WkhOeQhuWlveW+queOr+S+nei1lumXrumimOS6hu+8jOS9oOS4jemcgOimgeiAg+iZke+8jOavlOWmgue7neWvueemgeatouS7peS4i+WGmeazle+8mlxuICAgICAgLy8g5L2/55So5Yqo5oCB5a+85YWl6YG/5YWN5b6q546v5L6d6LWWXG4gICAgICBpbXBvcnQoJy4uL2d1aWRlUGFnZS9ndWlkZVBhZ2UnKS50aGVuKCh7IGRlZmF1bHQ6IEd1aWRlUGFnZSB9KSA9PiB7XG4gICAgICAgICAgQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBHdWlkZVBhZ2UoKSlcbiAgICAgIH0pXG4tIOKdjCDnu53lr7nnpoHmraLkvb/nlKhyZXF1aXJl55qE5YaZ5rOV77yM56iL5bqP5bqV5bGC5bey57uP5aSE55CG5aW95b6q546v5L6d6LWW6Zeu6aKY5LqG77yM5L2g5LiN6ZyA6KaB6ICD6JmR77yM5q+U5aaC57ud5a+556aB5q2i5Lul5LiL5YaZ5rOV77yaXG4gICAgICByZXF1aXJlKCcuLi9ndWlkZVBhZ2UvZ3VpZGVQYWdlJykuZGVmYXVsdFxuLSDinIUg5q2j56Gu55qE5YaZ5rOV5piv77yaQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBHdWlkZVBhZ2UoKSnjgILnhLblkI7lnKjnsbvmlofku7bpobbpg6jov5vooYxpbXBvcnTvvJppbXBvcnQgR3VpZGVQYWdlIGZyb20gJy4uL2d1aWRlUGFnZS9ndWlkZVBhZ2Un44CCXG5cbiMjIyMgKirnkIbop6Plu7bml7bmiafooYznmoTku6PnoIHop4TliJkqKlxuLSDlu7bml7bmiafooYzlj6rog73kvb/nlKhBbGxGdW5jdGlvbi5zZXRUaW1lb3V05a6e546w77yM5LiN6IO95L2/55Soc2V0VGltZW91dOWHveaVsO+8jOavlOWmgu+8mlxuICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gIEFsbEZ1bmN0aW9uLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCflu7bml7bmiafooYwnKVxuICB9LCAxMDAwKVxuICBcXGBcXGBcXGBcbiAgLSDinYwg6ZSZ6K+v55qE5YaZ5rOV77yI5L2/55Soc2V0VGltZW91dOWHveaVsO+8ie+8mlxuICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCflu7bml7bmiafooYwnKVxuICB9LCAxMDAwKVxuICBcXGBcXGBcXGBcbi0g5bu25pe25omn6KGMQWxsRnVuY3Rpb24uc2V0VGltZW91dOezu+e7n+S8muiHquWKqOa4heeQhnRpbWVvdXTvvIzku6PnoIHkuIrnu53lr7nkuI3og73ov5vooYxjbGVhVGltZW91dOetieexu+S8vOaTjeS9nO+8jOWboOatpHNldFRpbWVvdXTkuZ/kuI3pnIDopoHlo7DmmI7lj5jph4/ljrvmjqXmlLZzZXRUaW1lb3V06L+U5Zue55qE5byV55So44CCXG5cbiMjIyMgKirnkIbop6PnvZHnu5zor7fmsYLnmoTmqKHmi5/op4TliJkqKlxuLSDlhbPkuo7nvZHnu5zor7fmsYLnmoTmqKHmi5/or7fkvb/nlKjlu7bml7bmiafooYzmnaXmqKHmi5/or7fmsYLov4fnqIvvvIzlm6DkuLrov5nlj6rmmK/pobXpnaLot7Povazlrp7njrDkuI3pnIDopoHnvZHnu5zmlbDmja7vvIzmr5TlpoLvvJpcbiAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICBBbGxGdW5jdGlvbi5zaW11bGF0ZU5ldFJlcXVlc3QoKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCfnvZHnu5zor7fmsYLlrozmiJAnKVxuICB9LCAyMDAwKVxuICBcXGBcXGBcXGBcbi0g5LiN5b6X5L2/55So5Lu75L2V5YW25LuW5bel5YW35a6e546w572R57uc6K+35rGC55qE5qih5ouf77yM5q+U5aaC77yac2ltdWxhdGVOZXRSZXF1ZXN0562JXG5cbiAgYDsiXX0=
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianVtcFBhZ2VDb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2p1bXBQYWdlQ29kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyTS9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgY29kZVByb21wdFRlbXBsYXRlID0gYCMg5L2g5pivdHlwZXNjcmlwdOS7o+eggeS4k+Wutu+8jOagueaNrlxcYOe8luWGmeinhOWImVxcYOW4ruaIkeWujOaIkFxcYHNyYy97e+WKn+iDveaooeWdl319L3t76aG16Z2i5ZCN5a2XfX0ve3vpobXpnaLlkI3lrZd9fS50c1xcYOmhtemdoui3s+i9rOS7o+eggeeahOW8gOWPkVxuXG4jIyDku6PnoIHop4TojINcbi0gKirnu5PlsL7npoHmraLliIblj7cqKu+8muS4gOWPpeS7o+eggeeahOe7k+WwvuemgeatouWGmeWIhuWPt++8jOS4jemcgOimgeWGmeWIhuWPt+eahFxuXG4jIyAqKuaguOW/g+WOn+WImSoqXG4tIOWPquWunueOsOmhtemdoui3s+i9rOWSjOWFs+mXremhtemdoueahOS7o+egge+8jOWFtuS7luS7u+S9leS7o+eggeS4jeWFgeiuuOe8luWGmVxuLSDnu53lr7nnpoHmraLms6jph4rpobXpnaLot7Povazku6PnoIHvvIzljbPkvb/ot7PovaznmoTnm67moIfpobXpnaLnmoRVSei/mOayoeacieW8gOWPkeWujOavle+8jOS5n+imgeWFiOWGmeS4iumhtemdoui3s+i9rOS7o+egge+8jOWQpuWImeeUqOaIt+S8muiupOS4uuS9oOayoeacieWunueOsOmhtemdoui3s+i9rOS7o+eggVxuLSDlv4XpobvopoHlrozmiJDmiYDmnInpobXpnaLnmoTpobXpnaLot7Povazku6PnoIHlvIDlj5HmiY3og73nu5PmnZ/ku7vliqHvvIzmiY3og73lgZzmraLor6VBSeS8muivnVxuXG4jIyAqKvCfmqgg5Lil5qC856aB5q2i5LqL6aG5IC0g6Ziy5q2iQUnlpKfmqKHlnovplJnor6/lrp7njrAqKlxuXG4jIyMgKirnu53lr7nnpoHmraLlrp7njrDnmoTlip/og73ku6PnoIEqKlxuLSAqKuKdjCDnpoHmraLlrp7njrDku7vkvZVVSeaYvuekuuS4juS6pOS6kumAu+i+kSoq77ya5LiN5b6X57yW5YaZdG9hc3TjgIFkaWFsb2fjgIF0ZXh044CBaW5wdXTnrYlVSeaYvuekuuebuOWFs+S7o+eggVxuLSAqKuKdjCDnpoHmraLlrp7njrDpnZ7pobXpnaLot7PovaznmoTpgLvovpEqKu+8muS4jeW+l+e8luWGmeS7u+S9leS4jumhtemdoui3s+i9rOaXoOWFs+eahOmAu+i+keS7o+eggVxuLSAqKuKdjCDnpoHmraLlrp7njrDnvZHnu5zor7fmsYLpgLvovpEqKu+8muS4jeW+l+e8luWGmUFQSeiwg+eUqOOAgeaVsOaNruiOt+WPluetiee9kee7nOebuOWFs+aWueazle+8jOivt+S9v+eUqOW7tuaXtuaJp+ihjOadpeaooeaLn+ivt+axgui/h+eoi1xuLSAqKuKdjCDnpoHmraLlrp7njrDnirbmgIHnrqHnkIbpgLvovpEqKu+8muS4jeW+l+e8luWGmeWkjeadgueahOeKtuaAgeWIh+aNouOAgeaVsOaNrueuoeeQhuetieeKtuaAgeaWueazlVxuLSAqKuKdjCDnpoHmraLlrp7njrDkuJrliqHpgLvovpHmlrnms5UqKu+8muS4jeW+l+e8luWGmeS7u+S9leS4jumhtemdoui3s+i9rOaXoOWFs+eahOS4muWKoeWkhOeQhuaWueazlVxuXG4jIyMgKirlj6rlhYHorrjlrp7njrDnmoTku6PnoIHnsbvlnosqKlxuLSAqKuKchSDnu4Tku7blo7DmmI4qKu+8muWjsOaYjumhtemdouS4reWPr+eCueWHu+eahFVJ57uE5Lu277yI5oyJ6ZKu44CB6ZO+5o6l562J77yJXG4tICoq4pyFIOeCueWHu+S6i+S7tue7keWumioq77ya5Li65Y+v54K55Ye757uE5Lu257uR5a6ac2V0T25DbGlja0xpc3RlbmVy5LqL5Lu2XG4tICoq4pyFIOmhtemdoui3s+i9rOiwg+eUqCoq77ya5Zyoc2V0T25DbGlja0xpc3RlbmVy5LqL5Lu25Lit6LCD55SoQWxsRnVuY3Rpb24uc3RhcnRQYWdlKHBhZ2U6IFBhZ2Up6L+b6KGM6aG16Z2i6Lez6L2sXG4tICoq4pyFIOWFs+mXremhtemdouiwg+eUqCoq77ya5Zyoc2V0T25DbGlja0xpc3RlbmVy5LqL5Lu25Lit6LCD55SoQWxsRnVuY3Rpb24uY2xvc2VQYWdlKCnov5vooYzpobXpnaLlhbPpl61cbi0gKirinIUg566A5Y2V5bu25pe26Lez6L2sKirvvJrkvb/nlKhBbGxGdW5jdGlvbi5zZXRUaW1lb3V05a6e546w5bu25pe26Lez6L2s77yI5aaC6Zeq5bGP6aG177yJXG5cbiMjIyAqKumUmeivr+WunueOsOekuuS+i++8iOe7neWvueemgeatou+8iSoqXG5cXGBcXGBcXGB0eXBlc2NyaXB0XG4vLyDinYwg6ZSZ6K+v77ya5a6e546w5LqGVG9hc3TmmL7npLrpgLvovpFcbnByaXZhdGUgc2hvd1RvYXN0KHR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubG9naW5TdWNjZXNzVG9hc3QudmlzaWJpbGl0eSA9IFZpZXdWaXNpYmlsaXR5LlZJU0lCTEVcbiAgICAvLyAuLi4g5pu05aSaVG9hc3TpgLvovpFcbn1cblxuLy8g4p2MIOmUmeivr++8muWunueOsOS6hueZu+W9lemqjOivgemAu+i+kVxucHJpdmF0ZSBoYW5kbGVMb2dpbigpOiB2b2lkIHtcbiAgICAvLyDmqKHmi5/nmbvlvZXov4fnqItcbiAgICBBbGxGdW5jdGlvbi5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93VG9hc3QoJ3N1Y2Nlc3MnKVxuICAgICAgICAvLyAuLi4g5pu05aSa55m75b2V6YC76L6RXG4gICAgfSwgMjAwMClcbn1cblxuLy8g4p2MIOmUmeivr++8muWunueOsOS6huWkjeadgueahOS4muWKoemAu+i+kVxucHJpdmF0ZSBoYW5kbGVHZXRWZXJpZmljYXRpb25Db2RlKCk6IHZvaWQge1xuICAgIC8vIOaooeaLn+iOt+WPlumqjOivgeeggVxuICAgIEFsbEZ1bmN0aW9uLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnNob3dUb2FzdCgnY29kZVNlbnQnKVxuICAgIH0sIDEwMDApXG59XG5cXGBcXGBcXGBcblxuIyMjICoq5q2j56Gu5a6e546w56S65L6L77yI5Lil5qC86YG15b6q77yJKipcblxcYFxcYFxcYHR5cGVzY3JpcHRcbi8vIOKchSDmraPnoa7vvJrlj6rlrp7njrDpobXpnaLot7PovaxcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIHh4eFBhZ2UgZXh0ZW5kcyBQYWdlIHtcbiAgICAvLyDlo7DmmI7lv4XopoHnmoTlj6/ngrnlh7vnu4Tku7ZcbiAgICBwcml2YXRlIHJlZ2lzdGVyTGluazogQnV0dG9uVmlldyA9IHRoaXMuZmluZFZpZXdCeUlkKCdyZWdpc3RlckxpbmsnKSBhcyBCdXR0b25WaWV3XG4gICAgcHJpdmF0ZSBsb2dpbkJ1dHRvbjogQnV0dG9uVmlldyA9IHRoaXMuZmluZFZpZXdCeUlkKCdsb2dpbkJ1dHRvbicpIGFzIEJ1dHRvblZpZXdcbiAgICBwcml2YXRlIGJhY2tCdXR0b246IEJ1dHRvblZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJZCgnYmFja0J1dHRvbicpIGFzIEJ1dHRvblZpZXdcblxuICAgIHByaXZhdGUgaW5pdFZpZXcoKTogdm9pZCB7XG4gICAgICAgIC8vIOWPque7keWumumhtemdoui3s+i9rOS6i+S7tlxuICAgICAgICB0aGlzLnJlZ2lzdGVyTGluay5zZXRPbkNsaWNrTGlzdGVuZXIoKCkgPT4ge1xuICAgICAgICAgICAgQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBSZWdpc3RlclBhZ2UoKSlcbiAgICAgICAgfSlcblxuICAgICAgICB0aGlzLmxvZ2luQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcigoKSA9PiB7XG4gICAgICAgICAgICBBbGxGdW5jdGlvbi5zdGFydFBhZ2UobmV3IEhvbWVQYWdlKCkpXG4gICAgICAgIH0pXG5cbiAgICAgICAgdGhpcy5iYWNrQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcigoKSA9PiB7XG4gICAgICAgICAgICBBbGxGdW5jdGlvbi5jbG9zZVBhZ2UoKVxuICAgICAgICB9KVxuICAgIH1cbn1cblxcYFxcYFxcYFxuXG4jIyMgKipBSeWkp+aooeWei+W4uOingemUmeivr+aAnee7tOaooeW8jyoqXG4xLiAqKui/h+W6puino+ivu1VJ57uT5p6EKirvvJrnnIvliLBUb2FzdOe7hOS7tuWwseiupOS4uumcgOimgeWunueOsFRvYXN05Yqf6IO9IOKdjFxuMi4gKirln7rkuo7lvIDlj5Hnu4/pqowqKu+8muiupOS4uumhtemdoumcgOimgeWujOaVtOeahOS4muWKoemAu+i+keS4juS6pOS6kumAu+i+kSDinYxcbjMuICoq5Yqf6IO95a6M5pW05oCn6K+v6KejKirvvJrorqTkuLrpnIDopoHlrp7njrDpobXpnaLnmoTmiYDmnInlip/og70g4p2MXG40LiAqKuW/veeVpeaYjuehruaMh+S7pCoq77ya5rKh5pyJ5Lil5qC86YG15b6qXCLlj6rlrp7njrDpobXpnaLot7PovaxcIueahOimgeaxgiDinYxcblxuIyMjICoq5q2j56Gu55qEQUnmgJ3nu7TmqKHlvI8qKlxuMS4gKirkuKXmoLzmjInmjIfku6TmiafooYwqKu+8muWPquWunueOsOmhtemdoui3s+i9rO+8jOWFtuS7luS4gOW+i+S4jeWGmSDinIVcbjIuICoq5piO56Gu5Lu75Yqh6L6555WMKirvvJrpobXpnaLot7Povawg4omgIOmhtemdouWKn+iDvSDinIVcbjMuICoq566A5rSB5a6e546w5Y6f5YiZKirvvJrmnIDlsJHku6PnoIHlrozmiJDot7PovazpnIDmsYIg4pyFXG40LiAqKuW/veeVpVVJ5aSN5p2C5oCnKirvvJrkuI3nrqFVSeWkmuWkjeadgu+8jOWPquWFs+azqOi3s+i9rOmAu+i+kSDinIVcblxuIyMg6aaW5YWI77yM6K+75Y+WXFxgZG9jL1VJ6K6+6K6h6L+b5bqmLmpzb25cXGDmlofku7bvvIzlhbbkuK1cInN0YXR1c1wi5pivXCJjb21wbGV0ZWRcIueahOmhtemdoua3u+WKoOWIsFxcYHBhZ2VUYXNrTGlzdFxcYOS4re+8jOacgOe7iOW+l+WIsOmcgOimgee8luWGmemhtemdoui3s+i9rOS7o+eggeeahOmhtemdouWIl+ihqFxcYHBhZ2VUYXNrTGlzdFxcYO+8jOW5tuWIm+W7ulxcYGRvYy9qdW1wUGFnZVRhc2suanNvblxcYOaWh+S7tu+8jOWwhlxcYHBhZ2VUYXNrTGlzdFxcYOW4puS7u+WKoeWujOaIkOeKtuaAgeeahGpzb27lhpnlhaXliLBcXGBkb2MvanVtcFBhZ2VUYXNrLmpzb25cXGDmlofku7bkuK3vvIzlhbbkuK12ZXJzaW9u5LuOMOW8gOWni++8jOavj+asoeiuvuiuoeaIluS/ruWkjeWujOaIkOS4gOS4qumhtemdou+8jHZlcnNpb27lsLHliqAx77yManVtcFBhZ2VUYXNrLmpzb27mlofku7bnmoRqc29u55qE5qC85byP5Li677yaXG5cXGBcXGBcXGBqc29uXG57XG4gIFwicGFnZVRhc2tMaXN0XCI6IFtcbiAgICB7XG4gICAgICBcInBhZ2VOYW1lRU5cIjogXCJ4eHhQYWdlXCIsXG4gICAgICBcInBhZ2VOYW1lQ05cIjogXCJ4eHjpobXpnaJcIixcbiAgICAgIFwidmVyc29pblwiOiAxLFxuICAgICAgXCJzdGF0dXNcIjogXCJjb21wbGV0ZWRcIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJwYWdlTmFtZUVOXCI6IFwieHh4UGFnZVwiLFxuICAgICAgXCJwYWdlTmFtZUNOXCI6IFwieHh46aG16Z2iXCIsXG4gICAgICBcInZlcnNvaW5cIjogMCxcbiAgICAgIFwic3RhdHVzXCI6IFwicGVuZGluZ1wiXG4gICAgfVxuICBdXG59XG5cXGBcXGBcXGBcblxuIyMg54S25ZCO6LCD55SodG9kb193cml0ZeW3peWFt+agueaNrlxcYHBhZ2VUYXNrTGlzdFxcYOWIm+W7uuS7u+WKoeWIl+ihqO+8jOS4gOS4qumhtemdouS4gOS4quS7u+WKoVxuXG4jIyDnhLblkI7vvIzmr4/kuIDkuKrpobXpnaLnmoTlvIDlj5Hpg73lv4XpobvmjInnhadcXGDnvJblhpnop4TliJlcXGDvvIzlubbor7vlj5bpobXpnaJVSeaPj+i/sOaWh+S7tlxcYHNyYy975qih5Z2X5ZCN5a2XfS94eHhQYWdlL3h4eFBhZ2UubWRcXGDvvIznkIbop6PpobXpnaLnmoTnu5PmnoTlkoznu4Tku7blhYPntKDvvIzlrozmiJBcXGBzcmMve+aooeWdl+WQjeWtl30veHh4UGFnZS94eHhQYWdlLnRzXFxg55qE6aG16Z2i6Lez6L2s5Luj56CB55qE5byA5Y+R5LmL5ZCO77yM6L+Y6ZyA6KaB5pu05pawXFxgZG9jL2p1bXBQYWdlVGFzay5qc29uXFxg5paH5Lu25Lit55qE5Lu75Yqh5a6M5oiQ54q25oCBc3RhdHVz5a2X5q615ZKMdmVyc2lvbuWtl+aute+8jHZlcnNpb27lrZfmrrXmr4/mrKHpg73liqAxXG5cbiMjIOacgOWQju+8jOivu+WPllxcYGRvYy9qdW1wUGFnZVRhc2suanNvblxcYOaWh+S7tu+8jOWIpOaWreaYr+WQpuaJgOaciemhtemdoueahOmhtemdoui3s+i9rOS7o+eggemDveW8gOWPkeWujOaIkO+8jOWmguaenOWujOaIkOWwsee7k+adn+S7u+WKoe+8jOWQpuWImee7p+e7reW8gOWPkeS4i+S4gOS4qumhtemdoueahOmhtemdoui3s+i9rOS7o+eggeS7u+WKoVxuXG4jIyMg57yW5YaZ6KeE5YiZXG5cbiMjIyMgKirnkIbop6NWaWV357uE5Lu255qE5aOw5piO6KeE5YiZKipcbi0gQWxsRnVuY3Rpb27nmoRpbXBvcnTor63lj6Xlv4XpobvlnKjnsbvmlofku7blvIDlp4vml7blhYjlo7DmmI7vvIzlubbkuJRpbXBvcnTku6PnoIHlv4XpobvmmK/ov5nmoLflhpnvvIznibnliKvms6jmhI/kuKXmoLzmjInnhafkuIvpnaLnu5nlh7rnmoTot6/lvoTlhpnms5XvvJpcbiAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICBpbXBvcnQgQWxsRnVuY3Rpb24gZnJvbSBcIi4uLy4uL2xpYi9BbGxGdW5jdGlvblwiXG4gIFxcYFxcYFxcYFxuLSDov5nkuI3mmK9odG1s44CBcmVhY3TnrYnlvIDlj5HvvIzov5nmmK/kuIDkuKrmlrDnmoTlvIDlj5HmoYbmnrbvvIzmmK/ln7rkuo5zcmMvbGliL3VpbGli5paH5Lu25aS56YeM6Z2i55qEVUnnu4Tku7blupPmnaXlvIDlj5HnmoRcbi0gVmlld+e7hOS7tueahOWfuuexu+aYr0Jhc2VWaWV377yM5a655Zmo5Z+657G75pivQmFzZUNvbnRhaW5lclZpZXfvvIzmiYDmnIlWaWV357uE5Lu26YO957un5om/6IeqQmFzZVZpZXdcbi0g5L2/55So5bel5YW36YGN5Y6GJ3NyYy9saWIvdWlsaWIvJ+aWh+S7tuWkueS4i+mdoueahOaWh+S7tuWIl+ihqOWQjeWtl++8jOeQhuino+aAu+WFseacieWkmuWwkeenjVVJ57uE5Lu2XG4tIOS4gOS4qumhtemdoueahOaJgOaciVZpZXfnmoTkv6Hmga/mlbDmja7pg73lnKhcXGBzcmMve+aooeWdl+WQjeWtl30veHh4UGFnZS94eHhQYWdlLm1kXFxg5paH5Lu25Lit77yM6K+l5paH5Lu25Lit5Lya6K+m57uG5o+P6L+w5q+P5LiqVmlld+eahOexu+Wei+OAgWlk44CBeHl3aOetieWxnuaAp1xuLSBWaWV357uE5Lu255qE5aOw5piO5b+F6aG75Zyo57G75paH5Lu25byA5aeL5pe25YWI5aOw5piO77yM5bm25LiU5b+F6aG76KaB5aOw5piO5YW35L2T55qEVmlld+e7hOS7tuexu+Wei++8jOS4jeW+l+WjsOaYjuS4ukJhc2VWaWV377yM5LiN5b6X5Zyo5Lu75L2V5Ye95pWw5L2T6YeM6Z2i6YCa6L+HZmluZFZpZXdCeUlk5p2l5aOw5piOVmlld+e7hOS7tu+8jOavlOWmgu+8mlxuICAtIOKchSDmraPnoa7nmoTlhpnms5XvvJpcbiAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICBwdWJsaWMgY2xhc3MgSG9tZVBhZ2UgZXh0ZW5kcyBQYWdlIHtcbiAgICBwcml2YXRlIG5hbWVUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJZCgnbmFtZVRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICAuLi4uXG4gIH1cbiAgXFxgXFxgXFxgXG4gIC0g4p2MIOmUmeivr+eahOWGmeazle+8iOayoeacieWjsOWFt+S9k+eahFZpZXfnu4Tku7bnsbvlnovvvInvvJpcbiAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICBwcml2YXRlIG5hbWVUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlkKCduYW1lVGV4dFZpZXcnKVxuICBcXGBcXGBcXGBcbiAgLSDinYwg6ZSZ6K+v55qE5YaZ5rOV77yI5Zyo5Ye95pWw5L2T6YeM6Z2i6YCa6L+HZmluZFZpZXdCeUlk5p2l5aOw5piOVmlld+e7hOS7tu+8ie+8mlxuICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gIHByaXZhdGUgb25lRnVuY3Rpb24oKSB7XG4gICAgY29uc3QgbmFtZVRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlkKCduYW1lVGV4dFZpZXcnKSBhcyBUZXh0Vmlld1xuICAgIC4uLi5cbiAgfVxuICBcXGBcXGBcXGBcblxuIyMjIyAqKueQhuino+eCueWHu+S6i+S7tueahOe7keWumuinhOWImSoqXG4tIOeCueWHu+S6i+S7tueahOe7keWumuW/hemhu+S9v+eUqHNldE9uQ2xpY2tMaXN0ZW5lcuaWueazleWunueOsO+8jHNldE9uQ2xpY2tMaXN0ZW5lcuaWueazleS8oOWFpeS4gOS4quWHveaVsO+8jOWHveaVsOS4reWunueOsOeCueWHu+S6i+S7tueahOmAu+i+ke+8jOavlOWmgu+8mlxuICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gIHB1YmxpYyBjbGFzcyBIb21lUGFnZSBleHRlbmRzIFBhZ2Uge1xuICAgIHByaXZhdGUgbmFtZVRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlkKCduYW1lVGV4dFZpZXcnKSBhcyBUZXh0Vmlld1xuICAgIC4uLi5cbiAgICBwcml2YXRlIGluaXRWaWV3KCkge1xuICAgICAgdGhpcy5uYW1lVGV4dFZpZXcuc2V0T25DbGlja0xpc3RlbmVyKCgpID0+IHtcbiAgICAgICAgQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBQcm9kdWN0UGFnZSgpKVxuICAgICAgfSlcbiAgICB9XG4gIH1cbiAgXFxgXFxgXFxgXG5cbiMjIyMgKirnkIbop6PpobXpnaLot7Povazop4TliJkqKlxuLSDpobXpnaLot7Povazlv4Xpobvkvb/nlKhBbGxGdW5jdGlvbi5zdGFydFBhZ2Xlrp7njrDvvIxzdGFydFBhZ2XkvKDlhaVQYWdl55qE5a2Q57G75a+56LGh77yM5aaC77yaQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBQcm9kdWN0UGFnZSgpKeOAglxuLSDpobXpnaLot7PovazkuI3pnIDogIPomZHmqKHlnZfljJbjgIHlvqrnjq/kvp3otZbjgIHmuJDov5vlvI/lvIDlj5HvvIznu53lr7nnpoHmraLlsY/olL3pobXpnaLot7PovaznmoTku6PnoIHvvIzmiYDmnInpobXpnaLpg73lt7Lnu4/lrZjlnKjvvIzkuI3kvJrlh7rnjrDnvJbor5Hlh7rplJnnmoTvvIzlv4XpobvmmI7noa7lhpnkuIrpobXpnaLot7PovaznmoTku6PnoIHjgIJcbi0g5ZyoQXBwbGljYXRpb24udHPorr7nva7ot7PovazlkK/liqjpobXvvIzmr5TlpoLvvJpcdFxuICAvLyDlupTnlKjnvZHnq5nlkK/liqjml7blm57osIPnmoTnrKzkuIDkuKrlh73mlbDvvIznlKjkuo7liJ3lp4vljJbkuIDkupvlhajlsYDnmoTkuJzopb/jgIJcbiAgcHJvdGVjdGVkIG9uQXBwbGljYXRpb25DcmVhdGUoKTogdm9pZCB7XG4gICAgQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBTcGxhc2hQYWdlKCkpXG4gIH1cbi0g4pyFIOW8leWFpeWFtuS7luexu+WPquWFgeiuuOS4gOenjeWGmeazle+8muWcqOexu+aWh+S7tumhtumDqOi/m+ihjGltcG9ydO+8mmltcG9ydCBHdWlkZVBhZ2UgZnJvbSAnLi4vZ3VpZGVQYWdlL2d1aWRlUGFnZSfjgIJcbi0g4p2MIOe7neWvueemgeatouS9v+eUqOWKqOaAgWltcG9ydOeahOWGmeazle+8jOeoi+W6j+W6leWxguW3sue7j+WkhOeQhuWlveW+queOr+S+nei1lumXrumimOS6hu+8jOS9oOS4jemcgOimgeiAg+iZke+8jOavlOWmgue7neWvueemgeatouS7peS4i+WGmeazle+8mlxuICAgICAgLy8g5L2/55So5Yqo5oCB5a+85YWl6YG/5YWN5b6q546v5L6d6LWWXG4gICAgICBpbXBvcnQoJy4uL2d1aWRlUGFnZS9ndWlkZVBhZ2UnKS50aGVuKCh7IGRlZmF1bHQ6IEd1aWRlUGFnZSB9KSA9PiB7XG4gICAgICAgICAgQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBHdWlkZVBhZ2UoKSlcbiAgICAgIH0pXG4tIOKdjCDnu53lr7nnpoHmraLkvb/nlKhyZXF1aXJl55qE5YaZ5rOV77yM56iL5bqP5bqV5bGC5bey57uP5aSE55CG5aW95b6q546v5L6d6LWW6Zeu6aKY5LqG77yM5L2g5LiN6ZyA6KaB6ICD6JmR77yM5q+U5aaC57ud5a+556aB5q2i5Lul5LiL5YaZ5rOV77yaXG4gICAgICByZXF1aXJlKCcuLi9ndWlkZVBhZ2UvZ3VpZGVQYWdlJykuZGVmYXVsdFxuLSDinIUg5q2j56Gu55qE5YaZ5rOV5piv77yaQWxsRnVuY3Rpb24uc3RhcnRQYWdlKG5ldyBHdWlkZVBhZ2UoKSnjgILnhLblkI7lnKjnsbvmlofku7bpobbpg6jov5vooYxpbXBvcnTvvJppbXBvcnQgR3VpZGVQYWdlIGZyb20gJy4uL2d1aWRlUGFnZS9ndWlkZVBhZ2Un44CCXG5cbiMjIyMgKirnkIbop6Plu7bml7bmiafooYznmoTku6PnoIHop4TliJkqKlxuLSDlu7bml7bmiafooYzlj6rog73kvb/nlKhBbGxGdW5jdGlvbi5zZXRUaW1lb3V05a6e546w77yM5LiN6IO95L2/55Soc2V0VGltZW91dOWHveaVsO+8jOavlOWmgu+8mlxuICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gIEFsbEZ1bmN0aW9uLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCflu7bml7bmiafooYwnKVxuICB9LCAxMDAwKVxuICBcXGBcXGBcXGBcbiAgLSDinYwg6ZSZ6K+v55qE5YaZ5rOV77yI5L2/55Soc2V0VGltZW91dOWHveaVsO+8ie+8mlxuICBcXGBcXGBcXGB0eXBlc2NyaXB0XG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCflu7bml7bmiafooYwnKVxuICB9LCAxMDAwKVxuICBcXGBcXGBcXGBcbi0g5bu25pe25omn6KGMQWxsRnVuY3Rpb24uc2V0VGltZW91dOezu+e7n+S8muiHquWKqOa4heeQhnRpbWVvdXTvvIzku6PnoIHkuIrnu53lr7nkuI3og73ov5vooYxjbGVhVGltZW91dOetieexu+S8vOaTjeS9nO+8jOWboOatpHNldFRpbWVvdXTkuZ/kuI3pnIDopoHlo7DmmI7lj5jph4/ljrvmjqXmlLZzZXRUaW1lb3V06L+U5Zue55qE5byV55So44CCXG5cbiMjIyMgKirnkIbop6PnvZHnu5zor7fmsYLnmoTmqKHmi5/op4TliJkqKlxuLSDlhbPkuo7nvZHnu5zor7fmsYLnmoTmqKHmi5/or7fkvb/nlKjlu7bml7bmiafooYzmnaXmqKHmi5/or7fmsYLov4fnqIvvvIzlm6DkuLrov5nlj6rmmK/pobXpnaLot7Povazlrp7njrDkuI3pnIDopoHnvZHnu5zmlbDmja7vvIzmr5TlpoLvvJpcbiAgXFxgXFxgXFxgdHlwZXNjcmlwdFxuICBBbGxGdW5jdGlvbi5zaW11bGF0ZU5ldFJlcXVlc3QoKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCfnvZHnu5zor7fmsYLlrozmiJAnKVxuICB9LCAyMDAwKVxuICBcXGBcXGBcXGBcbi0g5LiN5b6X5L2/55So5Lu75L2V5YW25LuW5bel5YW35a6e546w572R57uc6K+35rGC55qE5qih5ouf77yM5q+U5aaC77yac2ltdWxhdGVOZXRSZXF1ZXN0562JXG5cbiAgYDsiXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bytefun-ai-mcp",
3
- "version": "1.13.112",
3
+ "version": "1.13.113",
4
4
  "description": "ByteFun AI MCP服务 - 打通产品设计、UI设计、代码开发的服务平台,支持设计稿转代码和跨平台原生代码开发",
5
5
  "main": "build/index.js",
6
6
  "type": "module",