bytefun-ai-mcp 1.13.112 → 1.13.114
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/appCodeDesign.d.ts +1 -1
- package/build/appCodeDesign.d.ts.map +1 -1
- package/build/appCodeDesign.js +3 -3
- package/build/appCodeRule.d.ts +1 -1
- package/build/appCodeRule.d.ts.map +1 -1
- package/build/appCodeRule.js +25 -3
- package/build/backendCodeDesign.d.ts +1 -1
- package/build/backendCodeDesign.d.ts.map +1 -1
- package/build/backendCodeDesign.js +95 -1
- package/build/jumpPageCode copy.d.ts +2 -0
- package/build/jumpPageCode copy.d.ts.map +1 -0
- package/build/jumpPageCode copy.js +205 -0
- package/build/jumpPageCode.d.ts +1 -1
- package/build/jumpPageCode.d.ts.map +1 -1
- package/build/jumpPageCode.js +12 -2
- package/package.json +1 -1
package/build/appCodeDesign.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const codeDesignPromptTemplate = "# \u4F60\u662F\u8D44\u6DF1\u7684\u4EA7\u54C1\u8BBE\u8BA1\u548C\u4EE3\u7801\u67B6\u6784\u4E13\u5BB6\uFF0C\u73B0\u5728\u9700\u8981\u6839\u636E\u7528\u6237\u9700\u6C42\u8FDB\u884C\u4EE3\u7801\u903B\u8F91\u8BBE\u8BA1\u601D\u8003\u5DE5\u4F5C\uFF0C\u6700\u7EC8\u8F93\u51FA\u8BE6\u7EC6\u7684\u4EE3\u7801\u8BBE\u8BA1\u6587\u6863\u3002\n\n## **\u6267\u884C\u8BBE\u8BA1\uFF1A\u9605\u8BFB`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6\uFF0C\u5F97\u5230\u5F53\u524D\u529F\u80FD\u6A21\u5757\u7684\u82F1\u6587\u540D\u5B57`moduleNameEN`\u548C\u5F53\u524D\u8981\u8BBE\u8BA1\u4EE3\u7801\u7684\u9875\u9762\u7684\u82F1\u6587\u540D\u5B57`pageNameEN`\uFF0C\u7136\u540E\u67E5\u770B\u91CC\u9762\u7684thinkStatus\u5B57\u6BB5\u638C\u63E1\u5F53\u524D\u529F\u80FD\u6A21\u5757\u7684\u4EE3\u7801\u8BBE\u8BA1\u7684\u8FDB\u5EA6\u60C5\u51B5\uFF0C\u7136\u540E\u8BE5\u6A21\u5757\u6BCF\u4E00\u4E2A\u9700\u8981\u8BBE\u8BA1\u7684\u9875\u9762\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 4 \u4E2A\u4E14\u6700\u540E\u4E00\u4E2A\u4EFB\u52A1\u4E0D\u662F\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\uFF0C\u7ACB\u5373\u62A5\u9519\u5E76\u91CD\u65B0\u521B\u5EFA\u3002**\n\n1. \u4E25\u683C\u6309\u7167`\u7B2C\u4E00\u6B65`\u6267\u884C\u4EFB\u52A1\uFF0C\u8BFB\u53D6\u9875\u9762\u7684\u9875\u9762\u63CF\u8FF0\uFF0C\u7406\u89E3\u9875\u9762\u663E\u793A\u7684\u5143\u7D20\uFF0C\u529F\u80FD\uFF0C\u7528\u4E8E\u601D\u8003\u9875\u9762\u4E1A\u52A1\u903B\u8F91\u3002\n2. \u4E25\u683C\u6309\u7167`\u7B2C\u4E8C\u6B65`\u6267\u884C\u4EFB\u52A1\uFF0C\u8FDB\u884C\u9875\u9762\u4EE3\u7801\u903B\u8F91\u8BBE\u8BA1\uFF0C\u5B8C\u6210`src/{moduleNameEN}/{pageNameEN}/codeDesign.md`\u6587\u4EF6\u7F16\u5199\u3002\n3. \u4E25\u683C\u6309\u7167`\u7B2C\u4E09\u6B65`\u6267\u884C\u4EFB\u52A1\uFF0C\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u91CC\u9762\u7684thinkStatus\u5B57\u6BB5\u4E3Acompleted\uFF0C\u5FC5\u987B\u662F\u53EA\u4FEE\u6539thinkStatus\u5B57\u6BB5\uFF0C\u5176\u4ED6\u5B57\u6BB5\uFF08\u5305\u62ECversion\uFF09\u7981\u6B62\u4FEE\u6539\u3002\n4. \u4E25\u683C\u6309\u7167`\u7B2C\u56DB\u6B65`\u6267\u884C\u4EFB\u52A1\uFF0C\u521B\u5EFA\u4E0B\u4E00\u4E2A\u9875\u9762\u7684\u4EE3\u7801\u8BBE\u8BA1\u7684\u4EFB\u52A1\u5217\u8868\uFF0C\u5E76\u9A6C\u4E0A\u6267\u884C\u65B0\u7684\u4EFB\u52A1\u5217\u8868\uFF0C\u786E\u4FDD\u6D41\u7A0B\u6C38\u7EED\uFF01\n\n### \u7B2C\u4E00\u6B65\u3001\u4F7F\u7528'read_file'\u5DE5\u5177\u8BFB\u53D6'src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md'\u548C'.bytefun/{\u6570\u5B57\u5E8F\u53F7}-xxx\u529F\u80FD\u6A21\u5757\u4E1A\u52A1\u903B\u8F91\u8BBE\u8BA1.md'\u6587\u4EF6\uFF0C\u7406\u89E3\u8BE5\u9875\u9762\u7684\u9875\u9762\u63CF\u8FF0\uFF0C\u7406\u89E3\u8BE5\u9875\u9762\u663E\u793A\u7684\u5143\u7D20\u6709\u54EA\u4E9B\uFF0C\u9700\u8981\u5B9E\u73B0\u4EC0\u4E48\u529F\u80FD\uFF0C\u7528\u4E8E\u601D\u8003\u9875\u9762\u4E1A\u52A1\u903B\u8F91\uFF0C\u5E76\u7406\u89E3\u4EE5\u4E0B\u7981\u6B62\u7684\u4E8B\u60C5\uFF1A\n- \u7981\u6B62\u51FA\u73B0\u8FD9\u4E9B\u5237\u65B0UI\u7EC4\u4EF6\u7684\u903B\u8F91\u8282\u70B9\uFF1A\u5237\u65B0\u8F6E\u64AD\u6307\u793A\u5668\u3001\u5237\u65B0tab\u83DC\u5355\u680F\u3001\u5237\u65B0\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\n- \u7981\u6B62\u8BBE\u8BA1\u8F6E\u64AD\u3001tab\u3001\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u3001\u5355\u9009\u3001\u591A\u9009\u3001\u5355\u9009\u7EC4\u3001\u591A\u9009\u7EC4\u7B49UI\u7EC4\u4EF6\u663E\u793A\u7684\u9759\u6001\u6570\u636E\n- \u7981\u6B62\u8FC7\u5EA6\u8BBE\u8BA1\uFF1A\u4E00\u822C\u7B80\u5355\u9875\u9762\uFF0C\u903B\u8F91\u5C31\u4F1A\u975E\u5E38\u7B80\u5355\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u7B80\u5355\u95EE\u9898\u590D\u6742\u5316\uFF0C\u6BD4\u5982\uFF1A\u95EA\u5C4F\u9875\u3001\u5F15\u5BFC\u9875\u7B49\u7B49\uFF0C\u4E00\u822C\u903B\u8F91\u5C31\u975E\u5E38\u7B80\u5355\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u8FC7\u5EA6\u8BBE\u8BA1\n\n### \u7B2C\u4E8C\u6B65\u3001\u7ED3\u5408`\u9875\u9762\u9ED8\u8BA4\u4E1A\u52A1\u903B\u8F91`\u5E76\u6309\u7167`\u6587\u4EF6\u5185\u5BB9\u683C\u5F0F`\uFF0C\u8FDB\u884C\u9875\u9762\u4EE3\u7801\u903B\u8F91\u8BBE\u8BA1\uFF0C\u5B8C\u6210\u4EE5\u4E0B3\u70B9\u7684\u7F16\u5199\n\n#### \u9875\u9762\u9ED8\u8BA4\u4E1A\u52A1\u903B\u8F91\n- **\u5982\u7528\u6237\u6CA1\u5728\u63CF\u8FF0\u4E2D\u660E\u786E\u6307\u660E\u9875\u9762\u7684\u4E1A\u52A1\u903B\u8F91\uFF0C\u5176\u4E2D\u9879\u76EE\u8BBE\u8BA1\u6587\u6863'.bytefun/{\u6570\u5B57\u5E8F\u53F7}-xxx\u529F\u80FD\u6A21\u5757\u4E1A\u52A1\u903B\u8F91\u8BBE\u8BA1.md'\u4E0D\u7B97\u7528\u6237\u660E\u786E\u6307\u5B9A\u7684\u4E1A\u52A1\u903B\u8F91\uFF0C\u90A3\u5404\u4E2A\u9875\u9762\u7684\u4E1A\u52A1\u903B\u8F91\u9ED8\u8BA4\u5FC5\u987B\u9075\u5B88\u4EE5\u4E0B\u56FA\u5B9A\u903B\u8F91\u5E76\u8F93\u51FAxxx\u9875\u9762\u9ED8\u8BA4\u9075\u5B88\u7684\u56FA\u5B9A\u903B\u8F91\uFF0C\u6BD4\u5982\uFF1A\u95EA\u5C4F\u9875\u7684\u903B\u8F91\uFF1Axxx\u7B49**\n - \u4E0D\u5B58\u5728\u6743\u9650\u8BF7\u6C42\u9875\u9762\uFF0C\u6240\u6709\u6743\u9650\u8BF7\u6C42\u5FC5\u987B\u4F7F\u7528\u5F39\u6846\u7684\u4EA4\u4E92\u65B9\u5F0F\uFF0C\u800C\u4E14\u662F\u9075\u5FAA\"\u5373\u7528\u5373\u53D6\"\uFF08Just-in-Time\uFF09\u7684\u539F\u5219\n - \u7EDD\u5BF9\u4E0D\u4F1A\u6709\u4EFB\u4F55\u5173\u4E8E\u9690\u79C1\u534F\u8BAE/\u670D\u52A1\u6761\u6B3E\u9875\u7684\u903B\u8F91\n - \u95EA\u5C4F\u9875\n - \u5982\u679C\u6709\u95EA\u5C4F\u9875\uFF0C\u90A3\u4E48\u542F\u52A8\u540E\u7B2C\u4E00\u4E2A\u9875\u9762\u5FC5\u987B\u662F\u95EA\u5C4F\u9875\uFF0C\u95EA\u5C4F\u9875\u4E0D\u4F1A\u6709\u8DF3\u5230\u767B\u5F55\u9875\u7684\u8DEF\u5F84\uFF0C\u53EA\u6709\u8DF3\u5230\u5F15\u5BFC\u9875\u6216\u9996\u9875\u7684\u8DEF\u5F84\n - \u95EA\u5C4F\u9875\u4E0D\u505A\u4EFB\u4F55\u4E1A\u52A1\u903B\u8F91\uFF0C\u4E0D\u8BF7\u6C42\u4EFB\u4F55\u7F51\u7EDC\u63A5\u53E3\uFF0C\u53EA\u9700\u5224\u65AD\u662F\u5426\u9996\u6B21\u542F\u52A8\uFF0C\u5982\u679C\u9996\u6B21\u542F\u52A8\u5C31x\u79D2\u540E\u8DF3\u5230\u5F15\u5BFC\u9875\uFF0C\u5982\u679C\u4E0D\u662F\u9996\u6B21\u542F\u52A8\u5C31\u8DF3\u5230\u9996\u9875\n - \u274C \u95EA\u5C4F\u9875\u7EDD\u5BF9\u7981\u6B62\u505A\u7684\u4E8B\u60C5\uFF1A\n - \u8BF7\u6C42\u4EFB\u4F55\u7F51\u7EDC\u63A5\u53E3\n - \u8BF7\u6C42\u7248\u672C\u66F4\u65B0API\u63A5\u53E3\n - \u8DF3\u5230\u9690\u79C1\u534F\u8BAE/\u670D\u52A1\u6761\u6B3E\u9875\n - \u5F39\u51FA\u4EFB\u4F55\u5176\u4ED6\u5F39\u6846\n - \u4EFB\u4F55\u6743\u9650\u8BF7\u6C42\n - \u5F15\u5BFC\u9875\n = \u5F15\u5BFC\u9875\u544A\u9875\u4E0D\u4F1A\u6709\u8DF3\u5230\u767B\u5F55\u9875\u7684\u8DEF\u5F84\uFF0C\u53EA\u6709\u8DF3\u5230\u9996\u9875\u7684\u8DEF\u5F84\n - \u4E0D\u4F1A\u6709\u4EFB\u4F55\u7F51\u7EDC\u8BF7\u6C42\u3001\u4E1A\u52A1\u903B\u8F91\uFF0C\u5F15\u5BFC\u9875\u4EC5\u4EC5\u662F\u4E00\u4E2A\u5C55\u793A\u9759\u6001\u6570\u636E\u7684\u9875\u9762\n - \u4E0D\u9700\u8981\u81EA\u52A8\u8F6E\u64AD\n - \u4E00\u822C\u6574\u4E2A\u9875\u9762\u53EA\u6709\u4E00\u4E2A\u8F6E\u64AD\u7EC4\u4EF6\u3001\u8F6E\u64AD\u6307\u793A\u5668\u548C\u5E95\u90E8\u4E00\u4E2A\u6309\u94AE\uFF0C\u5E95\u90E8\u6309\u94AE\u5728\u975E\u7B2C\u4E00\u9875\u65F6\u663E\u793A\u4E0B\u4E00\u6B65\uFF0C\u5728\u6700\u540E\u4E00\u9875\u65F6\u663E\u793A\u7ACB\u5373\u4F53\u9A8C\n - \u9996\u9875\n - \u8FDB\u5165\u9996\u9875\u4E00\u822C\u9700\u8981\u8BF7\u6C42app\u7248\u672C\u66F4\u65B0API\u63A5\u53E3\uFF0C\u5224\u65AD\u662F\u5426\u9700\u8981\u66F4\u65B0\uFF0C\u5982\u679C\u9700\u8981\u66F4\u65B0\u5C31\u5F39\u51FA\u66F4\u65B0\u5F39\u6846\uFF0C\u5982\u679C\u4E0D\u9700\u8981\u90A3\u5C31\u4E0D\u505A\u4EFB\u4F55\u4E8B\u60C5\n - \u8FDB\u5165\u9996\u9875\u8FD8\u8981\u8BFB\u53D6\u672C\u5730\u6570\u636E\uFF1A\u5168\u5C40\u914D\u7F6E\u6570\u636E\u3002\u4E00\u822C\u7528\u4E8E\u529F\u80FD\u5F00\u5173\u3001ABTest\u914D\u7F6E\u7B49\uFF0C\u8BFB\u53D6\u5B8C\u6BD5\u540E\uFF0C\u8FD8\u8981\u7F51\u7EDC\u8BF7\u6C42\u4E00\u6B21\u5168\u5C40\u914D\u7F6EAPI\uFF0C\u5C06\u5168\u5C40\u914D\u7F6E\u6570\u636E\u66F4\u65B0\u5230\u672C\u5730\u6570\u636E\u4E2D\n - \u4E00\u822C\u662F\u6709\u4E00\u4E2A\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\uFF0C\u70B9\u51FB\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u7684\u56FE\u6807\u4F1A\u5207\u6362\u5230\u5BF9\u5E94\u7684tab\u9875\u9762\uFF0Ctab\u9875\u9762\u4E00\u822C\u6709\u591A\u4E2A\uFF0C\u6BCF\u4E2Atab\u9875\u9762\u6709\u4E0D\u540C\u7684\u4E1A\u52A1\u903B\u8F91\n - \u5982\u679C\u7528\u6237\u8F93\u5165\u7684\u9700\u6C42\u63CF\u8FF0\u6CA1\u6709\u660E\u786E\u6307\u5B9A\u9996\u9875\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u6709\u54EA\u4E9B\u529F\u80FD\uFF0C\u90A3\u4E48\u4F60\u5FC5\u987B\u601D\u8003\u9996\u9875\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u6709\u54EA\u4E9B\u529F\u80FDitem\u9879\n - \u767B\u5F55\u9875\n - \u767B\u5F55\u9875\u662F\u7528\u6237\u70B9\u51FB\u9700\u8981\u767B\u5F55\u624D\u80FD\u8BBF\u95EE\u7684\u9875\u9762\u65F6\uFF0C\u624D\u4F1A\u8DF3\u8F6C\u5230\u7684\u9875\u9762\uFF0C\u800C\u4E0D\u662F\u4ECE\u95EA\u5C4F\u9875\u5224\u65AD\u662F\u5426\u9700\u8981\u767B\u5F55\u7136\u540E\u8DF3\u8FDB\u53BB\n\n#### \u7B2C1\u70B9. \u9875\u9762\u8F93\u5165\u548C\u8F93\u51FA\u53C2\u6570\u8BBE\u8BA1\n**\u76EE\u6807**\uFF1A\u7CBE\u786E\u5B9A\u4E49\u9875\u9762\u7684\u6570\u636E\u63A5\u53E3\u5951\u7EA6\n- **\u8F93\u5165\u53C2\u6570\u5206\u6790\u9875\u9762\u6784\u9020\u51FD\u6570\u53C2\u6570\uFF08\u4ECE\u5176\u4ED6\u9875\u9762\u8DF3\u8F6C\u4F20\u5165\u7684\u53C2\u6570\uFF09**\uFF1A\n\n#### \u7B2C2\u70B9. \u9875\u9762\u52A8\u6001\u6570\u636E\u6765\u6E90\u8BBE\u8BA1\n**\u76EE\u6807**\uFF1A\u68B3\u7406\u9875\u9762\u6240\u9700\u7684\u6240\u6709\u52A8\u6001\u6570\u636E\u53CA\u5176\u83B7\u53D6\u65B9\u5F0F\n- **\u540E\u7AEFAPI\u6570\u636E**\uFF1A\n - \u9700\u8981\u8C03\u7528\u54EA\u4E9B\u540E\u7AEFAPI\uFF1F\n - API\u7684\u8C03\u7528\u65F6\u673A\u548C\u9891\u7387\uFF1F\n - \u9519\u8BEF\u5904\u7406\u548C\u91CD\u8BD5\u673A\u5236\uFF1F\n- **\u5168\u5C40\u9759\u6001\u53D8\u91CF\u6570\u636E**\uFF1A\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u9605\u8BFB'src/Application.ts'\uFF0C\u67E5\u770B\u8BE5\u9875\u9762\u4F9D\u8D56\u54EA\u4E9B\u5168\u5C40\u9759\u6001\u53D8\u91CF\uFF0C\u4E5F\u6709\u53EF\u80FD\u4E0D\u9700\u8981\u4F9D\u8D56\u7684\n\n#### \u7B2C3\u70B9. \u751F\u6210\u5B8C\u6574\u7684 Mermaid \u7A0B\u5E8F\u6D41\u7A0B\u56FE\n\n### \u7B2C\u4E09\u6B65\u3001\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\n- \u8BBE\u8BA1\u4E00\u4E2A\u9875\u9762\u5B8C\u6BD5\u540E\uFF0C\u9700\u8981\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u91CC\u9762\u7684thinkStatus\u5B57\u6BB5\u4E3Acompleted\uFF0C\u5FC5\u987B\u662F\u53EA\u4FEE\u6539thinkStatus\u5B57\u6BB5\uFF0C\u5176\u4ED6\u5B57\u6BB5\uFF08\u5305\u62ECversion\uFF09\u7981\u6B62\u4FEE\u6539\u3002\n\n### \u7B2C\u56DB\u6B65\u3001\u521B\u5EFA\u4E0B\u4E00\u4E2A\u9875\u9762\u7684\u4EE3\u7801\u8BBE\u8BA1\u76844\u4E2A\u4EFB\u52A1\u5217\u8868\n1. \u4E25\u683C\u6309\u7167`\u7B2C\u4E00\u6B65`\u6267\u884C\u4EFB\u52A1\uFF0C\u8BFB\u53D6\u9875\u9762\u7684\u9875\u9762\u63CF\u8FF0\uFF0C\u7406\u89E3\u9875\u9762\u663E\u793A\u7684\u5143\u7D20\uFF0C\u529F\u80FD\uFF0C\u7528\u4E8E\u601D\u8003\u9875\u9762\u4E1A\u52A1\u903B\u8F91\u3002\n2. \u4E25\u683C\u6309\u7167`\u7B2C\u4E8C\u6B65`\u6267\u884C\u4EFB\u52A1\uFF0C\u8FDB\u884C\u9875\u9762\u4EE3\u7801\u903B\u8F91\u8BBE\u8BA1\uFF0C\u5B8C\u6210`src/{moduleNameEN}/{pageNameEN}/codeDesign.md`\u6587\u4EF6\u7F16\u5199\u3002\n3. \u4E25\u683C\u6309\u7167`\u7B2C\u4E09\u6B65`\u6267\u884C\u4EFB\u52A1\uFF0C\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u91CC\u9762\u7684thinkStatus\u5B57\u6BB5\u4E3Acompleted\uFF0C\u5FC5\u987B\u662F\u53EA\u4FEE\u6539thinkStatus\u5B57\u6BB5\uFF0C\u5176\u4ED6\u5B57\u6BB5\uFF08\u5305\u62ECversion\uFF09\u7981\u6B62\u4FEE\u6539\u3002\n4. \u4E25\u683C\u6309\u7167`\u7B2C\u56DB\u6B65`\u6267\u884C\u4EFB\u52A1\uFF0C\u521B\u5EFA\u4E0B\u4E00\u4E2A\u9875\u9762\u7684\u4EE3\u7801\u8BBE\u8BA1\u7684\u4EFB\u52A1\u5217\u8868\uFF0C\u5E76\u9A6C\u4E0A\u6267\u884C\u65B0\u7684\u4EFB\u52A1\u5217\u8868\uFF0C\u786E\u4FDD\u6D41\u7A0B\u6C38\u7EED\uFF01\n\n## \u6587\u4EF6\u5185\u5BB9\u683C\u5F0F\n```markdown\n# [\u9875\u9762\u540D\u79F0] \u4EE3\u7801\u903B\u8F91\u8BBE\u8BA1\u6587\u6863\n\n## \u4E00. \u9875\u9762\u6784\u9020\u51FD\u6570\u53C2\u6570\n| \u53C2\u6570\u540D\u79F0 | \u6570\u636E\u7C7B\u578B | \u662F\u5426\u5FC5\u586B | \u9ED8\u8BA4\u503C | \u8BF4\u660E |\n|----------|----------|----------|--------|------|\n| xxx | string | \u662F | - | xxx |\n\n## \u4E8C. \u9875\u9762\u52A8\u6001\u6570\u636E\u6765\u6E90\u8BBE\u8BA1\n### 2.1 \u540E\u7AEFAPI\u6570\u636E\n[\u6458\u8981\u6982\u62EC\u63CF\u8FF0\u9700\u8981\u8C03\u7528\u7684API\u3001\u8C03\u7528\u65F6\u673A\u7B49]\n\n### 2.2 \u5168\u5C40\u9759\u6001\u53D8\u91CF\u6570\u636E\n[\u6458\u8981\u6982\u62EC\u63CF\u8FF0\u662F\u5426\u9700\u8981\u5168\u5C40\u9759\u6001\u53D8\u91CF\uFF0C\u5982\u679C\u9700\u8981\uFF0C\u5219\u63CF\u8FF0\u5168\u5C40\u9759\u6001\u53D8\u91CF\u7684\u540D\u79F0\u548C\u503C]\n\n## \u4E09. \u7A0B\u5E8F\u6D41\u7A0B\u56FE\n[\u7A0B\u5E8F\u6D41\u7A0B\u56FE]\n```\n";
|
|
1
|
+
export declare const codeDesignPromptTemplate = "# \u4F60\u662F\u8D44\u6DF1\u7684\u4EA7\u54C1\u8BBE\u8BA1\u548C\u4EE3\u7801\u67B6\u6784\u4E13\u5BB6\uFF0C\u73B0\u5728\u9700\u8981\u6839\u636E\u7528\u6237\u9700\u6C42\u8FDB\u884C\u4EE3\u7801\u903B\u8F91\u8BBE\u8BA1\u601D\u8003\u5DE5\u4F5C\uFF0C\u6700\u7EC8\u8F93\u51FA\u8BE6\u7EC6\u7684\u4EE3\u7801\u8BBE\u8BA1\u6587\u6863\u3002\n\n## **\u6267\u884C\u8BBE\u8BA1\uFF1A\u9605\u8BFB`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u6587\u4EF6\uFF0C\u5F97\u5230\u5F53\u524D\u529F\u80FD\u6A21\u5757\u7684\u82F1\u6587\u540D\u5B57`moduleNameEN`\u548C\u5F53\u524D\u8981\u8BBE\u8BA1\u4EE3\u7801\u7684\u9875\u9762\u7684\u82F1\u6587\u540D\u5B57`pageNameEN`\uFF0C\u7136\u540E\u67E5\u770B\u91CC\u9762\u7684thinkStatus\u5B57\u6BB5\u638C\u63E1\u5F53\u524D\u529F\u80FD\u6A21\u5757\u7684\u4EE3\u7801\u8BBE\u8BA1\u7684\u8FDB\u5EA6\u60C5\u51B5\uFF0C\u7136\u540E\u8BE5\u6A21\u5757\u6BCF\u4E00\u4E2A\u9700\u8981\u8BBE\u8BA1\u7684\u9875\u9762\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 4 \u4E2A\u4E14\u6700\u540E\u4E00\u4E2A\u4EFB\u52A1\u4E0D\u662F\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\uFF0C\u7ACB\u5373\u62A5\u9519\u5E76\u91CD\u65B0\u521B\u5EFA\u3002**\n\n1. \u4E25\u683C\u6309\u7167`\u7B2C\u4E00\u6B65`\u6267\u884C\u4EFB\u52A1\uFF0C\u8BFB\u53D6\u9875\u9762\u7684\u9875\u9762\u63CF\u8FF0\uFF0C\u7406\u89E3\u9875\u9762\u663E\u793A\u7684\u5143\u7D20\uFF0C\u529F\u80FD\uFF0C\u7528\u4E8E\u601D\u8003\u9875\u9762\u4E1A\u52A1\u903B\u8F91\u3002\n2. \u4E25\u683C\u6309\u7167`\u7B2C\u4E8C\u6B65`\u6267\u884C\u4EFB\u52A1\uFF0C\u8FDB\u884C\u9875\u9762\u4EE3\u7801\u903B\u8F91\u8BBE\u8BA1\uFF0C\u5B8C\u6210`src/{moduleNameEN}/{pageNameEN}/codeDesign.md`\u6587\u4EF6\u7F16\u5199\u3002\n3. \u4E25\u683C\u6309\u7167`\u7B2C\u4E09\u6B65`\u6267\u884C\u4EFB\u52A1\uFF0C\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u91CC\u9762\u7684thinkStatus\u5B57\u6BB5\u4E3Acompleted\uFF0C\u5FC5\u987B\u662F\u53EA\u4FEE\u6539thinkStatus\u5B57\u6BB5\uFF0C\u5176\u4ED6\u5B57\u6BB5\uFF08\u5305\u62ECversion\uFF09\u7981\u6B62\u4FEE\u6539\u3002\n4. \u4E25\u683C\u6309\u7167`\u7B2C\u56DB\u6B65`4. \u4E25\u683C\u6309\u7167`\u7B2C\u56DB\u6B65`\u6267\u884C\u4EFB\u52A1\uFF0C\u5982\u679C\u8BE5\u529F\u80FD\u6A21\u5757\u8FD8\u6CA1\u6709\u8BBE\u8BA1\u5B8C\uFF0C\u90A3\u5C31\u521B\u5EFA\u4E0B\u4E00\u4E2A\u9875\u9762\u7684\u4EE3\u7801\u8BBE\u8BA1\u7684\u4EFB\u52A1\u5217\u8868\uFF0C\u5E76\u9A6C\u4E0A\u6267\u884C\u65B0\u7684\u4EFB\u52A1\u5217\u8868\uFF0C\u5982\u679C\u8BE5\u529F\u80FD\u6A21\u5757\u5DF2\u7ECF\u8BBE\u8BA1\u5B8C\uFF0C\u90A3\u5C31\u8C03\u7528\u9A6C\u4E0A\u8C03\u7528 MCP \u5DE5\u5177`optimize_backend_design_prompt`\uFF0C\u5E76\u6839\u636E\u8FD4\u56DE\u7684\u540E\u7AEF\u4EE3\u7801\u8BBE\u8BA1\u63D0\u793A\u8BCD\u8981\u6C42\u548C\u89C4\u5219\u5B8C\u6210\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u6570\u636E\u5E93\u548CAPI\u63A5\u53E3\u7684\u8BBE\u8BA1\n\n### \u7B2C\u4E00\u6B65\u3001\u4F7F\u7528'read_file'\u5DE5\u5177\u8BFB\u53D6'src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md'\u548C'.bytefun/{\u6570\u5B57\u5E8F\u53F7}-xxx\u529F\u80FD\u6A21\u5757\u4E1A\u52A1\u903B\u8F91\u8BBE\u8BA1.md'\u6587\u4EF6\uFF0C\u7406\u89E3\u8BE5\u9875\u9762\u7684\u9875\u9762\u63CF\u8FF0\uFF0C\u7406\u89E3\u8BE5\u9875\u9762\u663E\u793A\u7684\u5143\u7D20\u6709\u54EA\u4E9B\uFF0C\u9700\u8981\u5B9E\u73B0\u4EC0\u4E48\u529F\u80FD\uFF0C\u7528\u4E8E\u601D\u8003\u9875\u9762\u4E1A\u52A1\u903B\u8F91\uFF0C\u5E76\u7406\u89E3\u4EE5\u4E0B\u7981\u6B62\u7684\u4E8B\u60C5\uFF1A\n- \u7981\u6B62\u51FA\u73B0\u8FD9\u4E9B\u5237\u65B0UI\u7EC4\u4EF6\u7684\u903B\u8F91\u8282\u70B9\uFF1A\u5237\u65B0\u8F6E\u64AD\u6307\u793A\u5668\u3001\u5237\u65B0tab\u83DC\u5355\u680F\u3001\u5237\u65B0\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\n- \u7981\u6B62\u8BBE\u8BA1\u8F6E\u64AD\u3001tab\u3001\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u3001\u5355\u9009\u3001\u591A\u9009\u3001\u5355\u9009\u7EC4\u3001\u591A\u9009\u7EC4\u7B49UI\u7EC4\u4EF6\u663E\u793A\u7684\u9759\u6001\u6570\u636E\n- \u7981\u6B62\u8FC7\u5EA6\u8BBE\u8BA1\uFF1A\u4E00\u822C\u7B80\u5355\u9875\u9762\uFF0C\u903B\u8F91\u5C31\u4F1A\u975E\u5E38\u7B80\u5355\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u7B80\u5355\u95EE\u9898\u590D\u6742\u5316\uFF0C\u6BD4\u5982\uFF1A\u95EA\u5C4F\u9875\u3001\u5F15\u5BFC\u9875\u7B49\u7B49\uFF0C\u4E00\u822C\u903B\u8F91\u5C31\u975E\u5E38\u7B80\u5355\uFF0C\u7EDD\u5BF9\u4E0D\u80FD\u8FC7\u5EA6\u8BBE\u8BA1\n\n### \u7B2C\u4E8C\u6B65\u3001\u7ED3\u5408`\u9875\u9762\u9ED8\u8BA4\u4E1A\u52A1\u903B\u8F91`\u5E76\u6309\u7167`\u6587\u4EF6\u5185\u5BB9\u683C\u5F0F`\uFF0C\u8FDB\u884C\u9875\u9762\u4EE3\u7801\u903B\u8F91\u8BBE\u8BA1\uFF0C\u5B8C\u6210\u4EE5\u4E0B3\u70B9\u7684\u7F16\u5199\n\n#### \u9875\u9762\u9ED8\u8BA4\u4E1A\u52A1\u903B\u8F91\n- **\u5982\u7528\u6237\u6CA1\u5728\u63CF\u8FF0\u4E2D\u660E\u786E\u6307\u660E\u9875\u9762\u7684\u4E1A\u52A1\u903B\u8F91\uFF0C\u5176\u4E2D\u9879\u76EE\u8BBE\u8BA1\u6587\u6863'.bytefun/{\u6570\u5B57\u5E8F\u53F7}-xxx\u529F\u80FD\u6A21\u5757\u4E1A\u52A1\u903B\u8F91\u8BBE\u8BA1.md'\u4E0D\u7B97\u7528\u6237\u660E\u786E\u6307\u5B9A\u7684\u4E1A\u52A1\u903B\u8F91\uFF0C\u90A3\u5404\u4E2A\u9875\u9762\u7684\u4E1A\u52A1\u903B\u8F91\u9ED8\u8BA4\u5FC5\u987B\u9075\u5B88\u4EE5\u4E0B\u56FA\u5B9A\u903B\u8F91\u5E76\u8F93\u51FAxxx\u9875\u9762\u9ED8\u8BA4\u9075\u5B88\u7684\u56FA\u5B9A\u903B\u8F91\uFF0C\u6BD4\u5982\uFF1A\u95EA\u5C4F\u9875\u7684\u903B\u8F91\uFF1Axxx\u7B49**\n - \u4E0D\u5B58\u5728\u6743\u9650\u8BF7\u6C42\u9875\u9762\uFF0C\u6240\u6709\u6743\u9650\u8BF7\u6C42\u5FC5\u987B\u4F7F\u7528\u5F39\u6846\u7684\u4EA4\u4E92\u65B9\u5F0F\uFF0C\u800C\u4E14\u662F\u9075\u5FAA\"\u5373\u7528\u5373\u53D6\"\uFF08Just-in-Time\uFF09\u7684\u539F\u5219\n - \u7EDD\u5BF9\u4E0D\u4F1A\u6709\u4EFB\u4F55\u5173\u4E8E\u9690\u79C1\u534F\u8BAE/\u670D\u52A1\u6761\u6B3E\u9875\u7684\u903B\u8F91\n - \u95EA\u5C4F\u9875\n - \u5982\u679C\u6709\u95EA\u5C4F\u9875\uFF0C\u90A3\u4E48\u542F\u52A8\u540E\u7B2C\u4E00\u4E2A\u9875\u9762\u5FC5\u987B\u662F\u95EA\u5C4F\u9875\uFF0C\u95EA\u5C4F\u9875\u4E0D\u4F1A\u6709\u8DF3\u5230\u767B\u5F55\u9875\u7684\u8DEF\u5F84\uFF0C\u53EA\u6709\u8DF3\u5230\u5F15\u5BFC\u9875\u6216\u9996\u9875\u7684\u8DEF\u5F84\n - \u95EA\u5C4F\u9875\u4E0D\u505A\u4EFB\u4F55\u4E1A\u52A1\u903B\u8F91\uFF0C\u4E0D\u8BF7\u6C42\u4EFB\u4F55\u7F51\u7EDC\u63A5\u53E3\uFF0C\u53EA\u9700\u5224\u65AD\u662F\u5426\u9996\u6B21\u542F\u52A8\uFF0C\u5982\u679C\u9996\u6B21\u542F\u52A8\u5C31x\u79D2\u540E\u8DF3\u5230\u5F15\u5BFC\u9875\uFF0C\u5982\u679C\u4E0D\u662F\u9996\u6B21\u542F\u52A8\u5C31\u8DF3\u5230\u9996\u9875\n - \u274C \u95EA\u5C4F\u9875\u7EDD\u5BF9\u7981\u6B62\u505A\u7684\u4E8B\u60C5\uFF1A\n - \u8BF7\u6C42\u4EFB\u4F55\u7F51\u7EDC\u63A5\u53E3\n - \u8BF7\u6C42\u7248\u672C\u66F4\u65B0API\u63A5\u53E3\n - \u8DF3\u5230\u9690\u79C1\u534F\u8BAE/\u670D\u52A1\u6761\u6B3E\u9875\n - \u5F39\u51FA\u4EFB\u4F55\u5176\u4ED6\u5F39\u6846\n - \u4EFB\u4F55\u6743\u9650\u8BF7\u6C42\n - \u5F15\u5BFC\u9875\n = \u5F15\u5BFC\u9875\u544A\u9875\u4E0D\u4F1A\u6709\u8DF3\u5230\u767B\u5F55\u9875\u7684\u8DEF\u5F84\uFF0C\u53EA\u6709\u8DF3\u5230\u9996\u9875\u7684\u8DEF\u5F84\n - \u4E0D\u4F1A\u6709\u4EFB\u4F55\u7F51\u7EDC\u8BF7\u6C42\u3001\u4E1A\u52A1\u903B\u8F91\uFF0C\u5F15\u5BFC\u9875\u4EC5\u4EC5\u662F\u4E00\u4E2A\u5C55\u793A\u9759\u6001\u6570\u636E\u7684\u9875\u9762\n - \u4E0D\u9700\u8981\u81EA\u52A8\u8F6E\u64AD\n - \u4E00\u822C\u6574\u4E2A\u9875\u9762\u53EA\u6709\u4E00\u4E2A\u8F6E\u64AD\u7EC4\u4EF6\u3001\u8F6E\u64AD\u6307\u793A\u5668\u548C\u5E95\u90E8\u4E00\u4E2A\u6309\u94AE\uFF0C\u5E95\u90E8\u6309\u94AE\u5728\u975E\u7B2C\u4E00\u9875\u65F6\u663E\u793A\u4E0B\u4E00\u6B65\uFF0C\u5728\u6700\u540E\u4E00\u9875\u65F6\u663E\u793A\u7ACB\u5373\u4F53\u9A8C\n - \u9996\u9875\n - \u8FDB\u5165\u9996\u9875\u4E00\u822C\u9700\u8981\u8BF7\u6C42app\u7248\u672C\u66F4\u65B0API\u63A5\u53E3\uFF0C\u5224\u65AD\u662F\u5426\u9700\u8981\u66F4\u65B0\uFF0C\u5982\u679C\u9700\u8981\u66F4\u65B0\u5C31\u5F39\u51FA\u66F4\u65B0\u5F39\u6846\uFF0C\u5982\u679C\u4E0D\u9700\u8981\u90A3\u5C31\u4E0D\u505A\u4EFB\u4F55\u4E8B\u60C5\n - \u8FDB\u5165\u9996\u9875\u8FD8\u8981\u8BFB\u53D6\u672C\u5730\u6570\u636E\uFF1A\u5168\u5C40\u914D\u7F6E\u6570\u636E\u3002\u4E00\u822C\u7528\u4E8E\u529F\u80FD\u5F00\u5173\u3001ABTest\u914D\u7F6E\u7B49\uFF0C\u8BFB\u53D6\u5B8C\u6BD5\u540E\uFF0C\u8FD8\u8981\u7F51\u7EDC\u8BF7\u6C42\u4E00\u6B21\u5168\u5C40\u914D\u7F6EAPI\uFF0C\u5C06\u5168\u5C40\u914D\u7F6E\u6570\u636E\u66F4\u65B0\u5230\u672C\u5730\u6570\u636E\u4E2D\n - \u4E00\u822C\u662F\u6709\u4E00\u4E2A\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\uFF0C\u70B9\u51FB\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u7684\u56FE\u6807\u4F1A\u5207\u6362\u5230\u5BF9\u5E94\u7684tab\u9875\u9762\uFF0Ctab\u9875\u9762\u4E00\u822C\u6709\u591A\u4E2A\uFF0C\u6BCF\u4E2Atab\u9875\u9762\u6709\u4E0D\u540C\u7684\u4E1A\u52A1\u903B\u8F91\n - \u5982\u679C\u7528\u6237\u8F93\u5165\u7684\u9700\u6C42\u63CF\u8FF0\u6CA1\u6709\u660E\u786E\u6307\u5B9A\u9996\u9875\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u6709\u54EA\u4E9B\u529F\u80FD\uFF0C\u90A3\u4E48\u4F60\u5FC5\u987B\u601D\u8003\u9996\u9875\u5E95\u90E8\u529F\u80FD\u5BFC\u822A\u680F\u6709\u54EA\u4E9B\u529F\u80FDitem\u9879\n - \u767B\u5F55\u9875\n - \u767B\u5F55\u9875\u662F\u7528\u6237\u70B9\u51FB\u9700\u8981\u767B\u5F55\u624D\u80FD\u8BBF\u95EE\u7684\u9875\u9762\u65F6\uFF0C\u624D\u4F1A\u8DF3\u8F6C\u5230\u7684\u9875\u9762\uFF0C\u800C\u4E0D\u662F\u4ECE\u95EA\u5C4F\u9875\u5224\u65AD\u662F\u5426\u9700\u8981\u767B\u5F55\u7136\u540E\u8DF3\u8FDB\u53BB\n\n#### \u7B2C1\u70B9. \u9875\u9762\u8F93\u5165\u548C\u8F93\u51FA\u53C2\u6570\u8BBE\u8BA1\n**\u76EE\u6807**\uFF1A\u7CBE\u786E\u5B9A\u4E49\u9875\u9762\u7684\u6570\u636E\u63A5\u53E3\u5951\u7EA6\n- **\u8F93\u5165\u53C2\u6570\u5206\u6790\u9875\u9762\u6784\u9020\u51FD\u6570\u53C2\u6570\uFF08\u4ECE\u5176\u4ED6\u9875\u9762\u8DF3\u8F6C\u4F20\u5165\u7684\u53C2\u6570\uFF09**\uFF1A\n\n#### \u7B2C2\u70B9. \u9875\u9762\u52A8\u6001\u6570\u636E\u6765\u6E90\u8BBE\u8BA1\n**\u76EE\u6807**\uFF1A\u68B3\u7406\u9875\u9762\u6240\u9700\u7684\u6240\u6709\u52A8\u6001\u6570\u636E\u53CA\u5176\u83B7\u53D6\u65B9\u5F0F\n- **\u540E\u7AEFAPI\u6570\u636E**\uFF1A\n - \u9700\u8981\u8C03\u7528\u54EA\u4E9B\u540E\u7AEFAPI\uFF1F\n - API\u7684\u8C03\u7528\u65F6\u673A\u548C\u9891\u7387\uFF1F\n - \u9519\u8BEF\u5904\u7406\u548C\u91CD\u8BD5\u673A\u5236\uFF1F\n- **\u5168\u5C40\u9759\u6001\u53D8\u91CF\u6570\u636E**\uFF1A\n - \u4F7F\u7528'read_file'\u5DE5\u5177\u9605\u8BFB'src/Application.ts'\uFF0C\u67E5\u770B\u8BE5\u9875\u9762\u4F9D\u8D56\u54EA\u4E9B\u5168\u5C40\u9759\u6001\u53D8\u91CF\uFF0C\u4E5F\u6709\u53EF\u80FD\u4E0D\u9700\u8981\u4F9D\u8D56\u7684\n\n#### \u7B2C3\u70B9. \u751F\u6210\u5B8C\u6574\u7684 Mermaid \u7A0B\u5E8F\u6D41\u7A0B\u56FE\n\n### \u7B2C\u4E09\u6B65\u3001\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\n- \u8BBE\u8BA1\u4E00\u4E2A\u9875\u9762\u5B8C\u6BD5\u540E\uFF0C\u9700\u8981\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u91CC\u9762\u7684thinkStatus\u5B57\u6BB5\u4E3Acompleted\uFF0C\u5FC5\u987B\u662F\u53EA\u4FEE\u6539thinkStatus\u5B57\u6BB5\uFF0C\u5176\u4ED6\u5B57\u6BB5\uFF08\u5305\u62ECversion\uFF09\u7981\u6B62\u4FEE\u6539\u3002\n\n### \u7B2C\u56DB\u6B65\u3001\u521B\u5EFA\u4E0B\u4E00\u4E2A\u9875\u9762\u7684\u4EE3\u7801\u8BBE\u8BA1\u76844\u4E2A\u4EFB\u52A1\u5217\u8868\n1. \u4E25\u683C\u6309\u7167`\u7B2C\u4E00\u6B65`\u6267\u884C\u4EFB\u52A1\uFF0C\u8BFB\u53D6\u9875\u9762\u7684\u9875\u9762\u63CF\u8FF0\uFF0C\u7406\u89E3\u9875\u9762\u663E\u793A\u7684\u5143\u7D20\uFF0C\u529F\u80FD\uFF0C\u7528\u4E8E\u601D\u8003\u9875\u9762\u4E1A\u52A1\u903B\u8F91\u3002\n2. \u4E25\u683C\u6309\u7167`\u7B2C\u4E8C\u6B65`\u6267\u884C\u4EFB\u52A1\uFF0C\u8FDB\u884C\u9875\u9762\u4EE3\u7801\u903B\u8F91\u8BBE\u8BA1\uFF0C\u5B8C\u6210`src/{moduleNameEN}/{pageNameEN}/codeDesign.md`\u6587\u4EF6\u7F16\u5199\u3002\n3. \u4E25\u683C\u6309\u7167`\u7B2C\u4E09\u6B65`\u6267\u884C\u4EFB\u52A1\uFF0C\u66F4\u65B0`doc/\u524D\u7AEF\u4EE3\u7801\u5F00\u53D1\u8FDB\u5EA6.json`\u91CC\u9762\u7684thinkStatus\u5B57\u6BB5\u4E3Acompleted\uFF0C\u5FC5\u987B\u662F\u53EA\u4FEE\u6539thinkStatus\u5B57\u6BB5\uFF0C\u5176\u4ED6\u5B57\u6BB5\uFF08\u5305\u62ECversion\uFF09\u7981\u6B62\u4FEE\u6539\u3002\n4. \u4E25\u683C\u6309\u7167`\u7B2C\u56DB\u6B65`4. \u4E25\u683C\u6309\u7167`\u7B2C\u56DB\u6B65`\u6267\u884C\u4EFB\u52A1\uFF0C\u5982\u679C\u8BE5\u529F\u80FD\u6A21\u5757\u8FD8\u6CA1\u6709\u8BBE\u8BA1\u5B8C\uFF0C\u90A3\u5C31\u521B\u5EFA\u4E0B\u4E00\u4E2A\u9875\u9762\u7684\u4EE3\u7801\u8BBE\u8BA1\u7684\u4EFB\u52A1\u5217\u8868\uFF0C\u5E76\u9A6C\u4E0A\u6267\u884C\u65B0\u7684\u4EFB\u52A1\u5217\u8868\uFF0C\u5982\u679C\u8BE5\u529F\u80FD\u6A21\u5757\u5DF2\u7ECF\u8BBE\u8BA1\u5B8C\uFF0C\u90A3\u5C31\u8C03\u7528\u9A6C\u4E0A\u8C03\u7528 MCP \u5DE5\u5177`optimize_backend_design_prompt`\uFF0C\u5E76\u6839\u636E\u8FD4\u56DE\u7684\u540E\u7AEF\u4EE3\u7801\u8BBE\u8BA1\u63D0\u793A\u8BCD\u8981\u6C42\u548C\u89C4\u5219\u5B8C\u6210\u8BE5\u529F\u80FD\u6A21\u5757\u7684\u6570\u636E\u5E93\u548CAPI\u63A5\u53E3\u7684\u8BBE\u8BA1\n\n## \u6587\u4EF6\u5185\u5BB9\u683C\u5F0F\n```markdown\n# [\u9875\u9762\u540D\u79F0] \u4EE3\u7801\u903B\u8F91\u8BBE\u8BA1\u6587\u6863\n\n## \u4E00. \u9875\u9762\u6784\u9020\u51FD\u6570\u53C2\u6570\n| \u53C2\u6570\u540D\u79F0 | \u6570\u636E\u7C7B\u578B | \u662F\u5426\u5FC5\u586B | \u9ED8\u8BA4\u503C | \u8BF4\u660E |\n|----------|----------|----------|--------|------|\n| xxx | string | \u662F | - | xxx |\n\n## \u4E8C. \u9875\u9762\u52A8\u6001\u6570\u636E\u6765\u6E90\u8BBE\u8BA1\n### 2.1 \u540E\u7AEFAPI\u6570\u636E\n[\u6458\u8981\u6982\u62EC\u63CF\u8FF0\u9700\u8981\u8C03\u7528\u7684API\u3001\u8C03\u7528\u65F6\u673A\u7B49]\n\n### 2.2 \u5168\u5C40\u9759\u6001\u53D8\u91CF\u6570\u636E\n[\u6458\u8981\u6982\u62EC\u63CF\u8FF0\u662F\u5426\u9700\u8981\u5168\u5C40\u9759\u6001\u53D8\u91CF\uFF0C\u5982\u679C\u9700\u8981\uFF0C\u5219\u63CF\u8FF0\u5168\u5C40\u9759\u6001\u53D8\u91CF\u7684\u540D\u79F0\u548C\u503C]\n\n## \u4E09. \u7A0B\u5E8F\u6D41\u7A0B\u56FE\n[\u7A0B\u5E8F\u6D41\u7A0B\u56FE]\n```\n";
|
|
2
2
|
//# sourceMappingURL=appCodeDesign.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appCodeDesign.d.ts","sourceRoot":"","sources":["../src/appCodeDesign.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,
|
|
1
|
+
{"version":3,"file":"appCodeDesign.d.ts","sourceRoot":"","sources":["../src/appCodeDesign.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,yybAqFpC,CAAC"}
|
package/build/appCodeDesign.js
CHANGED
|
@@ -5,7 +5,7 @@ export const codeDesignPromptTemplate = `# 你是资深的产品设计和代码
|
|
|
5
5
|
1. 严格按照\`第一步\`执行任务,读取页面的页面描述,理解页面显示的元素,功能,用于思考页面业务逻辑。
|
|
6
6
|
2. 严格按照\`第二步\`执行任务,进行页面代码逻辑设计,完成\`src/{moduleNameEN}/{pageNameEN}/codeDesign.md\`文件编写。
|
|
7
7
|
3. 严格按照\`第三步\`执行任务,更新\`doc/前端代码开发进度.json\`里面的thinkStatus字段为completed,必须是只修改thinkStatus字段,其他字段(包括version)禁止修改。
|
|
8
|
-
4.
|
|
8
|
+
4. 严格按照\`第四步\`4. 严格按照\`第四步\`执行任务,如果该功能模块还没有设计完,那就创建下一个页面的代码设计的任务列表,并马上执行新的任务列表,如果该功能模块已经设计完,那就调用马上调用 MCP 工具\`optimize_backend_design_prompt\`,并根据返回的后端代码设计提示词要求和规则完成该功能模块的数据库和API接口的设计
|
|
9
9
|
|
|
10
10
|
### 第一步、使用'read_file'工具读取'src/{moduleNameEN}/{pageNameEN}/{pageNameEN}.md'和'.bytefun/{数字序号}-xxx功能模块业务逻辑设计.md'文件,理解该页面的页面描述,理解该页面显示的元素有哪些,需要实现什么功能,用于思考页面业务逻辑,并理解以下禁止的事情:
|
|
11
11
|
- 禁止出现这些刷新UI组件的逻辑节点:刷新轮播指示器、刷新tab菜单栏、刷新底部功能导航栏
|
|
@@ -62,7 +62,7 @@ export const codeDesignPromptTemplate = `# 你是资深的产品设计和代码
|
|
|
62
62
|
1. 严格按照\`第一步\`执行任务,读取页面的页面描述,理解页面显示的元素,功能,用于思考页面业务逻辑。
|
|
63
63
|
2. 严格按照\`第二步\`执行任务,进行页面代码逻辑设计,完成\`src/{moduleNameEN}/{pageNameEN}/codeDesign.md\`文件编写。
|
|
64
64
|
3. 严格按照\`第三步\`执行任务,更新\`doc/前端代码开发进度.json\`里面的thinkStatus字段为completed,必须是只修改thinkStatus字段,其他字段(包括version)禁止修改。
|
|
65
|
-
4.
|
|
65
|
+
4. 严格按照\`第四步\`4. 严格按照\`第四步\`执行任务,如果该功能模块还没有设计完,那就创建下一个页面的代码设计的任务列表,并马上执行新的任务列表,如果该功能模块已经设计完,那就调用马上调用 MCP 工具\`optimize_backend_design_prompt\`,并根据返回的后端代码设计提示词要求和规则完成该功能模块的数据库和API接口的设计
|
|
66
66
|
|
|
67
67
|
## 文件内容格式
|
|
68
68
|
\`\`\`markdown
|
|
@@ -84,4 +84,4 @@ export const codeDesignPromptTemplate = `# 你是资深的产品设计和代码
|
|
|
84
84
|
[程序流程图]
|
|
85
85
|
\`\`\`
|
|
86
86
|
`;
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwQ29kZURlc2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBDb2RlRGVzaWduLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBcUZ2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGNvZGVEZXNpZ25Qcm9tcHRUZW1wbGF0ZSA9IGAjIOS9oOaYr+i1hOa3seeahOS6p+WTgeiuvuiuoeWSjOS7o+eggeaetuaehOS4k+Wutu+8jOeOsOWcqOmcgOimgeagueaNrueUqOaIt+mcgOaxgui/m+ihjOS7o+eggemAu+i+keiuvuiuoeaAneiAg+W3peS9nO+8jOacgOe7iOi+k+WHuuivpue7hueahOS7o+eggeiuvuiuoeaWh+aho+OAglxuXG4jIyAqKuaJp+ihjOiuvuiuoe+8mumYheivu1xcYGRvYy/liY3nq6/ku6PnoIHlvIDlj5Hov5vluqYuanNvblxcYOaWh+S7tu+8jOW+l+WIsOW9k+WJjeWKn+iDveaooeWdl+eahOiLseaWh+WQjeWtl1xcYG1vZHVsZU5hbWVFTlxcYOWSjOW9k+WJjeimgeiuvuiuoeS7o+eggeeahOmhtemdoueahOiLseaWh+WQjeWtl1xcYHBhZ2VOYW1lRU5cXGDvvIznhLblkI7mn6XnnIvph4zpnaLnmoR0aGlua1N0YXR1c+Wtl+auteaOjOaPoeW9k+WJjeWKn+iDveaooeWdl+eahOS7o+eggeiuvuiuoeeahOi/m+W6puaDheWGte+8jOeEtuWQjuivpeaooeWdl+avj+S4gOS4qumcgOimgeiuvuiuoeeahOmhtemdoumDveW/hemhu+iwg+eUqCB0b2RvX3dyaXRlIOW3peWFt+WIm+W7uuS7peS4iyA0IOS4quS7u+WKoeWIl+ihqO+8jOWIm+W7uuWujOaIkOWQjuW/hemhu+ehruiupO+8muWmguaenOS7u+WKoeaVsOmHj+S4jeaYryA0IOS4quS4lOacgOWQjuS4gOS4quS7u+WKoeS4jeaYr+abtOaWsFxcYGRvYy/liY3nq6/ku6PnoIHlvIDlj5Hov5vluqYuanNvblxcYO+8jOeri+WNs+aKpemUmeW5tumHjeaWsOWIm+W7uuOAgioqXG5cbjEuIOS4peagvOaMieeFp1xcYOesrOS4gOatpVxcYOaJp+ihjOS7u+WKoe+8jOivu+WPlumhtemdoueahOmhtemdouaPj+i/sO+8jOeQhuino+mhtemdouaYvuekuueahOWFg+e0oO+8jOWKn+iDve+8jOeUqOS6juaAneiAg+mhtemdouS4muWKoemAu+i+keOAglxuMi4g5Lil5qC85oyJ54WnXFxg56ys5LqM5q2lXFxg5omn6KGM5Lu75Yqh77yM6L+b6KGM6aG16Z2i5Luj56CB6YC76L6R6K6+6K6h77yM5a6M5oiQXFxgc3JjL3ttb2R1bGVOYW1lRU59L3twYWdlTmFtZUVOfS9jb2RlRGVzaWduLm1kXFxg5paH5Lu257yW5YaZ44CCXG4zLiDkuKXmoLzmjInnhadcXGDnrKzkuInmraVcXGDmiafooYzku7vliqHvvIzmm7TmlrBcXGBkb2Mv5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGDph4zpnaLnmoR0aGlua1N0YXR1c+Wtl+auteS4umNvbXBsZXRlZO+8jOW/hemhu+aYr+WPquS/ruaUuXRoaW5rU3RhdHVz5a2X5q6177yM5YW25LuW5a2X5q6177yI5YyF5ousdmVyc2lvbu+8ieemgeatouS/ruaUueOAglxuNC4g5Lil5qC85oyJ54WnXFxg56ys5Zub5q2lXFxg5omn6KGM5Lu75Yqh77yM5Yib5bu65LiL5LiA5Liq6aG16Z2i55qE5Luj56CB6K6+6K6h55qE5Lu75Yqh5YiX6KGo77yM5bm26ams5LiK5omn6KGM5paw55qE5Lu75Yqh5YiX6KGo77yM56Gu5L+d5rWB56iL5rC457ut77yBXG5cbiMjIyDnrKzkuIDmraXjgIHkvb/nlKgncmVhZF9maWxlJ+W3peWFt+ivu+WPlidzcmMve21vZHVsZU5hbWVFTn0ve3BhZ2VOYW1lRU59L3twYWdlTmFtZUVOfS5tZCflkownLmJ5dGVmdW4ve+aVsOWtl+W6j+WPt30teHh45Yqf6IO95qih5Z2X5Lia5Yqh6YC76L6R6K6+6K6hLm1kJ+aWh+S7tu+8jOeQhuino+ivpemhtemdoueahOmhtemdouaPj+i/sO+8jOeQhuino+ivpemhtemdouaYvuekuueahOWFg+e0oOacieWTquS6m++8jOmcgOimgeWunueOsOS7gOS5iOWKn+iDve+8jOeUqOS6juaAneiAg+mhtemdouS4muWKoemAu+i+ke+8jOW5tueQhuino+S7peS4i+emgeatoueahOS6i+aDhe+8mlxuLSDnpoHmraLlh7rnjrDov5nkupvliLfmlrBVSee7hOS7tueahOmAu+i+keiKgueCue+8muWIt+aWsOi9ruaSreaMh+ekuuWZqOOAgeWIt+aWsHRhYuiPnOWNleagj+OAgeWIt+aWsOW6lemDqOWKn+iDveWvvOiIquagj1xuLSDnpoHmraLorr7orqHova7mkq3jgIF0YWLjgIHlupXpg6jlip/og73lr7zoiKrmoI/jgIHljZXpgInjgIHlpJrpgInjgIHljZXpgInnu4TjgIHlpJrpgInnu4TnrYlVSee7hOS7tuaYvuekuueahOmdmeaAgeaVsOaNrlxuLSDnpoHmraLov4fluqborr7orqHvvJrkuIDoiKznroDljZXpobXpnaLvvIzpgLvovpHlsLHkvJrpnZ7luLjnroDljZXvvIznu53lr7nkuI3og73nroDljZXpl67popjlpI3mnYLljJbvvIzmr5TlpoLvvJrpl6rlsY/pobXjgIHlvJXlr7zpobXnrYnnrYnvvIzkuIDoiKzpgLvovpHlsLHpnZ7luLjnroDljZXvvIznu53lr7nkuI3og73ov4fluqborr7orqFcblxuIyMjIOesrOS6jOatpeOAgee7k+WQiFxcYOmhtemdoum7mOiupOS4muWKoemAu+i+kVxcYOW5tuaMieeFp1xcYOaWh+S7tuWGheWuueagvOW8j1xcYO+8jOi/m+ihjOmhtemdouS7o+eggemAu+i+keiuvuiuoe+8jOWujOaIkOS7peS4izPngrnnmoTnvJblhplcblxuIyMjIyDpobXpnaLpu5jorqTkuJrliqHpgLvovpFcbi0gKirlpoLnlKjmiLfmsqHlnKjmj4/ov7DkuK3mmI7noa7mjIfmmI7pobXpnaLnmoTkuJrliqHpgLvovpHvvIzlhbbkuK3pobnnm67orr7orqHmlofmoaMnLmJ5dGVmdW4ve+aVsOWtl+W6j+WPt30teHh45Yqf6IO95qih5Z2X5Lia5Yqh6YC76L6R6K6+6K6hLm1kJ+S4jeeul+eUqOaIt+aYjuehruaMh+WumueahOS4muWKoemAu+i+ke+8jOmCo+WQhOS4qumhtemdoueahOS4muWKoemAu+i+kem7mOiupOW/hemhu+mBteWuiOS7peS4i+WbuuWumumAu+i+keW5tui+k+WHunh4eOmhtemdoum7mOiupOmBteWuiOeahOWbuuWumumAu+i+ke+8jOavlOWmgu+8mumXquWxj+mhteeahOmAu+i+ke+8mnh4eOetiSoqXG4gIC0g5LiN5a2Y5Zyo5p2D6ZmQ6K+35rGC6aG16Z2i77yM5omA5pyJ5p2D6ZmQ6K+35rGC5b+F6aG75L2/55So5by55qGG55qE5Lqk5LqS5pa55byP77yM6ICM5LiU5piv6YG15b6qXCLljbPnlKjljbPlj5ZcIu+8iEp1c3QtaW4tVGltZe+8ieeahOWOn+WImVxuICAtIOe7neWvueS4jeS8muacieS7u+S9leWFs+S6jumakOengeWNj+iuri/mnI3liqHmnaHmrL7pobXnmoTpgLvovpFcbiAgLSDpl6rlsY/pobVcbiAgICAtIOWmguaenOaciemXquWxj+mhte+8jOmCo+S5iOWQr+WKqOWQjuesrOS4gOS4qumhtemdouW/hemhu+aYr+mXquWxj+mhte+8jOmXquWxj+mhteS4jeS8muaciei3s+WIsOeZu+W9lemhteeahOi3r+W+hO+8jOWPquaciei3s+WIsOW8leWvvOmhteaIlummlumhteeahOi3r+W+hFxuICAgIC0g6Zeq5bGP6aG15LiN5YGa5Lu75L2V5Lia5Yqh6YC76L6R77yM5LiN6K+35rGC5Lu75L2V572R57uc5o6l5Y+j77yM5Y+q6ZyA5Yik5pat5piv5ZCm6aaW5qyh5ZCv5Yqo77yM5aaC5p6c6aaW5qyh5ZCv5Yqo5bCxeOenkuWQjui3s+WIsOW8leWvvOmhte+8jOWmguaenOS4jeaYr+mmluasoeWQr+WKqOWwsei3s+WIsOmmlumhtVxuICAgIC0g4p2MIOmXquWxj+mhtee7neWvueemgeatouWBmueahOS6i+aDhe+8mlxuICAgICAgLSDor7fmsYLku7vkvZXnvZHnu5zmjqXlj6NcbiAgICAgIC0g6K+35rGC54mI5pys5pu05pawQVBJ5o6l5Y+jXG4gICAgICAtIOi3s+WIsOmakOengeWNj+iuri/mnI3liqHmnaHmrL7pobVcbiAgICAgIC0g5by55Ye65Lu75L2V5YW25LuW5by55qGGXG4gICAgICAtIOS7u+S9leadg+mZkOivt+axglxuICAtIOW8leWvvOmhtVxuICAgID0g5byV5a+86aG15ZGK6aG15LiN5Lya5pyJ6Lez5Yiw55m75b2V6aG155qE6Lev5b6E77yM5Y+q5pyJ6Lez5Yiw6aaW6aG155qE6Lev5b6EXG4gICAgLSDkuI3kvJrmnInku7vkvZXnvZHnu5zor7fmsYLjgIHkuJrliqHpgLvovpHvvIzlvJXlr7zpobXku4Xku4XmmK/kuIDkuKrlsZXnpLrpnZnmgIHmlbDmja7nmoTpobXpnaJcbiAgICAtIOS4jemcgOimgeiHquWKqOi9ruaSrVxuICAgIC0g5LiA6Iis5pW05Liq6aG16Z2i5Y+q5pyJ5LiA5Liq6L2u5pKt57uE5Lu244CB6L2u5pKt5oyH56S65Zmo5ZKM5bqV6YOo5LiA5Liq5oyJ6ZKu77yM5bqV6YOo5oyJ6ZKu5Zyo6Z2e56ys5LiA6aG15pe25pi+56S65LiL5LiA5q2l77yM5Zyo5pyA5ZCO5LiA6aG15pe25pi+56S656uL5Y2z5L2T6aqMXG4gIC0g6aaW6aG1XG4gICAgLSDov5vlhaXpppbpobXkuIDoiKzpnIDopoHor7fmsYJhcHDniYjmnKzmm7TmlrBBUEnmjqXlj6PvvIzliKTmlq3mmK/lkKbpnIDopoHmm7TmlrDvvIzlpoLmnpzpnIDopoHmm7TmlrDlsLHlvLnlh7rmm7TmlrDlvLnmoYbvvIzlpoLmnpzkuI3pnIDopoHpgqPlsLHkuI3lgZrku7vkvZXkuovmg4VcbiAgICAtIOi/m+WFpemmlumhtei/mOimgeivu+WPluacrOWcsOaVsOaNru+8muWFqOWxgOmFjee9ruaVsOaNruOAguS4gOiIrOeUqOS6juWKn+iDveW8gOWFs+OAgUFCVGVzdOmFjee9ruetie+8jOivu+WPluWujOavleWQju+8jOi/mOimgee9kee7nOivt+axguS4gOasoeWFqOWxgOmFjee9rkFQSe+8jOWwhuWFqOWxgOmFjee9ruaVsOaNruabtOaWsOWIsOacrOWcsOaVsOaNruS4rVxuICAgIC0g5LiA6Iis5piv5pyJ5LiA5Liq5bqV6YOo5Yqf6IO95a+86Iiq5qCP77yM54K55Ye75bqV6YOo5Yqf6IO95a+86Iiq5qCP55qE5Zu+5qCH5Lya5YiH5o2i5Yiw5a+55bqU55qEdGFi6aG16Z2i77yMdGFi6aG16Z2i5LiA6Iis5pyJ5aSa5Liq77yM5q+P5LiqdGFi6aG16Z2i5pyJ5LiN5ZCM55qE5Lia5Yqh6YC76L6RXG4gICAgLSDlpoLmnpznlKjmiLfovpPlhaXnmoTpnIDmsYLmj4/ov7DmsqHmnInmmI7noa7mjIflrprpppbpobXlupXpg6jlip/og73lr7zoiKrmoI/mnInlk6rkupvlip/og73vvIzpgqPkuYjkvaDlv4XpobvmgJ3ogIPpppbpobXlupXpg6jlip/og73lr7zoiKrmoI/mnInlk6rkupvlip/og71pdGVt6aG5XG4gIC0g55m75b2V6aG1XG4gICAgLSDnmbvlvZXpobXmmK/nlKjmiLfngrnlh7vpnIDopoHnmbvlvZXmiY3og73orr/pl67nmoTpobXpnaLml7bvvIzmiY3kvJrot7PovazliLDnmoTpobXpnaLvvIzogIzkuI3mmK/ku47pl6rlsY/pobXliKTmlq3mmK/lkKbpnIDopoHnmbvlvZXnhLblkI7ot7Pov5vljrtcblxuIyMjIyDnrKwx54K5LiDpobXpnaLovpPlhaXlkozovpPlh7rlj4LmlbDorr7orqFcbioq55uu5qCHKirvvJrnsr7noa7lrprkuYnpobXpnaLnmoTmlbDmja7mjqXlj6PlpZHnuqZcbi0gKirovpPlhaXlj4LmlbDliIbmnpDpobXpnaLmnoTpgKDlh73mlbDlj4LmlbDvvIjku47lhbbku5bpobXpnaLot7PovazkvKDlhaXnmoTlj4LmlbDvvIkqKu+8mlxuXG4jIyMjIOesrDLngrkuIOmhtemdouWKqOaAgeaVsOaNruadpea6kOiuvuiuoVxuKirnm67moIcqKu+8muais+eQhumhtemdouaJgOmcgOeahOaJgOacieWKqOaAgeaVsOaNruWPiuWFtuiOt+WPluaWueW8j1xuLSAqKuWQjuerr0FQSeaVsOaNrioq77yaXG4gIC0g6ZyA6KaB6LCD55So5ZOq5Lqb5ZCO56uvQVBJ77yfXG4gIC0gQVBJ55qE6LCD55So5pe25py65ZKM6aKR546H77yfXG4gIC0g6ZSZ6K+v5aSE55CG5ZKM6YeN6K+V5py65Yi277yfXG4tICoq5YWo5bGA6Z2Z5oCB5Y+Y6YeP5pWw5o2uKirvvJpcbiAgLSDkvb/nlKgncmVhZF9maWxlJ+W3peWFt+mYheivuydzcmMvQXBwbGljYXRpb24udHMn77yM5p+l55yL6K+l6aG16Z2i5L6d6LWW5ZOq5Lqb5YWo5bGA6Z2Z5oCB5Y+Y6YeP77yM5Lmf5pyJ5Y+v6IO95LiN6ZyA6KaB5L6d6LWW55qEXG5cbiMjIyMg56ysM+eCuS4g55Sf5oiQ5a6M5pW055qEIE1lcm1haWQg56iL5bqP5rWB56iL5Zu+XG5cbiMjIyDnrKzkuInmraXjgIHmm7TmlrBcXGBkb2Mv5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGBcbi0g6K6+6K6h5LiA5Liq6aG16Z2i5a6M5q+V5ZCO77yM6ZyA6KaB5pu05pawXFxgZG9jL+WJjeerr+S7o+eggeW8gOWPkei/m+W6pi5qc29uXFxg6YeM6Z2i55qEdGhpbmtTdGF0dXPlrZfmrrXkuLpjb21wbGV0ZWTvvIzlv4XpobvmmK/lj6rkv67mlLl0aGlua1N0YXR1c+Wtl+aute+8jOWFtuS7luWtl+aute+8iOWMheaLrHZlcnNpb27vvInnpoHmraLkv67mlLnjgIJcblxuIyMjIOesrOWbm+atpeOAgeWIm+W7uuS4i+S4gOS4qumhtemdoueahOS7o+eggeiuvuiuoeeahDTkuKrku7vliqHliJfooahcbjEuIOS4peagvOaMieeFp1xcYOesrOS4gOatpVxcYOaJp+ihjOS7u+WKoe+8jOivu+WPlumhtemdoueahOmhtemdouaPj+i/sO+8jOeQhuino+mhtemdouaYvuekuueahOWFg+e0oO+8jOWKn+iDve+8jOeUqOS6juaAneiAg+mhtemdouS4muWKoemAu+i+keOAglxuMi4g5Lil5qC85oyJ54WnXFxg56ys5LqM5q2lXFxg5omn6KGM5Lu75Yqh77yM6L+b6KGM6aG16Z2i5Luj56CB6YC76L6R6K6+6K6h77yM5a6M5oiQXFxgc3JjL3ttb2R1bGVOYW1lRU59L3twYWdlTmFtZUVOfS9jb2RlRGVzaWduLm1kXFxg5paH5Lu257yW5YaZ44CCXG4zLiDkuKXmoLzmjInnhadcXGDnrKzkuInmraVcXGDmiafooYzku7vliqHvvIzmm7TmlrBcXGBkb2Mv5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGDph4zpnaLnmoR0aGlua1N0YXR1c+Wtl+auteS4umNvbXBsZXRlZO+8jOW/hemhu+aYr+WPquS/ruaUuXRoaW5rU3RhdHVz5a2X5q6177yM5YW25LuW5a2X5q6177yI5YyF5ousdmVyc2lvbu+8ieemgeatouS/ruaUueOAglxuNC4g5Lil5qC85oyJ54WnXFxg56ys5Zub5q2lXFxg5omn6KGM5Lu75Yqh77yM5Yib5bu65LiL5LiA5Liq6aG16Z2i55qE5Luj56CB6K6+6K6h55qE5Lu75Yqh5YiX6KGo77yM5bm26ams5LiK5omn6KGM5paw55qE5Lu75Yqh5YiX6KGo77yM56Gu5L+d5rWB56iL5rC457ut77yBXG5cbiMjIOaWh+S7tuWGheWuueagvOW8j1xuXFxgXFxgXFxgbWFya2Rvd25cbiMgW+mhtemdouWQjeensF0g5Luj56CB6YC76L6R6K6+6K6h5paH5qGjXG5cbiMjIOS4gC4g6aG16Z2i5p6E6YCg5Ye95pWw5Y+C5pWwXG58IOWPguaVsOWQjeensCB8IOaVsOaNruexu+WeiyB8IOaYr+WQpuW/heWhqyB8IOm7mOiupOWAvCB8IOivtOaYjiB8XG58LS0tLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS18LS0tLS0tfFxufCB4eHggICAgICB8IHN0cmluZyAgIHwg5pivICAgICAgIHwgLSAgICAgIHwgeHh4ICB8XG5cbiMjIOS6jC4g6aG16Z2i5Yqo5oCB5pWw5o2u5p2l5rqQ6K6+6K6hXG4jIyMgMi4xIOWQjuerr0FQSeaVsOaNrlxuW+aRmOimgeamguaLrOaPj+i/sOmcgOimgeiwg+eUqOeahEFQSeOAgeiwg+eUqOaXtuacuuetiV1cblxuIyMjIDIuMiDlhajlsYDpnZnmgIHlj5jph4/mlbDmja5cblvmkZjopoHmpoLmi6zmj4/ov7DmmK/lkKbpnIDopoHlhajlsYDpnZnmgIHlj5jph4/vvIzlpoLmnpzpnIDopoHvvIzliJnmj4/ov7DlhajlsYDpnZnmgIHlj5jph4/nmoTlkI3np7DlkozlgLxdXG5cbiMjIOS4iS4g56iL5bqP5rWB56iL5Zu+XG5b56iL5bqP5rWB56iL5Zu+XVxuXFxgXFxgXFxgXG5gO1xuIl19
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwQ29kZURlc2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBDb2RlRGVzaWduLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBcUZ2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGNvZGVEZXNpZ25Qcm9tcHRUZW1wbGF0ZSA9IGAjIOS9oOaYr+i1hOa3seeahOS6p+WTgeiuvuiuoeWSjOS7o+eggeaetuaehOS4k+Wutu+8jOeOsOWcqOmcgOimgeagueaNrueUqOaIt+mcgOaxgui/m+ihjOS7o+eggemAu+i+keiuvuiuoeaAneiAg+W3peS9nO+8jOacgOe7iOi+k+WHuuivpue7hueahOS7o+eggeiuvuiuoeaWh+aho+OAglxuXG4jIyAqKuaJp+ihjOiuvuiuoe+8mumYheivu1xcYGRvYy/liY3nq6/ku6PnoIHlvIDlj5Hov5vluqYuanNvblxcYOaWh+S7tu+8jOW+l+WIsOW9k+WJjeWKn+iDveaooeWdl+eahOiLseaWh+WQjeWtl1xcYG1vZHVsZU5hbWVFTlxcYOWSjOW9k+WJjeimgeiuvuiuoeS7o+eggeeahOmhtemdoueahOiLseaWh+WQjeWtl1xcYHBhZ2VOYW1lRU5cXGDvvIznhLblkI7mn6XnnIvph4zpnaLnmoR0aGlua1N0YXR1c+Wtl+auteaOjOaPoeW9k+WJjeWKn+iDveaooeWdl+eahOS7o+eggeiuvuiuoeeahOi/m+W6puaDheWGte+8jOeEtuWQjuivpeaooeWdl+avj+S4gOS4qumcgOimgeiuvuiuoeeahOmhtemdoumDveW/hemhu+iwg+eUqCB0b2RvX3dyaXRlIOW3peWFt+WIm+W7uuS7peS4iyA0IOS4quS7u+WKoeWIl+ihqO+8jOWIm+W7uuWujOaIkOWQjuW/hemhu+ehruiupO+8muWmguaenOS7u+WKoeaVsOmHj+S4jeaYryA0IOS4quS4lOacgOWQjuS4gOS4quS7u+WKoeS4jeaYr+abtOaWsFxcYGRvYy/liY3nq6/ku6PnoIHlvIDlj5Hov5vluqYuanNvblxcYO+8jOeri+WNs+aKpemUmeW5tumHjeaWsOWIm+W7uuOAgioqXG5cbjEuIOS4peagvOaMieeFp1xcYOesrOS4gOatpVxcYOaJp+ihjOS7u+WKoe+8jOivu+WPlumhtemdoueahOmhtemdouaPj+i/sO+8jOeQhuino+mhtemdouaYvuekuueahOWFg+e0oO+8jOWKn+iDve+8jOeUqOS6juaAneiAg+mhtemdouS4muWKoemAu+i+keOAglxuMi4g5Lil5qC85oyJ54WnXFxg56ys5LqM5q2lXFxg5omn6KGM5Lu75Yqh77yM6L+b6KGM6aG16Z2i5Luj56CB6YC76L6R6K6+6K6h77yM5a6M5oiQXFxgc3JjL3ttb2R1bGVOYW1lRU59L3twYWdlTmFtZUVOfS9jb2RlRGVzaWduLm1kXFxg5paH5Lu257yW5YaZ44CCXG4zLiDkuKXmoLzmjInnhadcXGDnrKzkuInmraVcXGDmiafooYzku7vliqHvvIzmm7TmlrBcXGBkb2Mv5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGDph4zpnaLnmoR0aGlua1N0YXR1c+Wtl+auteS4umNvbXBsZXRlZO+8jOW/hemhu+aYr+WPquS/ruaUuXRoaW5rU3RhdHVz5a2X5q6177yM5YW25LuW5a2X5q6177yI5YyF5ousdmVyc2lvbu+8ieemgeatouS/ruaUueOAglxuNC4g5Lil5qC85oyJ54WnXFxg56ys5Zub5q2lXFxgNC4g5Lil5qC85oyJ54WnXFxg56ys5Zub5q2lXFxg5omn6KGM5Lu75Yqh77yM5aaC5p6c6K+l5Yqf6IO95qih5Z2X6L+Y5rKh5pyJ6K6+6K6h5a6M77yM6YKj5bCx5Yib5bu65LiL5LiA5Liq6aG16Z2i55qE5Luj56CB6K6+6K6h55qE5Lu75Yqh5YiX6KGo77yM5bm26ams5LiK5omn6KGM5paw55qE5Lu75Yqh5YiX6KGo77yM5aaC5p6c6K+l5Yqf6IO95qih5Z2X5bey57uP6K6+6K6h5a6M77yM6YKj5bCx6LCD55So6ams5LiK6LCD55SoIE1DUCDlt6XlhbdcXGBvcHRpbWl6ZV9iYWNrZW5kX2Rlc2lnbl9wcm9tcHRcXGDvvIzlubbmoLnmja7ov5Tlm57nmoTlkI7nq6/ku6PnoIHorr7orqHmj5DnpLror43opoHmsYLlkozop4TliJnlrozmiJDor6Xlip/og73mqKHlnZfnmoTmlbDmja7lupPlkoxBUEnmjqXlj6PnmoTorr7orqFcblxuIyMjIOesrOS4gOatpeOAgeS9v+eUqCdyZWFkX2ZpbGUn5bel5YW36K+75Y+WJ3NyYy97bW9kdWxlTmFtZUVOfS97cGFnZU5hbWVFTn0ve3BhZ2VOYW1lRU59Lm1kJ+WSjCcuYnl0ZWZ1bi975pWw5a2X5bqP5Y+3fS14eHjlip/og73mqKHlnZfkuJrliqHpgLvovpHorr7orqEubWQn5paH5Lu277yM55CG6Kej6K+l6aG16Z2i55qE6aG16Z2i5o+P6L+w77yM55CG6Kej6K+l6aG16Z2i5pi+56S655qE5YWD57Sg5pyJ5ZOq5Lqb77yM6ZyA6KaB5a6e546w5LuA5LmI5Yqf6IO977yM55So5LqO5oCd6ICD6aG16Z2i5Lia5Yqh6YC76L6R77yM5bm255CG6Kej5Lul5LiL56aB5q2i55qE5LqL5oOF77yaXG4tIOemgeatouWHuueOsOi/meS6m+WIt+aWsFVJ57uE5Lu255qE6YC76L6R6IqC54K577ya5Yi35paw6L2u5pKt5oyH56S65Zmo44CB5Yi35pawdGFi6I+c5Y2V5qCP44CB5Yi35paw5bqV6YOo5Yqf6IO95a+86Iiq5qCPXG4tIOemgeatouiuvuiuoei9ruaSreOAgXRhYuOAgeW6lemDqOWKn+iDveWvvOiIquagj+OAgeWNlemAieOAgeWkmumAieOAgeWNlemAiee7hOOAgeWkmumAiee7hOetiVVJ57uE5Lu25pi+56S655qE6Z2Z5oCB5pWw5o2uXG4tIOemgeatoui/h+W6puiuvuiuoe+8muS4gOiIrOeugOWNlemhtemdou+8jOmAu+i+keWwseS8mumdnuW4uOeugOWNle+8jOe7neWvueS4jeiDveeugOWNlemXrumimOWkjeadguWMlu+8jOavlOWmgu+8mumXquWxj+mhteOAgeW8leWvvOmhteetieetie+8jOS4gOiIrOmAu+i+keWwsemdnuW4uOeugOWNle+8jOe7neWvueS4jeiDvei/h+W6puiuvuiuoVxuXG4jIyMg56ys5LqM5q2l44CB57uT5ZCIXFxg6aG16Z2i6buY6K6k5Lia5Yqh6YC76L6RXFxg5bm25oyJ54WnXFxg5paH5Lu25YaF5a655qC85byPXFxg77yM6L+b6KGM6aG16Z2i5Luj56CB6YC76L6R6K6+6K6h77yM5a6M5oiQ5Lul5LiLM+eCueeahOe8luWGmVxuXG4jIyMjIOmhtemdoum7mOiupOS4muWKoemAu+i+kVxuLSAqKuWmgueUqOaIt+ayoeWcqOaPj+i/sOS4reaYjuehruaMh+aYjumhtemdoueahOS4muWKoemAu+i+ke+8jOWFtuS4remhueebruiuvuiuoeaWh+ahoycuYnl0ZWZ1bi975pWw5a2X5bqP5Y+3fS14eHjlip/og73mqKHlnZfkuJrliqHpgLvovpHorr7orqEubWQn5LiN566X55So5oi35piO56Gu5oyH5a6a55qE5Lia5Yqh6YC76L6R77yM6YKj5ZCE5Liq6aG16Z2i55qE5Lia5Yqh6YC76L6R6buY6K6k5b+F6aG76YG15a6I5Lul5LiL5Zu65a6a6YC76L6R5bm26L6T5Ye6eHh46aG16Z2i6buY6K6k6YG15a6I55qE5Zu65a6a6YC76L6R77yM5q+U5aaC77ya6Zeq5bGP6aG155qE6YC76L6R77yaeHh4562JKipcbiAgLSDkuI3lrZjlnKjmnYPpmZDor7fmsYLpobXpnaLvvIzmiYDmnInmnYPpmZDor7fmsYLlv4Xpobvkvb/nlKjlvLnmoYbnmoTkuqTkupLmlrnlvI/vvIzogIzkuJTmmK/pgbXlvqpcIuWNs+eUqOWNs+WPllwi77yISnVzdC1pbi1UaW1l77yJ55qE5Y6f5YiZXG4gIC0g57ud5a+55LiN5Lya5pyJ5Lu75L2V5YWz5LqO6ZqQ56eB5Y2P6K6uL+acjeWKoeadoeasvumhteeahOmAu+i+kVxuICAtIOmXquWxj+mhtVxuICAgIC0g5aaC5p6c5pyJ6Zeq5bGP6aG177yM6YKj5LmI5ZCv5Yqo5ZCO56ys5LiA5Liq6aG16Z2i5b+F6aG75piv6Zeq5bGP6aG177yM6Zeq5bGP6aG15LiN5Lya5pyJ6Lez5Yiw55m75b2V6aG155qE6Lev5b6E77yM5Y+q5pyJ6Lez5Yiw5byV5a+86aG15oiW6aaW6aG155qE6Lev5b6EXG4gICAgLSDpl6rlsY/pobXkuI3lgZrku7vkvZXkuJrliqHpgLvovpHvvIzkuI3or7fmsYLku7vkvZXnvZHnu5zmjqXlj6PvvIzlj6rpnIDliKTmlq3mmK/lkKbpppbmrKHlkK/liqjvvIzlpoLmnpzpppbmrKHlkK/liqjlsLF456eS5ZCO6Lez5Yiw5byV5a+86aG177yM5aaC5p6c5LiN5piv6aaW5qyh5ZCv5Yqo5bCx6Lez5Yiw6aaW6aG1XG4gICAgLSDinYwg6Zeq5bGP6aG157ud5a+556aB5q2i5YGa55qE5LqL5oOF77yaXG4gICAgICAtIOivt+axguS7u+S9lee9kee7nOaOpeWPo1xuICAgICAgLSDor7fmsYLniYjmnKzmm7TmlrBBUEnmjqXlj6NcbiAgICAgIC0g6Lez5Yiw6ZqQ56eB5Y2P6K6uL+acjeWKoeadoeasvumhtVxuICAgICAgLSDlvLnlh7rku7vkvZXlhbbku5blvLnmoYZcbiAgICAgIC0g5Lu75L2V5p2D6ZmQ6K+35rGCXG4gIC0g5byV5a+86aG1XG4gICAgPSDlvJXlr7zpobXlkYrpobXkuI3kvJrmnInot7PliLDnmbvlvZXpobXnmoTot6/lvoTvvIzlj6rmnInot7PliLDpppbpobXnmoTot6/lvoRcbiAgICAtIOS4jeS8muacieS7u+S9lee9kee7nOivt+axguOAgeS4muWKoemAu+i+ke+8jOW8leWvvOmhteS7heS7heaYr+S4gOS4quWxleekuumdmeaAgeaVsOaNrueahOmhtemdolxuICAgIC0g5LiN6ZyA6KaB6Ieq5Yqo6L2u5pKtXG4gICAgLSDkuIDoiKzmlbTkuKrpobXpnaLlj6rmnInkuIDkuKrova7mkq3nu4Tku7bjgIHova7mkq3mjIfnpLrlmajlkozlupXpg6jkuIDkuKrmjInpkq7vvIzlupXpg6jmjInpkq7lnKjpnZ7nrKzkuIDpobXml7bmmL7npLrkuIvkuIDmraXvvIzlnKjmnIDlkI7kuIDpobXml7bmmL7npLrnq4vljbPkvZPpqoxcbiAgLSDpppbpobVcbiAgICAtIOi/m+WFpemmlumhteS4gOiIrOmcgOimgeivt+axgmFwcOeJiOacrOabtOaWsEFQSeaOpeWPo++8jOWIpOaWreaYr+WQpumcgOimgeabtOaWsO+8jOWmguaenOmcgOimgeabtOaWsOWwseW8ueWHuuabtOaWsOW8ueahhu+8jOWmguaenOS4jemcgOimgemCo+WwseS4jeWBmuS7u+S9leS6i+aDhVxuICAgIC0g6L+b5YWl6aaW6aG16L+Y6KaB6K+75Y+W5pys5Zyw5pWw5o2u77ya5YWo5bGA6YWN572u5pWw5o2u44CC5LiA6Iis55So5LqO5Yqf6IO95byA5YWz44CBQUJUZXN06YWN572u562J77yM6K+75Y+W5a6M5q+V5ZCO77yM6L+Y6KaB572R57uc6K+35rGC5LiA5qyh5YWo5bGA6YWN572uQVBJ77yM5bCG5YWo5bGA6YWN572u5pWw5o2u5pu05paw5Yiw5pys5Zyw5pWw5o2u5LitXG4gICAgLSDkuIDoiKzmmK/mnInkuIDkuKrlupXpg6jlip/og73lr7zoiKrmoI/vvIzngrnlh7vlupXpg6jlip/og73lr7zoiKrmoI/nmoTlm77moIfkvJrliIfmjaLliLDlr7nlupTnmoR0YWLpobXpnaLvvIx0YWLpobXpnaLkuIDoiKzmnInlpJrkuKrvvIzmr4/kuKp0YWLpobXpnaLmnInkuI3lkIznmoTkuJrliqHpgLvovpFcbiAgICAtIOWmguaenOeUqOaIt+i+k+WFpeeahOmcgOaxguaPj+i/sOayoeacieaYjuehruaMh+WumummlumhteW6lemDqOWKn+iDveWvvOiIquagj+acieWTquS6m+WKn+iDve+8jOmCo+S5iOS9oOW/hemhu+aAneiAg+mmlumhteW6lemDqOWKn+iDveWvvOiIquagj+acieWTquS6m+WKn+iDvWl0ZW3poblcbiAgLSDnmbvlvZXpobVcbiAgICAtIOeZu+W9lemhteaYr+eUqOaIt+eCueWHu+mcgOimgeeZu+W9leaJjeiDveiuv+mXrueahOmhtemdouaXtu+8jOaJjeS8mui3s+i9rOWIsOeahOmhtemdou+8jOiAjOS4jeaYr+S7jumXquWxj+mhteWIpOaWreaYr+WQpumcgOimgeeZu+W9leeEtuWQjui3s+i/m+WOu1xuXG4jIyMjIOesrDHngrkuIOmhtemdoui+k+WFpeWSjOi+k+WHuuWPguaVsOiuvuiuoVxuKirnm67moIcqKu+8mueyvuehruWumuS5iemhtemdoueahOaVsOaNruaOpeWPo+Wlkee6plxuLSAqKui+k+WFpeWPguaVsOWIhuaekOmhtemdouaehOmAoOWHveaVsOWPguaVsO+8iOS7juWFtuS7lumhtemdoui3s+i9rOS8oOWFpeeahOWPguaVsO+8iSoq77yaXG5cbiMjIyMg56ysMueCuS4g6aG16Z2i5Yqo5oCB5pWw5o2u5p2l5rqQ6K6+6K6hXG4qKuebruaghyoq77ya5qKz55CG6aG16Z2i5omA6ZyA55qE5omA5pyJ5Yqo5oCB5pWw5o2u5Y+K5YW26I635Y+W5pa55byPXG4tICoq5ZCO56uvQVBJ5pWw5o2uKirvvJpcbiAgLSDpnIDopoHosIPnlKjlk6rkupvlkI7nq69BUEnvvJ9cbiAgLSBBUEnnmoTosIPnlKjml7bmnLrlkozpopHnjofvvJ9cbiAgLSDplJnor6/lpITnkIblkozph43or5XmnLrliLbvvJ9cbi0gKirlhajlsYDpnZnmgIHlj5jph4/mlbDmja4qKu+8mlxuICAtIOS9v+eUqCdyZWFkX2ZpbGUn5bel5YW36ZiF6K+7J3NyYy9BcHBsaWNhdGlvbi50cyfvvIzmn6XnnIvor6XpobXpnaLkvp3otZblk6rkupvlhajlsYDpnZnmgIHlj5jph4/vvIzkuZ/mnInlj6/og73kuI3pnIDopoHkvp3otZbnmoRcblxuIyMjIyDnrKwz54K5LiDnlJ/miJDlrozmlbTnmoQgTWVybWFpZCDnqIvluo/mtYHnqIvlm75cblxuIyMjIOesrOS4ieatpeOAgeabtOaWsFxcYGRvYy/liY3nq6/ku6PnoIHlvIDlj5Hov5vluqYuanNvblxcYFxuLSDorr7orqHkuIDkuKrpobXpnaLlrozmr5XlkI7vvIzpnIDopoHmm7TmlrBcXGBkb2Mv5YmN56uv5Luj56CB5byA5Y+R6L+b5bqmLmpzb25cXGDph4zpnaLnmoR0aGlua1N0YXR1c+Wtl+auteS4umNvbXBsZXRlZO+8jOW/hemhu+aYr+WPquS/ruaUuXRoaW5rU3RhdHVz5a2X5q6177yM5YW25LuW5a2X5q6177yI5YyF5ousdmVyc2lvbu+8ieemgeatouS/ruaUueOAglxuXG4jIyMg56ys5Zub5q2l44CB5Yib5bu65LiL5LiA5Liq6aG16Z2i55qE5Luj56CB6K6+6K6h55qENOS4quS7u+WKoeWIl+ihqFxuMS4g5Lil5qC85oyJ54WnXFxg56ys5LiA5q2lXFxg5omn6KGM5Lu75Yqh77yM6K+75Y+W6aG16Z2i55qE6aG16Z2i5o+P6L+w77yM55CG6Kej6aG16Z2i5pi+56S655qE5YWD57Sg77yM5Yqf6IO977yM55So5LqO5oCd6ICD6aG16Z2i5Lia5Yqh6YC76L6R44CCXG4yLiDkuKXmoLzmjInnhadcXGDnrKzkuozmraVcXGDmiafooYzku7vliqHvvIzov5vooYzpobXpnaLku6PnoIHpgLvovpHorr7orqHvvIzlrozmiJBcXGBzcmMve21vZHVsZU5hbWVFTn0ve3BhZ2VOYW1lRU59L2NvZGVEZXNpZ24ubWRcXGDmlofku7bnvJblhpnjgIJcbjMuIOS4peagvOaMieeFp1xcYOesrOS4ieatpVxcYOaJp+ihjOS7u+WKoe+8jOabtOaWsFxcYGRvYy/liY3nq6/ku6PnoIHlvIDlj5Hov5vluqYuanNvblxcYOmHjOmdoueahHRoaW5rU3RhdHVz5a2X5q615Li6Y29tcGxldGVk77yM5b+F6aG75piv5Y+q5L+u5pS5dGhpbmtTdGF0dXPlrZfmrrXvvIzlhbbku5blrZfmrrXvvIjljIXmi6x2ZXJzaW9u77yJ56aB5q2i5L+u5pS544CCXG40LiDkuKXmoLzmjInnhadcXGDnrKzlm5vmraVcXGA0LiDkuKXmoLzmjInnhadcXGDnrKzlm5vmraVcXGDmiafooYzku7vliqHvvIzlpoLmnpzor6Xlip/og73mqKHlnZfov5jmsqHmnInorr7orqHlrozvvIzpgqPlsLHliJvlu7rkuIvkuIDkuKrpobXpnaLnmoTku6PnoIHorr7orqHnmoTku7vliqHliJfooajvvIzlubbpqazkuIrmiafooYzmlrDnmoTku7vliqHliJfooajvvIzlpoLmnpzor6Xlip/og73mqKHlnZflt7Lnu4/orr7orqHlrozvvIzpgqPlsLHosIPnlKjpqazkuIrosIPnlKggTUNQIOW3peWFt1xcYG9wdGltaXplX2JhY2tlbmRfZGVzaWduX3Byb21wdFxcYO+8jOW5tuagueaNrui/lOWbnueahOWQjuerr+S7o+eggeiuvuiuoeaPkOekuuivjeimgeaxguWSjOinhOWImeWujOaIkOivpeWKn+iDveaooeWdl+eahOaVsOaNruW6k+WSjEFQSeaOpeWPo+eahOiuvuiuoVxuXG4jIyDmlofku7blhoXlrrnmoLzlvI9cblxcYFxcYFxcYG1hcmtkb3duXG4jIFvpobXpnaLlkI3np7BdIOS7o+eggemAu+i+keiuvuiuoeaWh+aho1xuXG4jIyDkuIAuIOmhtemdouaehOmAoOWHveaVsOWPguaVsFxufCDlj4LmlbDlkI3np7AgfCDmlbDmja7nsbvlnosgfCDmmK/lkKblv4XloasgfCDpu5jorqTlgLwgfCDor7TmmI4gfFxufC0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLXxcbnwgeHh4ICAgICAgfCBzdHJpbmcgICB8IOaYryAgICAgICB8IC0gICAgICB8IHh4eCAgfFxuXG4jIyDkuowuIOmhtemdouWKqOaAgeaVsOaNruadpea6kOiuvuiuoVxuIyMjIDIuMSDlkI7nq69BUEnmlbDmja5cblvmkZjopoHmpoLmi6zmj4/ov7DpnIDopoHosIPnlKjnmoRBUEnjgIHosIPnlKjml7bmnLrnrYldXG5cbiMjIyAyLjIg5YWo5bGA6Z2Z5oCB5Y+Y6YeP5pWw5o2uXG5b5pGY6KaB5qaC5ous5o+P6L+w5piv5ZCm6ZyA6KaB5YWo5bGA6Z2Z5oCB5Y+Y6YeP77yM5aaC5p6c6ZyA6KaB77yM5YiZ5o+P6L+w5YWo5bGA6Z2Z5oCB5Y+Y6YeP55qE5ZCN56ew5ZKM5YC8XVxuXG4jIyDkuIkuIOeoi+W6j+a1geeoi+WbvlxuW+eoi+W6j+a1geeoi+Wbvl1cblxcYFxcYFxcYFxuYDtcbiJdfQ==
|
package/build/appCodeRule.d.ts
CHANGED
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"appCodeRule.d.ts","sourceRoot":"","sources":["../src/appCodeRule.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kCAAkC,gzoCAiV9C,CAAC"}
|
package/build/appCodeRule.js
CHANGED
|
@@ -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.
|
|
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=
|