@evomap/evolver 1.89.20 → 2.0.0-beta.0

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.
Files changed (231) hide show
  1. package/README.md +27 -564
  2. package/bin/evolver-llm-proxy.js +3 -0
  3. package/bin/evolver-mcp.js +2 -0
  4. package/bin/evolver-proxy.js +3 -0
  5. package/bin/evolver.js +4 -0
  6. package/index.js +1 -3586
  7. package/package.json +32 -62
  8. package/CONTRIBUTING.md +0 -19
  9. package/LICENSE +0 -641
  10. package/README.ja-JP.md +0 -521
  11. package/README.ko-KR.md +0 -520
  12. package/README.zh-CN.md +0 -531
  13. package/SKILL.md +0 -365
  14. package/assets/cover.png +0 -0
  15. package/assets/gep/genes.seed.json +0 -496
  16. package/conformance/savings-core/constants.json +0 -30
  17. package/conformance/savings-core/golden-vectors.json +0 -333
  18. package/scripts/a2a_export.js +0 -63
  19. package/scripts/a2a_ingest.js +0 -79
  20. package/scripts/a2a_promote.js +0 -118
  21. package/scripts/analyze_by_skill.js +0 -121
  22. package/scripts/build_binaries.js +0 -479
  23. package/scripts/check-changelog.js +0 -166
  24. package/scripts/extract_log.js +0 -85
  25. package/scripts/generate_history.js +0 -75
  26. package/scripts/gep_append_event.js +0 -96
  27. package/scripts/gep_personality_report.js +0 -234
  28. package/scripts/human_report.js +0 -147
  29. package/scripts/recall-verify-report.js +0 -234
  30. package/scripts/recover_loop.js +0 -61
  31. package/scripts/refresh_stars_badge.js +0 -168
  32. package/scripts/seed-merchants.js +0 -91
  33. package/scripts/skill2recipes.js +0 -118
  34. package/scripts/suggest_version.js +0 -89
  35. package/scripts/validate-modules.js +0 -38
  36. package/scripts/validate-suite.js +0 -78
  37. package/skills/_meta/SKILL.md +0 -41
  38. package/skills/index.json +0 -14
  39. package/src/adapters/claudeCode.js +0 -194
  40. package/src/adapters/codex.js +0 -216
  41. package/src/adapters/cursor.js +0 -91
  42. package/src/adapters/hookAdapter.js +0 -469
  43. package/src/adapters/kiro.js +0 -195
  44. package/src/adapters/opencode.js +0 -326
  45. package/src/adapters/scripts/_lockPaths.js +0 -74
  46. package/src/adapters/scripts/_memoryFiltering.js +0 -35
  47. package/src/adapters/scripts/_runtimePaths.js +0 -440
  48. package/src/adapters/scripts/evolver-session-end.js +0 -321
  49. package/src/adapters/scripts/evolver-session-start.js +0 -587
  50. package/src/adapters/scripts/evolver-signal-detect.js +0 -98
  51. package/src/adapters/scripts/evolver-task-recall.js +0 -173
  52. package/src/atp/atpExecute.js +0 -283
  53. package/src/atp/atpTaskPickup.js +0 -233
  54. package/src/atp/autoBuyer.js +0 -382
  55. package/src/atp/autoDeliver.js +0 -215
  56. package/src/atp/cli.js +0 -354
  57. package/src/atp/cliAutobuyPrompt.js +0 -154
  58. package/src/atp/consumerAgent.js +0 -157
  59. package/src/atp/defaultHandler.js +0 -69
  60. package/src/atp/heartbeatSignalsHandler.js +0 -254
  61. package/src/atp/hubClient.js +0 -317
  62. package/src/atp/index.js +0 -38
  63. package/src/atp/merchantAgent.js +0 -118
  64. package/src/atp/protocol.js +0 -41
  65. package/src/atp/questionComposer.js +0 -133
  66. package/src/atp/serviceHelper.js +0 -92
  67. package/src/canary.js +0 -13
  68. package/src/config.js +0 -351
  69. package/src/evolve/guards.js +0 -1
  70. package/src/evolve/pipeline/collect.js +0 -1
  71. package/src/evolve/pipeline/dispatch.js +0 -1
  72. package/src/evolve/pipeline/enrich.js +0 -1
  73. package/src/evolve/pipeline/hub.js +0 -1
  74. package/src/evolve/pipeline/select.js +0 -1
  75. package/src/evolve/pipeline/signals.js +0 -1
  76. package/src/evolve/utils.js +0 -1
  77. package/src/evolve.js +0 -1
  78. package/src/experiment/agentRunner.js +0 -229
  79. package/src/experiment/cli.js +0 -159
  80. package/src/experiment/comparison.js +0 -233
  81. package/src/experiment/metrics.js +0 -75
  82. package/src/forceUpdate.js +0 -991
  83. package/src/gep/a2a.js +0 -173
  84. package/src/gep/a2aProtocol.js +0 -1
  85. package/src/gep/analyzer.js +0 -35
  86. package/src/gep/antiAbuseTelemetry.js +0 -1
  87. package/src/gep/assetCallLog.js +0 -197
  88. package/src/gep/assetStore.js +0 -723
  89. package/src/gep/assets.js +0 -36
  90. package/src/gep/autoDistillConv.js +0 -1
  91. package/src/gep/autoDistillLlm.js +0 -1
  92. package/src/gep/bridge.js +0 -138
  93. package/src/gep/candidateEval.js +0 -1
  94. package/src/gep/candidates.js +0 -1
  95. package/src/gep/claimNudge.js +0 -121
  96. package/src/gep/cliContracts.js +0 -1190
  97. package/src/gep/contentHash.js +0 -1
  98. package/src/gep/conversationDistiller.js +0 -1
  99. package/src/gep/conversationSniffer.js +0 -1
  100. package/src/gep/crypto.js +0 -1
  101. package/src/gep/curriculum.js +0 -1
  102. package/src/gep/deviceId.js +0 -1
  103. package/src/gep/directoryClient.js +0 -115
  104. package/src/gep/envFingerprint.js +0 -1
  105. package/src/gep/epigenetics.js +0 -1
  106. package/src/gep/execBridge.js +0 -1
  107. package/src/gep/executionTrace.js +0 -291
  108. package/src/gep/explore.js +0 -1
  109. package/src/gep/featureFlags.js +0 -121
  110. package/src/gep/gitOps.js +0 -265
  111. package/src/gep/hash.js +0 -1
  112. package/src/gep/hostErrorClassifier.js +0 -34
  113. package/src/gep/hubFetch.js +0 -1
  114. package/src/gep/hubReview.js +0 -1
  115. package/src/gep/hubSearch.js +0 -1
  116. package/src/gep/hubVerify.js +0 -1
  117. package/src/gep/idleScheduler.js +0 -400
  118. package/src/gep/issueReporter.js +0 -416
  119. package/src/gep/learningSignals.js +0 -1
  120. package/src/gep/llmReview.js +0 -92
  121. package/src/gep/localStateAwareness.js +0 -243
  122. package/src/gep/mailboxTransport.js +0 -119
  123. package/src/gep/memoryGraph.js +0 -1
  124. package/src/gep/memoryGraphAdapter.js +0 -1
  125. package/src/gep/mutation.js +0 -1
  126. package/src/gep/narrativeMemory.js +0 -1
  127. package/src/gep/oauthLogin.js +0 -181
  128. package/src/gep/openPRRegistry.js +0 -1
  129. package/src/gep/paths.js +0 -522
  130. package/src/gep/personality.js +0 -1
  131. package/src/gep/policyCheck.js +0 -1
  132. package/src/gep/portable.js +0 -103
  133. package/src/gep/privacyClient.js +0 -235
  134. package/src/gep/prompt.js +0 -1
  135. package/src/gep/questionGenerator.js +0 -518
  136. package/src/gep/recallInject.js +0 -1
  137. package/src/gep/recallVerifier.js +0 -1
  138. package/src/gep/reflection.js +0 -1
  139. package/src/gep/sanitize.js +0 -264
  140. package/src/gep/savingsCore.js +0 -1
  141. package/src/gep/schemas/capsule.js +0 -170
  142. package/src/gep/schemas/gene.js +0 -154
  143. package/src/gep/schemas/index.js +0 -8
  144. package/src/gep/schemas/protocol.js +0 -51
  145. package/src/gep/schemas/task.js +0 -74
  146. package/src/gep/selector.js +0 -1
  147. package/src/gep/selfPR.js +0 -469
  148. package/src/gep/signals.js +0 -776
  149. package/src/gep/skill2gep.js +0 -1056
  150. package/src/gep/skill2gepAudit.js +0 -303
  151. package/src/gep/skill2recipes.js +0 -511
  152. package/src/gep/skillDistiller.js +0 -1
  153. package/src/gep/skillPublisher.js +0 -358
  154. package/src/gep/solidify.js +0 -1
  155. package/src/gep/strategy.js +0 -1
  156. package/src/gep/taskReceiver.js +0 -575
  157. package/src/gep/tokenSavings.js +0 -1
  158. package/src/gep/trajectoryExport.js +0 -1
  159. package/src/gep/validationReport.js +0 -55
  160. package/src/gep/validator/index.js +0 -411
  161. package/src/gep/validator/reporter.js +0 -210
  162. package/src/gep/validator/sandboxExecutor.js +0 -480
  163. package/src/gep/validator/stakeBootstrap.js +0 -357
  164. package/src/gep/workspaceKeychain.js +0 -1
  165. package/src/ops/cleanup.js +0 -80
  166. package/src/ops/commentary.js +0 -60
  167. package/src/ops/health_check.js +0 -104
  168. package/src/ops/index.js +0 -11
  169. package/src/ops/innovation.js +0 -67
  170. package/src/ops/lifecycle.js +0 -798
  171. package/src/ops/self_repair.js +0 -76
  172. package/src/ops/skills_monitor.js +0 -147
  173. package/src/ops/trigger.js +0 -33
  174. package/src/proxy/clientSettings.js +0 -405
  175. package/src/proxy/envelope.js +0 -59
  176. package/src/proxy/extensions/dmHandler.js +0 -45
  177. package/src/proxy/extensions/sessionHandler.js +0 -141
  178. package/src/proxy/extensions/skillUpdater.js +0 -64
  179. package/src/proxy/extensions/traceControl.js +0 -1
  180. package/src/proxy/index.js +0 -1395
  181. package/src/proxy/inject.js +0 -1
  182. package/src/proxy/lifecycle/manager.js +0 -1568
  183. package/src/proxy/mailbox/state.js +0 -207
  184. package/src/proxy/mailbox/store.js +0 -590
  185. package/src/proxy/router/cache_passthrough.js +0 -26
  186. package/src/proxy/router/features.js +0 -84
  187. package/src/proxy/router/gemini_route.js +0 -154
  188. package/src/proxy/router/messages_route.js +0 -535
  189. package/src/proxy/router/model_router.js +0 -113
  190. package/src/proxy/router/models_route.js +0 -52
  191. package/src/proxy/router/ollama_route.js +0 -103
  192. package/src/proxy/router/responses_route.js +0 -170
  193. package/src/proxy/router/vertex_route.js +0 -110
  194. package/src/proxy/server/http.js +0 -363
  195. package/src/proxy/server/routes.js +0 -558
  196. package/src/proxy/server/settings.js +0 -115
  197. package/src/proxy/sync/engine.js +0 -179
  198. package/src/proxy/sync/inbound.js +0 -211
  199. package/src/proxy/sync/outbound.js +0 -320
  200. package/src/proxy/task/monitor.js +0 -131
  201. package/src/proxy/trace/extractor.js +0 -1
  202. package/src/proxy/trace/usage.js +0 -1
  203. package/src/webui/client/clientJs/assets.js +0 -111
  204. package/src/webui/client/clientJs/bootstrap.js +0 -92
  205. package/src/webui/client/clientJs/common.js +0 -77
  206. package/src/webui/client/clientJs/i18n.js +0 -366
  207. package/src/webui/client/clientJs/index.js +0 -35
  208. package/src/webui/client/clientJs/interactions.js +0 -351
  209. package/src/webui/client/clientJs/overview.js +0 -152
  210. package/src/webui/client/clientJs/personality.js +0 -285
  211. package/src/webui/client/clientJs/pipelines.js +0 -330
  212. package/src/webui/client/indexHtml.js +0 -221
  213. package/src/webui/client/static.js +0 -23
  214. package/src/webui/client/stylesCss.js +0 -639
  215. package/src/webui/client/vendor/README.md +0 -15
  216. package/src/webui/client/vendor/echarts.min.js +0 -45
  217. package/src/webui/index.js +0 -14
  218. package/src/webui/observer/assets.js +0 -146
  219. package/src/webui/observer/index.js +0 -37
  220. package/src/webui/observer/interactions.js +0 -127
  221. package/src/webui/observer/jsonl.js +0 -75
  222. package/src/webui/observer/paths.js +0 -46
  223. package/src/webui/observer/personality.js +0 -43
  224. package/src/webui/observer/pipelineEvents.js +0 -58
  225. package/src/webui/observer/redact.js +0 -63
  226. package/src/webui/observer/runs.js +0 -356
  227. package/src/webui/observer/safety.js +0 -57
  228. package/src/webui/observer/skills.js +0 -70
  229. package/src/webui/observer/status.js +0 -71
  230. package/src/webui/server/http.js +0 -138
  231. package/src/webui/server/routes.js +0 -41
@@ -1 +0,0 @@
1
- var _0x453d31=_0x40ad;(function(_0x58d311,_0x55bf08){var _0x572d94=_0x40ad,_0x5b17d3=_0x58d311();while(!![]){try{var _0x25346d=parseInt(_0x572d94(0x1ab,'\x57\x45\x28\x64'))/(0x21d5+0xaf+-0x5*0x6e7)*(-parseInt(_0x572d94(0x28f,'\x52\x6c\x6e\x79'))/(-0xf48+-0x2d*0x2a+-0x4*-0x5ab))+-parseInt(_0x572d94(0x1f5,'\x67\x23\x5a\x71'))/(0x2033+-0x132*0x10+-0x2*0x688)*(-parseInt(_0x572d94(0x1db,'\x45\x43\x29\x4c'))/(-0x1*0x939+0x17*-0x11c+0xd9*0x29))+parseInt(_0x572d94(0x22d,'\x37\x36\x7a\x71'))/(-0x19bf+0x33*0xb+0x1793)+parseInt(_0x572d94(0x21f,'\x53\x6a\x75\x61'))/(-0x1a70+-0x133+0x1ba9)+-parseInt(_0x572d94(0x1e4,'\x53\x43\x5e\x21'))/(0x24b+-0x19db+0x1797)*(-parseInt(_0x572d94(0x1ee,'\x53\x43\x5e\x21'))/(0x1d78+0x21ad*-0x1+0x43d))+parseInt(_0x572d94(0x266,'\x4d\x6e\x6d\x40'))/(-0x39*-0x13+-0x1b47+0x1715)*(-parseInt(_0x572d94(0x254,'\x2a\x50\x41\x6a'))/(-0x1*0x15ce+-0x8ba*0x2+-0x3ee*-0xa))+-parseInt(_0x572d94(0x26c,'\x45\x43\x29\x4c'))/(0x2387+0x1335+-0x435*0xd);if(_0x25346d===_0x55bf08)break;else _0x5b17d3['push'](_0x5b17d3['shift']());}catch(_0x480efb){_0x5b17d3['push'](_0x5b17d3['shift']());}}}(_0x24b8,-0x1bc80+-0x4fefd+-0x22570*-0x5));var _0x4ac194=(function(){var _0x38f442=_0x40ad,_0x143693={'\x6e\x41\x64\x4b\x59':function(_0x114872){return _0x114872();},'\x54\x43\x41\x44\x43':function(_0xb95822,_0x3823af){return _0xb95822<=_0x3823af;},'\x56\x6b\x42\x4d\x42':_0x38f442(0x1cb,'\x6c\x49\x4d\x77')+_0x38f442(0x1a1,'\x43\x6b\x40\x7a'),'\x70\x6b\x45\x49\x52':function(_0x57283b,_0x328342){return _0x57283b!==_0x328342;},'\x75\x6f\x7a\x45\x6f':function(_0x37fcdc,_0x5b58b1){return _0x37fcdc===_0x5b58b1;},'\x48\x77\x6c\x68\x4d':_0x38f442(0x231,'\x7a\x52\x41\x74'),'\x4b\x6f\x7a\x57\x73':_0x38f442(0x283,'\x4a\x59\x5b\x69'),'\x5a\x62\x44\x50\x76':_0x38f442(0x271,'\x41\x67\x42\x76'),'\x76\x55\x57\x48\x73':_0x38f442(0x24c,'\x31\x49\x61\x39')},_0x50d6e7=!![];return function(_0x19ec58,_0x4938bc){var _0x51e9c2=_0x38f442,_0x834ec4={'\x69\x45\x59\x52\x74':function(_0xc1b9b){var _0x56b03e=_0x40ad;return _0x143693[_0x56b03e(0x273,'\x38\x45\x71\x50')](_0xc1b9b);},'\x48\x44\x71\x5a\x77':function(_0x5e3424,_0xd65164){var _0xd2a50a=_0x40ad;return _0x143693[_0xd2a50a(0x1c2,'\x4a\x59\x5b\x69')](_0x5e3424,_0xd65164);},'\x69\x76\x4f\x4a\x77':_0x143693[_0x51e9c2(0x24b,'\x31\x49\x61\x39')],'\x78\x64\x67\x77\x65':function(_0x51cc78,_0xd6535c){var _0x63ed78=_0x51e9c2;return _0x143693[_0x63ed78(0x1ed,'\x7a\x52\x41\x74')](_0x51cc78,_0xd6535c);},'\x68\x4c\x76\x4a\x47':_0x51e9c2(0x204,'\x4b\x28\x6f\x28')+_0x51e9c2(0x19f,'\x50\x49\x5a\x6e')+'\x74\x65','\x79\x75\x54\x62\x51':function(_0x43c350,_0x4c3114){return _0x43c350!==_0x4c3114;},'\x42\x62\x4c\x46\x4d':'\x65\x76\x6f\x6c\x75\x74\x69\x6f'+_0x51e9c2(0x26a,'\x45\x51\x28\x41')+'\x74\x69\x6f\x6e','\x67\x43\x57\x74\x6f':function(_0x327f28,_0x1cb9ab){return _0x143693['\x75\x6f\x7a\x45\x6f'](_0x327f28,_0x1cb9ab);},'\x70\x6e\x66\x41\x55':_0x143693[_0x51e9c2(0x290,'\x46\x24\x39\x6f')],'\x47\x45\x51\x63\x4b':_0x143693[_0x51e9c2(0x279,'\x54\x47\x51\x5a')]};if(_0x143693[_0x51e9c2(0x21a,'\x53\x6a\x75\x61')](_0x143693[_0x51e9c2(0x268,'\x48\x4a\x5b\x45')],_0x143693[_0x51e9c2(0x2a2,'\x24\x6b\x50\x76')])){var _0x16fcc3=_0x834ec4[_0x51e9c2(0x1f8,'\x38\x45\x71\x50')](_0x122e55);_0x16fcc3>-0x1232+0x14fa+0x164*-0x2&&_0x834ec4['\x48\x44\x71\x5a\x77'](_0x16fcc3,0x1*-0x1cd9+0x24c7+-0x7e9)&&(_0x141717=_0x834ec4[_0x51e9c2(0x29c,'\x4b\x28\x6f\x28')]);if(_0x834ec4[_0x51e9c2(0x217,'\x45\x6b\x59\x71')](_0x4d7ee5['\x69\x6e\x64\x65\x78\x4f\x66'](_0x834ec4['\x68\x4c\x76\x4a\x47']),-(0x1*-0x260e+-0x104*0x5+-0xe61*-0x3)))_0x1f175d='\x73\x74\x65\x61\x64\x79\x2d\x73'+_0x51e9c2(0x25d,'\x4b\x28\x6f\x28');else _0x834ec4[_0x51e9c2(0x2a4,'\x2a\x50\x41\x6a')](_0x23dd07[_0x51e9c2(0x1b3,'\x31\x49\x61\x39')](_0x834ec4[_0x51e9c2(0x1a7,'\x71\x70\x4d\x28')]),-(-0x195e+0x1*0x109e+0x8c1))&&(_0x5a4482=_0x51e9c2(0x1de,'\x5b\x5a\x44\x6d')+_0x51e9c2(0x229,'\x37\x36\x7a\x71'));}else{var _0x42b457=_0x50d6e7?function(){var _0x16af3b=_0x51e9c2;if(_0x4938bc){if(_0x834ec4[_0x16af3b(0x272,'\x5e\x67\x55\x68')](_0x834ec4[_0x16af3b(0x261,'\x21\x77\x6c\x62')],_0x834ec4['\x47\x45\x51\x63\x4b']))return _0x3278e8[_0x16af3b(0x1bc,'\x53\x6a\x75\x61')](_0x35c76a);else{var _0x4a5cf7=_0x4938bc[_0x16af3b(0x1d7,'\x41\x58\x2a\x4f')](_0x19ec58,arguments);return _0x4938bc=null,_0x4a5cf7;}}}:function(){};return _0x50d6e7=![],_0x42b457;}};}()),_0x30d108=_0x4ac194(this,function(){var _0x5853a7=_0x40ad,_0xa31f77={};_0xa31f77[_0x5853a7(0x212,'\x71\x63\x49\x26')]=_0x5853a7(0x2a1,'\x52\x6c\x6e\x79')+_0x5853a7(0x23d,'\x5e\x67\x55\x68');var _0x53a4a5=_0xa31f77;return _0x30d108[_0x5853a7(0x248,'\x45\x6b\x59\x71')]()[_0x5853a7(0x241,'\x4f\x35\x75\x45')](_0x5853a7(0x274,'\x35\x50\x5b\x25')+_0x5853a7(0x1da,'\x45\x70\x21\x42'))['\x74\x6f\x53\x74\x72\x69\x6e\x67']()['\x63\x6f\x6e\x73\x74\x72\x75\x63'+_0x5853a7(0x1a0,'\x48\x4a\x5b\x45')](_0x30d108)[_0x5853a7(0x1d0,'\x53\x43\x5e\x21')](_0x53a4a5[_0x5853a7(0x24f,'\x28\x4b\x42\x4a')]);});_0x30d108();var _0x3acc9d=require('\x66\x73'),_0x4117cb=require('\x70\x61\x74\x68'),_0x2bb72c={};function _0x24b8(){var _0x236d17=['\x57\x35\x48\x49\x6c\x58\x4b','\x57\x52\x33\x64\x47\x64\x76\x50\x57\x36\x4c\x33\x57\x37\x71','\x57\x50\x2f\x63\x54\x6d\x6f\x68\x57\x52\x69\x6b','\x57\x51\x68\x64\x48\x74\x79','\x45\x43\x6f\x46\x6a\x4b\x35\x52\x57\x50\x30\x62\x57\x36\x38','\x43\x6d\x6f\x6b\x6e\x66\x57\x53\x67\x78\x71\x39','\x57\x51\x7a\x36\x6b\x4d\x53','\x57\x50\x31\x71\x62\x72\x79','\x77\x43\x6f\x75\x43\x53\x6f\x68\x62\x57\x42\x63\x4f\x31\x75','\x57\x36\x75\x7a\x57\x52\x69','\x57\x36\x38\x5a\x57\x34\x57\x43\x57\x4f\x34','\x73\x38\x6b\x42\x57\x34\x52\x64\x53\x53\x6b\x6f','\x72\x76\x2f\x63\x4b\x43\x6f\x52\x57\x35\x52\x63\x48\x53\x6f\x42','\x7a\x6d\x6f\x55\x74\x38\x6f\x57\x6d\x4a\x46\x63\x4a\x78\x69','\x72\x6d\x6b\x30\x57\x36\x6a\x30','\x66\x4c\x64\x63\x47\x38\x6f\x33\x57\x35\x52\x63\x54\x6d\x6f\x34\x57\x4f\x4f','\x43\x43\x6b\x6e\x61\x43\x6f\x32\x72\x6d\x6f\x6a\x62\x6d\x6b\x58\x69\x43\x6b\x61\x65\x49\x4b','\x57\x4f\x74\x64\x4b\x64\x46\x63\x4d\x4e\x57','\x6f\x4d\x43\x56\x43\x6d\x6b\x4d','\x57\x50\x58\x6a\x57\x37\x78\x63\x49\x38\x6f\x44','\x57\x51\x64\x64\x54\x49\x66\x4d\x57\x37\x58\x55\x57\x37\x75\x63','\x57\x51\x39\x67\x75\x57\x66\x39\x57\x35\x6c\x64\x4d\x6d\x6f\x76','\x6c\x4e\x5a\x63\x53\x73\x62\x79\x73\x47\x72\x6d\x44\x33\x79\x4d\x57\x37\x6c\x64\x4c\x47','\x43\x48\x64\x64\x54\x32\x30\x70\x63\x4c\x69\x30','\x57\x35\x31\x48\x6e\x62\x35\x53\x57\x4f\x39\x78\x57\x52\x47','\x57\x50\x5a\x63\x4d\x6d\x6f\x57\x57\x52\x34\x44','\x6f\x74\x6c\x64\x52\x53\x6f\x31\x57\x4f\x53\x64','\x44\x6d\x6f\x44\x57\x37\x70\x63\x4c\x53\x6b\x61','\x6d\x78\x4e\x63\x52\x65\x33\x63\x4d\x57','\x67\x62\x42\x64\x4a\x38\x6b\x76\x57\x52\x79','\x57\x34\x4e\x63\x4e\x65\x37\x64\x56\x73\x46\x63\x4f\x4e\x2f\x63\x53\x47','\x57\x36\x6d\x41\x57\x52\x47','\x70\x6d\x6f\x6e\x57\x35\x6d\x56\x7a\x43\x6f\x7a\x46\x6d\x6b\x68','\x46\x38\x6f\x61\x68\x61','\x57\x36\x78\x64\x54\x53\x6b\x36\x57\x37\x4a\x64\x48\x62\x79\x62\x57\x36\x53','\x46\x71\x6c\x64\x50\x6d\x6f\x79\x57\x34\x79','\x7a\x53\x6f\x58\x63\x67\x34','\x57\x4f\x37\x63\x50\x73\x57\x53\x6b\x57','\x6b\x53\x6f\x66\x57\x35\x61\x47','\x65\x33\x65\x6f\x71\x43\x6b\x30\x57\x51\x4e\x63\x48\x53\x6b\x70','\x6c\x6d\x6f\x6a\x57\x34\x38\x56\x79\x53\x6f\x69\x76\x43\x6b\x6d','\x65\x53\x6f\x66\x70\x75\x50\x49\x68\x4e\x47\x52','\x6c\x53\x6b\x6e\x77\x53\x6f\x45\x6d\x4c\x43','\x77\x53\x6f\x55\x42\x43\x6f\x30\x70\x61','\x57\x35\x4b\x62\x57\x52\x70\x64\x4a\x71\x34\x48\x70\x38\x6b\x59','\x63\x53\x6b\x50\x72\x43\x6f\x30\x67\x47','\x6f\x75\x52\x63\x52\x31\x68\x63\x48\x4e\x4e\x64\x50\x6d\x6b\x45','\x6f\x66\x56\x63\x4c\x4c\x57','\x57\x52\x62\x50\x6c\x32\x46\x64\x4a\x62\x56\x63\x4d\x49\x34','\x57\x37\x6e\x73\x6d\x63\x66\x63','\x57\x50\x35\x50\x57\x50\x42\x63\x4a\x6d\x6b\x59\x57\x50\x42\x63\x4a\x43\x6f\x62','\x57\x4f\x37\x63\x50\x48\x43\x55','\x57\x37\x62\x44\x57\x37\x65\x67\x57\x35\x68\x64\x51\x38\x6b\x72\x76\x57','\x57\x52\x74\x63\x4c\x38\x6f\x4e\x57\x52\x47\x57','\x57\x4f\x35\x65\x57\x34\x5a\x63\x56\x71','\x72\x4e\x66\x68\x65\x53\x6f\x2f','\x57\x36\x69\x30\x57\x50\x43\x49\x57\x4f\x53\x5a','\x57\x34\x43\x51\x71\x4c\x31\x2f\x57\x37\x34\x44\x57\x34\x37\x64\x4d\x57','\x78\x53\x6f\x79\x68\x4b\x35\x75','\x45\x53\x6b\x78\x57\x36\x37\x64\x56\x53\x6b\x34','\x57\x4f\x4a\x64\x48\x59\x64\x63\x55\x4d\x6c\x64\x4f\x49\x64\x64\x56\x47','\x6c\x53\x6b\x6e\x77\x53\x6f\x45\x6d\x4c\x44\x79\x57\x51\x71','\x57\x37\x6c\x63\x4d\x53\x6f\x6c\x57\x52\x6e\x67','\x64\x4e\x57\x46\x73\x6d\x6b\x35\x57\x52\x37\x64\x4a\x6d\x6f\x43','\x77\x43\x6f\x6f\x57\x35\x4a\x63\x52\x53\x6b\x70','\x57\x51\x44\x4e\x63\x4b\x37\x64\x48\x57','\x72\x53\x6f\x44\x57\x37\x2f\x63\x4b\x6d\x6b\x31\x6c\x47','\x57\x36\x66\x4f\x6d\x57\x6e\x4b\x57\x4f\x53\x6e\x57\x52\x71','\x57\x37\x65\x33\x57\x35\x30\x77\x57\x4f\x37\x63\x47\x43\x6b\x52','\x6b\x33\x42\x63\x54\x73\x4c\x77\x74\x4d\x6e\x57\x79\x4b\x4b\x7a\x57\x34\x34','\x57\x4f\x62\x68\x70\x4a\x4b\x69','\x74\x43\x6b\x43\x77\x71','\x57\x36\x4f\x38\x57\x34\x61\x77\x57\x50\x74\x63\x4c\x53\x6b\x36\x57\x50\x61','\x57\x35\x31\x39\x6a\x61','\x64\x43\x6b\x66\x73\x38\x6f\x45\x76\x4a\x68\x63\x51\x43\x6b\x4e','\x57\x35\x4f\x37\x77\x62\x65\x59\x57\x4f\x44\x36\x57\x51\x69','\x57\x51\x54\x64\x71\x77\x54\x75','\x57\x51\x2f\x64\x48\x5a\x79\x4e\x57\x36\x54\x36\x57\x37\x43\x63','\x76\x38\x6b\x59\x57\x35\x4c\x34\x57\x4f\x4b','\x79\x53\x6f\x38\x66\x78\x6c\x64\x54\x43\x6b\x77\x62\x6d\x6b\x4d','\x41\x38\x6f\x49\x73\x43\x6f\x51\x6f\x4a\x4e\x63\x47\x71','\x57\x50\x2f\x64\x47\x67\x2f\x63\x4e\x6d\x6b\x33\x6b\x6d\x6f\x6b','\x57\x52\x64\x63\x4e\x38\x6f\x46\x57\x50\x57\x6d\x57\x37\x65','\x68\x43\x6f\x52\x57\x50\x39\x4f\x57\x52\x42\x64\x51\x43\x6f\x77\x57\x52\x62\x78\x65\x32\x4b\x5a\x6a\x71','\x57\x37\x35\x47\x78\x43\x6b\x65\x78\x6d\x6f\x7a\x74\x53\x6f\x4b','\x57\x52\x48\x31\x79\x4b\x50\x69\x42\x4d\x78\x64\x54\x57','\x57\x4f\x4a\x64\x4d\x47\x4a\x63\x56\x68\x52\x64\x51\x49\x64\x64\x56\x47','\x66\x53\x6f\x69\x73\x68\x2f\x64\x4b\x71','\x78\x53\x6b\x64\x57\x34\x70\x64\x4e\x38\x6b\x55\x57\x36\x46\x63\x4a\x6d\x6f\x62','\x57\x51\x4b\x6c\x6c\x71\x4a\x63\x4a\x53\x6f\x49\x57\x52\x4a\x64\x52\x71','\x66\x67\x4f\x7a','\x7a\x4e\x66\x53\x6d\x38\x6f\x31\x72\x6d\x6f\x4c','\x71\x6d\x6b\x48\x57\x34\x54\x30\x57\x51\x57','\x57\x51\x6c\x64\x4a\x61\x4a\x63\x55\x77\x65','\x57\x35\x4e\x63\x47\x53\x6f\x30\x57\x51\x62\x65\x57\x34\x52\x64\x55\x48\x53','\x42\x38\x6f\x4b\x43\x43\x6f\x70\x69\x57','\x57\x37\x70\x63\x4e\x38\x6f\x4c\x57\x52\x54\x6f\x57\x34\x42\x64\x52\x48\x30','\x57\x52\x4a\x64\x4d\x4c\x70\x63\x54\x53\x6b\x76','\x69\x43\x6b\x44\x73\x53\x6f\x44\x76\x73\x74\x63\x54\x6d\x6b\x48','\x44\x53\x6b\x6e\x71\x6d\x6b\x39\x66\x6d\x6b\x33\x6a\x6d\x6b\x36','\x57\x50\x78\x64\x49\x65\x56\x63\x4d\x6d\x6b\x51\x70\x38\x6f\x43\x57\x4f\x61','\x57\x51\x47\x63\x57\x52\x62\x77\x57\x35\x78\x64\x53\x38\x6b\x39\x71\x58\x6a\x33','\x70\x38\x6b\x72\x73\x43\x6f\x74\x70\x4d\x7a\x37\x57\x52\x34','\x57\x36\x47\x75\x73\x38\x6f\x4f\x57\x51\x79\x43\x72\x71','\x57\x37\x47\x45\x61\x75\x4b\x77\x57\x50\x4a\x63\x4c\x6d\x6f\x68\x57\x4f\x64\x64\x55\x63\x71\x79\x57\x4f\x38','\x75\x57\x4e\x64\x4a\x38\x6f\x67\x57\x34\x75','\x57\x36\x31\x61\x57\x35\x69\x49\x57\x37\x65','\x57\x50\x39\x44\x57\x34\x4a\x63\x54\x38\x6f\x38\x45\x53\x6f\x4d','\x72\x53\x6f\x34\x57\x34\x42\x64\x4a\x38\x6f\x6a\x57\x34\x78\x63\x55\x53\x6f\x51','\x57\x35\x54\x2f\x6a\x62\x6a\x35\x57\x51\x4c\x6c','\x57\x36\x4c\x74\x57\x37\x65\x43\x57\x34\x61','\x45\x43\x6b\x37\x57\x35\x4e\x64\x53\x53\x6b\x56','\x62\x38\x6b\x38\x57\x35\x42\x63\x51\x6d\x6b\x45','\x57\x36\x47\x75\x73\x38\x6f\x4f\x57\x51\x79\x43\x72\x43\x6b\x58','\x73\x53\x6b\x39\x57\x35\x70\x64\x47\x43\x6f\x70\x57\x35\x78\x64\x51\x6d\x6f\x49','\x57\x36\x58\x67\x57\x36\x76\x78','\x57\x4f\x44\x76\x75\x71\x65\x71\x46\x53\x6f\x45\x77\x61','\x6b\x4a\x78\x64\x54\x38\x6f\x34\x57\x4f\x53\x6c\x57\x34\x4f','\x57\x50\x50\x38\x57\x52\x56\x63\x4c\x57','\x71\x4e\x6a\x33\x6d\x38\x6f\x4c\x68\x53\x6f\x74\x57\x4f\x4f','\x78\x43\x6b\x39\x57\x35\x4f\x57\x57\x36\x4e\x63\x52\x38\x6b\x50\x57\x4f\x4b','\x65\x66\x61\x4c\x72\x43\x6b\x63','\x76\x43\x6f\x6b\x57\x34\x42\x63\x53\x43\x6b\x56\x57\x4f\x43\x54\x57\x34\x69','\x57\x50\x42\x64\x4d\x78\x33\x63\x4c\x43\x6b\x30','\x63\x6d\x6b\x52\x41\x38\x6f\x37\x67\x61','\x78\x43\x6b\x39\x57\x35\x4b\x2b\x57\x36\x5a\x63\x51\x38\x6b\x61','\x57\x36\x57\x75\x73\x53\x6f\x2b\x57\x52\x34\x63\x73\x43\x6b\x6d','\x57\x36\x71\x33\x57\x4f\x62\x7a\x57\x51\x74\x63\x4d\x6d\x6b\x54\x57\x4f\x61','\x46\x38\x6f\x4e\x45\x43\x6f\x58\x6f\x47','\x46\x43\x6f\x6b\x63\x31\x75','\x57\x34\x74\x64\x50\x43\x6b\x4d\x57\x37\x46\x64\x47\x57\x53\x79\x57\x37\x61','\x57\x4f\x69\x66\x6f\x58\x5a\x63\x53\x6d\x6f\x39\x57\x36\x5a\x64\x4f\x57','\x57\x36\x4f\x73\x57\x36\x57\x62\x57\x4f\x78\x64\x53\x43\x6b\x46\x75\x57','\x74\x38\x6f\x7a\x57\x36\x70\x63\x4d\x38\x6b\x34\x41\x31\x64\x63\x55\x57','\x57\x35\x62\x66\x57\x36\x65\x6a\x57\x35\x61','\x57\x4f\x39\x5a\x7a\x4b\x6a\x6f\x43\x4a\x42\x63\x4c\x47','\x71\x38\x6f\x78\x57\x37\x38','\x57\x50\x72\x48\x57\x52\x6c\x63\x49\x6d\x6b\x56\x57\x4f\x68\x63\x4d\x57','\x57\x35\x70\x64\x50\x43\x6b\x30\x57\x36\x42\x64\x4b\x47\x4f','\x57\x51\x6e\x6a\x77\x72\x44\x75\x57\x34\x64\x64\x4d\x6d\x6f\x72','\x6c\x43\x6b\x65\x73\x57','\x57\x51\x47\x70\x6f\x48\x6c\x63\x4f\x38\x6f\x34\x57\x52\x5a\x64\x55\x61','\x71\x53\x6b\x6a\x45\x4e\x66\x4c','\x7a\x53\x6f\x4d\x66\x77\x33\x64\x51\x6d\x6b\x66\x63\x38\x6b\x31','\x57\x37\x31\x2f\x7a\x76\x62\x73\x7a\x77\x78\x64\x55\x71','\x63\x53\x6b\x54\x57\x34\x74\x63\x4f\x43\x6b\x6c','\x57\x36\x65\x58\x43\x64\x78\x63\x4c\x30\x64\x63\x51\x58\x4a\x63\x4f\x64\x70\x64\x56\x32\x57','\x62\x6d\x6b\x79\x57\x35\x5a\x63\x4c\x53\x6b\x35\x6c\x30\x37\x63\x50\x47','\x42\x38\x6f\x63\x64\x53\x6b\x76','\x6c\x4e\x46\x63\x53\x49\x58\x77\x72\x4b\x44\x38\x71\x75\x4b\x30\x57\x35\x71','\x57\x51\x76\x78\x71\x58\x66\x70\x57\x34\x4a\x64\x4c\x53\x6f\x72','\x57\x51\x2f\x63\x55\x47\x4b\x53\x64\x30\x30\x32\x68\x71','\x78\x6d\x6b\x53\x57\x34\x38\x57\x57\x36\x74\x63\x50\x6d\x6f\x69\x57\x50\x75','\x57\x4f\x58\x71\x61\x58\x38\x67\x6d\x43\x6f\x79\x78\x57','\x41\x38\x6f\x30\x57\x34\x4e\x64\x48\x43\x6f\x70','\x67\x65\x33\x64\x4a\x43\x6f\x37\x57\x35\x62\x4d\x57\x36\x31\x4e','\x57\x36\x37\x64\x4a\x74\x31\x55\x57\x36\x7a\x38\x57\x51\x43\x63','\x72\x6d\x6b\x6f\x74\x4e\x54\x30\x57\x35\x34','\x57\x50\x70\x63\x55\x43\x6f\x4d\x57\x51\x46\x63\x48\x66\x4f\x38\x57\x35\x7a\x51\x44\x72\x33\x64\x4d\x61','\x74\x4d\x72\x4e\x6f\x43\x6f\x50','\x62\x4b\x78\x63\x4b\x43\x6b\x36','\x57\x36\x31\x74\x57\x37\x43\x6b','\x57\x4f\x44\x67\x67\x49\x53\x6e','\x76\x6d\x6b\x66\x57\x37\x4a\x64\x4d\x38\x6b\x50\x57\x37\x42\x63\x4c\x53\x6f\x67','\x6b\x78\x2f\x64\x4a\x78\x43\x39\x6f\x4d\x72\x33','\x70\x53\x6f\x37\x69\x4c\x39\x54\x63\x78\x48\x48','\x75\x31\x46\x63\x4e\x53\x6f\x36\x57\x34\x68\x63\x56\x38\x6f\x53\x57\x4f\x4f','\x42\x61\x31\x5a\x57\x37\x4b\x4e','\x57\x50\x70\x63\x53\x53\x6b\x47\x57\x36\x5a\x64\x4c\x73\x30\x39\x57\x36\x65','\x57\x35\x70\x64\x54\x6d\x6b\x57\x57\x37\x78\x64\x4c\x72\x54\x66\x57\x37\x43','\x57\x4f\x62\x46\x68\x58\x57\x6a\x46\x43\x6f\x46\x74\x47','\x7a\x43\x6f\x72\x57\x37\x4a\x63\x4b\x53\x6b\x31','\x72\x38\x6b\x50\x57\x36\x6e\x31\x57\x51\x34\x61\x79\x53\x6b\x6c','\x6e\x53\x6f\x77\x75\x53\x6b\x52\x65\x43\x6b\x75\x61\x47','\x57\x4f\x35\x6b\x57\x37\x74\x63\x54\x38\x6f\x35\x41\x38\x6f\x4e\x67\x57','\x57\x51\x52\x63\x47\x43\x6f\x33\x57\x52\x54\x72\x57\x37\x4a\x64\x48\x61','\x6f\x6d\x6b\x6e\x64\x57\x33\x63\x53\x53\x6b\x48\x57\x35\x76\x69','\x57\x36\x57\x38\x57\x4f\x34\x2f\x57\x4f\x33\x63\x4c\x6d\x6b\x37\x57\x4f\x79','\x68\x58\x6c\x64\x53\x53\x6b\x6d\x57\x50\x53','\x57\x35\x48\x71\x57\x34\x65\x49\x57\x34\x79','\x41\x33\x7a\x52\x6f\x6d\x6f\x4f\x76\x47','\x57\x36\x4b\x2b\x57\x4f\x47\x55\x57\x50\x57\x76\x57\x51\x47\x66','\x62\x64\x6c\x64\x4d\x38\x6b\x2f\x57\x4f\x7a\x54','\x42\x6d\x6f\x72\x57\x36\x70\x63\x48\x6d\x6b\x31\x7a\x4b\x64\x63\x54\x47','\x74\x38\x6b\x71\x57\x34\x4a\x63\x4e\x43\x6f\x37\x57\x35\x37\x63\x48\x6d\x6f\x68','\x68\x65\x68\x63\x4f\x38\x6f\x51\x57\x35\x52\x63\x54\x6d\x6f\x34\x57\x34\x69','\x57\x51\x4c\x45\x76\x62\x72\x68\x57\x36\x6c\x64\x47\x38\x6f\x62','\x57\x52\x39\x4e\x57\x36\x35\x72\x57\x52\x5a\x64\x4f\x47\x37\x63\x52\x71','\x42\x58\x6a\x74\x57\x35\x65\x72\x67\x65\x4a\x63\x52\x61','\x66\x76\x33\x63\x55\x53\x6f\x72\x57\x37\x53','\x57\x4f\x39\x45\x61\x58\x61\x41\x71\x38\x6f\x79\x78\x57','\x69\x49\x74\x64\x4e\x38\x6f\x4d\x57\x50\x61\x71\x57\x35\x79','\x79\x38\x6f\x56\x74\x47','\x57\x37\x38\x71\x73\x53\x6f\x52\x57\x52\x6e\x68\x75\x38\x6b\x77','\x71\x6d\x6b\x5a\x57\x36\x58\x5a\x57\x52\x7a\x62\x43\x38\x6b\x77','\x73\x43\x6b\x71\x57\x34\x33\x64\x4c\x38\x6b\x44\x57\x37\x52\x63\x49\x43\x6f\x6c','\x71\x38\x6f\x6c\x57\x36\x78\x63\x4e\x53\x6b\x56\x69\x71\x70\x63\x52\x61','\x71\x47\x6c\x64\x4b\x53\x6f\x47\x57\x34\x6a\x49\x57\x37\x54\x44','\x64\x64\x6c\x63\x49\x38\x6b\x57\x57\x4f\x50\x4f\x57\x36\x2f\x63\x52\x47','\x72\x61\x4a\x64\x52\x43\x6f\x47\x57\x35\x4c\x58\x57\x36\x57','\x72\x43\x6b\x62\x75\x4e\x62\x4e\x57\x35\x65\x33\x44\x57','\x44\x43\x6f\x48\x64\x67\x64\x64\x51\x6d\x6b\x6e\x6a\x53\x6b\x55','\x75\x38\x6f\x75\x57\x35\x5a\x63\x54\x38\x6b\x30\x57\x4f\x38\x4a\x57\x34\x69','\x57\x35\x74\x64\x4f\x43\x6b\x48\x57\x37\x65','\x57\x50\x56\x63\x52\x43\x6f\x35\x57\x50\x53\x54','\x76\x43\x6b\x61\x57\x37\x42\x64\x4b\x53\x6b\x2b','\x61\x53\x6b\x6a\x68\x61\x33\x63\x4b\x43\x6b\x4d\x57\x35\x62\x64','\x77\x6d\x6b\x2f\x73\x65\x76\x44','\x68\x77\x37\x63\x48\x6d\x6f\x4a\x57\x35\x5a\x63\x50\x6d\x6f\x35\x57\x34\x53','\x57\x37\x7a\x48\x73\x6d\x6b\x73\x74\x71','\x73\x43\x6b\x78\x74\x68\x6e\x2b\x57\x34\x69\x4d','\x57\x52\x66\x4b\x6a\x4e\x78\x63\x4a\x66\x4a\x63\x52\x5a\x47','\x57\x4f\x72\x32\x57\x52\x4a\x63\x4f\x43\x6b\x56','\x57\x51\x30\x7a\x6f\x48\x4a\x63\x54\x53\x6f\x2f','\x57\x51\x79\x4b\x6a\x4a\x56\x63\x54\x61','\x57\x37\x50\x33\x77\x53\x6b\x61','\x64\x38\x6b\x34\x57\x34\x46\x63\x52\x53\x6b\x61\x78\x62\x70\x64\x47\x57','\x57\x34\x6d\x47\x57\x37\x74\x64\x4c\x43\x6f\x30\x57\x34\x52\x64\x48\x53\x6f\x41\x75\x78\x42\x64\x4b\x78\x6c\x63\x4c\x61','\x66\x6d\x6f\x4c\x74\x43\x6b\x56\x6e\x47','\x57\x50\x44\x52\x61\x66\x6e\x32\x57\x35\x57\x30','\x76\x38\x6b\x39\x57\x35\x70\x64\x4c\x6d\x6f\x41\x57\x34\x6c\x64\x54\x53\x6f\x4d','\x75\x75\x33\x64\x56\x6d\x6f\x51\x57\x35\x6e\x4f\x57\x37\x54\x37','\x57\x50\x44\x59\x61\x4c\x6e\x47\x57\x4f\x6d\x49\x57\x37\x38','\x57\x35\x66\x4f\x69\x58\x54\x4b\x57\x51\x76\x63\x57\x51\x47','\x57\x35\x58\x4d\x6b\x59\x39\x5a','\x67\x38\x6f\x51\x57\x50\x35\x49\x57\x52\x74\x64\x52\x6d\x6b\x71\x57\x4f\x48\x6d\x6e\x67\x69\x53','\x57\x51\x6c\x64\x48\x49\x62\x49\x57\x51\x48\x39\x57\x36\x47\x72','\x57\x52\x35\x67\x71\x58\x30','\x74\x61\x48\x37\x57\x34\x69\x41','\x69\x38\x6b\x6f\x75\x43\x6f\x49\x76\x63\x6c\x63\x56\x6d\x6b\x36','\x57\x4f\x62\x32\x61\x66\x35\x57\x57\x35\x57','\x57\x37\x30\x45\x62\x4b\x47\x41\x57\x50\x68\x64\x55\x6d\x6f\x45\x57\x50\x46\x64\x55\x73\x34\x58','\x57\x4f\x46\x64\x4d\x63\x56\x63\x47\x66\x38','\x57\x51\x74\x64\x4c\x6d\x6b\x73\x57\x52\x75\x78\x57\x37\x61\x64\x57\x51\x34','\x45\x71\x6a\x4e\x57\x37\x4b\x66','\x42\x47\x62\x53\x57\x36\x43\x45','\x41\x78\x39\x38','\x57\x36\x38\x6e\x57\x52\x2f\x64\x4e\x58\x34\x52\x74\x6d\x6b\x79','\x57\x36\x76\x5a\x6d\x57\x44\x4e','\x57\x50\x76\x6a\x57\x35\x57','\x71\x43\x6b\x6b\x75\x78\x62\x4a\x57\x34\x4b','\x44\x71\x4c\x79','\x6c\x6d\x6f\x6d\x43\x38\x6b\x53\x68\x53\x6b\x72\x62\x43\x6b\x36','\x57\x37\x75\x44\x78\x61','\x57\x4f\x6e\x55\x57\x37\x72\x42','\x57\x52\x64\x63\x55\x48\x71\x49\x66\x65\x79','\x64\x33\x75\x46\x73\x43\x6b\x39\x57\x52\x4e\x64\x4b\x43\x6b\x7a','\x46\x72\x70\x64\x4b\x62\x30','\x6d\x6d\x6f\x79\x42\x6d\x6b\x59\x67\x71','\x6e\x43\x6f\x69\x69\x4b\x34\x49','\x69\x6d\x6f\x6b\x42\x78\x6c\x64\x53\x33\x57\x67','\x57\x51\x66\x54\x69\x4e\x74\x64\x47\x72\x61','\x41\x71\x4c\x2f\x57\x37\x47\x71','\x57\x50\x48\x54\x69\x4b\x74\x64\x4a\x57','\x57\x51\x48\x67\x77\x58\x4c\x6d\x57\x34\x6c\x64\x49\x43\x6f\x71','\x72\x72\x2f\x64\x53\x6d\x6f\x2f\x57\x37\x34','\x61\x74\x6c\x64\x56\x38\x6f\x77\x57\x4f\x38','\x46\x6d\x6b\x70\x77\x6d\x6f\x71\x6c\x66\x66\x38\x57\x36\x53','\x57\x37\x50\x51\x46\x6d\x6b\x72\x77\x53\x6f\x7a\x74\x38\x6f\x54','\x46\x74\x2f\x64\x50\x78\x53\x68\x65\x4c\x35\x55','\x77\x38\x6f\x41\x77\x6d\x6f\x53\x66\x71','\x57\x36\x72\x36\x61\x4a\x50\x64','\x57\x34\x76\x64\x6a\x4a\x54\x50','\x57\x52\x35\x76\x76\x47\x58\x68\x57\x34\x42\x64\x4c\x71','\x43\x53\x6f\x6b\x61\x75\x76\x52\x57\x50\x65\x63\x57\x37\x6d','\x61\x38\x6f\x4c\x76\x4e\x42\x64\x4a\x57','\x74\x43\x6b\x58\x57\x34\x79\x34\x57\x37\x74\x63\x54\x6d\x6b\x61\x57\x50\x75','\x68\x38\x6b\x6e\x57\x34\x64\x63\x4c\x38\x6b\x2b','\x57\x50\x39\x74\x57\x35\x46\x63\x54\x6d\x6f\x37\x45\x53\x6f\x38\x6e\x57','\x69\x76\x70\x63\x4a\x31\x68\x64\x4c\x67\x2f\x64\x4f\x38\x6b\x78','\x67\x38\x6f\x33\x57\x34\x72\x30\x57\x4f\x53\x4c\x72\x43\x6b\x64','\x6e\x53\x6f\x69\x68\x68\x48\x46'];_0x24b8=function(){return _0x236d17;};return _0x24b8();}_0x2bb72c[_0x453d31(0x22c,'\x52\x6c\x6e\x79')]=0.2,_0x2bb72c[_0x453d31(0x26e,'\x31\x49\x61\x39')]=0.2,_0x2bb72c[_0x453d31(0x210,'\x41\x67\x42\x76')]=0.5,_0x2bb72c[_0x453d31(0x240,'\x28\x4b\x42\x4a')]=0.1,_0x2bb72c[_0x453d31(0x1be,'\x5b\x5a\x44\x6d')+_0x453d31(0x1e9,'\x21\x77\x6c\x62')+_0x453d31(0x259,'\x45\x51\x28\x41')]=0.5,_0x2bb72c['\x6c\x61\x62\x65\x6c']=_0x453d31(0x27f,'\x47\x29\x4a\x55'),_0x2bb72c[_0x453d31(0x1c8,'\x53\x43\x5e\x21')+_0x453d31(0x1d2,'\x45\x70\x21\x42')]=_0x453d31(0x1c9,'\x50\x49\x5a\x6e')+_0x453d31(0x2aa,'\x45\x6b\x59\x71')+_0x453d31(0x1e1,'\x54\x47\x51\x5a')+_0x453d31(0x247,'\x4a\x59\x5b\x69')+_0x453d31(0x253,'\x5e\x67\x55\x68')+'\x62\x69\x6c\x69\x74\x79\x2e';var _0x10c6f4={};_0x10c6f4[_0x453d31(0x270,'\x30\x44\x43\x5a')]=0.05,_0x10c6f4[_0x453d31(0x201,'\x31\x64\x78\x4b')]=0.1,_0x10c6f4['\x69\x6e\x6e\x6f\x76\x61\x74\x65']=0.8,_0x10c6f4[_0x453d31(0x2a7,'\x71\x70\x4d\x28')]=0.05,_0x10c6f4[_0x453d31(0x20f,'\x73\x79\x42\x35')+_0x453d31(0x25a,'\x46\x24\x39\x6f')+_0x453d31(0x235,'\x7a\x35\x55\x55')]=0.3,_0x10c6f4[_0x453d31(0x260,'\x6f\x78\x6d\x30')]=_0x453d31(0x2a0,'\x45\x70\x21\x42')+_0x453d31(0x1f7,'\x6f\x78\x6d\x30'),_0x10c6f4['\x64\x65\x73\x63\x72\x69\x70\x74'+_0x453d31(0x275,'\x67\x63\x28\x4c')]=_0x453d31(0x299,'\x31\x49\x61\x39')+_0x453d31(0x222,'\x66\x36\x34\x78')+_0x453d31(0x1d9,'\x6c\x49\x4d\x77')+_0x453d31(0x20c,'\x38\x45\x71\x50')+_0x453d31(0x265,'\x53\x57\x23\x35')+_0x453d31(0x2a3,'\x45\x51\x28\x41')+_0x453d31(0x250,'\x5b\x5a\x44\x6d')+'\x2e';var _0x28f918={};_0x28f918[_0x453d31(0x1fc,'\x38\x45\x71\x50')]=0.4,_0x28f918[_0x453d31(0x1a6,'\x67\x23\x5a\x71')]=0.35,_0x28f918[_0x453d31(0x1f0,'\x4b\x28\x6f\x28')]=0.2,_0x28f918[_0x453d31(0x1cf,'\x53\x6a\x75\x61')]=0.05,_0x28f918[_0x453d31(0x1dd,'\x30\x23\x39\x6d')+_0x453d31(0x1ff,'\x53\x57\x23\x35')+_0x453d31(0x239,'\x37\x53\x59\x48')]=0.7,_0x28f918[_0x453d31(0x1c1,'\x71\x70\x4d\x28')]=_0x453d31(0x214,'\x75\x61\x57\x24')+'\x67',_0x28f918[_0x453d31(0x24e,'\x46\x24\x39\x6f')+_0x453d31(0x206,'\x51\x24\x6b\x48')]='\x41\x66\x74\x65\x72\x20\x61\x20'+'\x62\x69\x67\x20\x63\x68\x61\x6e'+_0x453d31(0x1c5,'\x6f\x78\x6d\x30')+_0x453d31(0x1ca,'\x57\x45\x28\x64')+'\x62\x69\x6c\x69\x74\x79\x20\x61'+_0x453d31(0x1ba,'\x4b\x28\x6f\x28')+'\x74\x6e\x65\x73\x73\x2e';var _0x2a471f={};_0x2a471f['\x72\x65\x70\x61\x69\x72']=0.8,_0x2a471f[_0x453d31(0x1c0,'\x41\x67\x42\x76')]=0.18,_0x2a471f[_0x453d31(0x1d1,'\x37\x36\x7a\x71')]=0x0,_0x2a471f[_0x453d31(0x221,'\x52\x6c\x6e\x79')]=0.02,_0x2a471f['\x72\x65\x70\x61\x69\x72\x4c\x6f'+_0x453d31(0x1aa,'\x71\x70\x4d\x28')+_0x453d31(0x29f,'\x31\x49\x61\x39')]=0x1,_0x2a471f[_0x453d31(0x1b6,'\x41\x58\x2a\x4f')]=_0x453d31(0x1cd,'\x24\x6b\x50\x76')+_0x453d31(0x232,'\x43\x6b\x40\x7a'),_0x2a471f[_0x453d31(0x1c8,'\x53\x43\x5e\x21')+'\x69\x6f\x6e']=_0x453d31(0x1a4,'\x67\x23\x5a\x71')+_0x453d31(0x22f,'\x71\x63\x49\x26')+_0x453d31(0x1c4,'\x37\x53\x59\x48')+_0x453d31(0x223,'\x54\x47\x51\x5a')+_0x453d31(0x1e2,'\x45\x51\x28\x41')+_0x453d31(0x295,'\x48\x4a\x5b\x45')+_0x453d31(0x23f,'\x47\x29\x4a\x55');var _0x481272={};_0x481272[_0x453d31(0x280,'\x4a\x59\x5b\x69')]=0.6,_0x481272[_0x453d31(0x1dc,'\x37\x36\x7a\x71')]=0.22,_0x481272[_0x453d31(0x29e,'\x6f\x78\x6d\x30')]=0.15,_0x481272['\x65\x78\x70\x6c\x6f\x72\x65']=0.03,_0x481272[_0x453d31(0x27e,'\x5e\x35\x65\x36')+_0x453d31(0x288,'\x53\x6a\x75\x61')+_0x453d31(0x25f,'\x67\x63\x28\x4c')]=0.8,_0x481272['\x6c\x61\x62\x65\x6c']=_0x453d31(0x1bd,'\x43\x6b\x40\x7a')+_0x453d31(0x1d5,'\x73\x79\x42\x35')+_0x453d31(0x1ce,'\x6c\x49\x4d\x77'),_0x481272[_0x453d31(0x21e,'\x41\x58\x2a\x4f')+_0x453d31(0x277,'\x46\x24\x39\x6f')]=_0x453d31(0x1fd,'\x6c\x49\x4d\x77')+_0x453d31(0x219,'\x4f\x35\x75\x45')+_0x453d31(0x28a,'\x57\x45\x28\x64')+_0x453d31(0x1ec,'\x53\x57\x23\x35')+_0x453d31(0x2a5,'\x73\x79\x42\x35')+_0x453d31(0x1d6,'\x24\x6b\x50\x76')+_0x453d31(0x1b2,'\x66\x36\x34\x78')+_0x453d31(0x263,'\x51\x24\x6b\x48')+'\x67\x2e';var _0x10e4e1={};_0x10e4e1['\x72\x65\x70\x61\x69\x72']=0.55,_0x10e4e1[_0x453d31(0x23c,'\x48\x4a\x5b\x45')]=0.25,_0x10e4e1[_0x453d31(0x1f2,'\x2a\x50\x41\x6a')]=0.05,_0x10e4e1[_0x453d31(0x218,'\x4b\x5a\x4e\x74')]=0.15,_0x10e4e1[_0x453d31(0x293,'\x4a\x59\x5b\x69')+_0x453d31(0x284,'\x5e\x67\x55\x68')+'\x6f\x6c\x64']=0.9,_0x10e4e1['\x6c\x61\x62\x65\x6c']=_0x453d31(0x282,'\x67\x63\x28\x4c')+_0x453d31(0x28c,'\x7a\x35\x55\x55'),_0x10e4e1[_0x453d31(0x1d3,'\x50\x49\x5a\x6e')+_0x453d31(0x237,'\x7a\x52\x41\x74')]=_0x453d31(0x278,'\x53\x43\x5e\x21')+_0x453d31(0x1b8,'\x66\x36\x34\x78')+_0x453d31(0x1fe,'\x21\x77\x6c\x62')+_0x453d31(0x208,'\x2a\x50\x41\x6a')+_0x453d31(0x20a,'\x6c\x49\x4d\x77')+_0x453d31(0x249,'\x45\x43\x29\x4c')+'\x69\x65\x73\x2e\x20\x45\x78\x70'+_0x453d31(0x228,'\x45\x51\x28\x41')+_0x453d31(0x25b,'\x47\x29\x4a\x55')+_0x453d31(0x2ab,'\x24\x6b\x50\x76');var _0xa90b42={};_0xa90b42[_0x453d31(0x244,'\x37\x36\x7a\x71')]=_0x2bb72c,_0xa90b42[_0x453d31(0x2ac,'\x35\x50\x5b\x25')]=_0x10c6f4,_0xa90b42[_0x453d31(0x1e3,'\x4b\x5a\x4e\x74')]=_0x28f918,_0xa90b42['\x72\x65\x70\x61\x69\x72\x2d\x6f'+'\x6e\x6c\x79']=_0x2a471f,_0xa90b42[_0x453d31(0x224,'\x52\x6c\x6e\x79')+_0x453d31(0x2a6,'\x51\x24\x6b\x48')]=_0x481272,_0xa90b42[_0x453d31(0x202,'\x7a\x52\x41\x74')+'\x74\x61\x74\x65']=_0x10e4e1;var _0xc9cf4a=_0xa90b42;function _0x19ede3(){var _0x452557=_0x453d31,_0x3378b7={};_0x3378b7[_0x452557(0x1e0,'\x66\x36\x34\x78')]=_0x452557(0x23b,'\x30\x23\x39\x6d'),_0x3378b7[_0x452557(0x1e8,'\x4b\x28\x6f\x28')]=_0x452557(0x19e,'\x21\x77\x6c\x62')+'\x6e',_0x3378b7[_0x452557(0x22e,'\x35\x50\x5b\x25')]='\x65\x76\x6f\x6c\x75\x74\x69\x6f'+_0x452557(0x26d,'\x45\x43\x29\x4c')+_0x452557(0x264,'\x2a\x50\x41\x6a'),_0x3378b7[_0x452557(0x294,'\x67\x23\x5a\x71')]=function(_0x391bef,_0x33f57c){return _0x391bef<_0x33f57c;},_0x3378b7[_0x452557(0x281,'\x51\x24\x6b\x48')]=function(_0x3cf3d6,_0xf05835){return _0x3cf3d6!==_0xf05835;},_0x3378b7[_0x452557(0x296,'\x6c\x49\x4d\x77')]=_0x452557(0x21c,'\x50\x49\x5a\x6e'),_0x3378b7[_0x452557(0x2ad,'\x28\x4b\x42\x4a')]=_0x452557(0x1e6,'\x53\x57\x23\x35');var _0x56a670=_0x3378b7;try{var _0x5b7634=_0x4117cb[_0x452557(0x1c3,'\x5b\x5a\x44\x6d')](__dirname,'\x2e\x2e','\x2e\x2e',_0x452557(0x236,'\x4b\x5a\x4e\x74'),_0x56a670[_0x452557(0x255,'\x47\x29\x4a\x55')]),_0x1549af=_0x4117cb[_0x452557(0x1ad,'\x37\x53\x59\x48')](__dirname,'\x2e\x2e','\x2e\x2e','\x2e\x2e','\x2e\x2e',_0x452557(0x2a8,'\x71\x63\x49\x26'),'\x65\x76\x6f\x6c\x75\x74\x69\x6f'+'\x6e',_0x56a670[_0x452557(0x203,'\x53\x57\x23\x35')]),_0x3c025d=[_0x5b7634,_0x1549af];for(var _0x162d1f=0x1d86+-0xc1f*-0x3+0x65*-0xa7;_0x162d1f<_0x3c025d[_0x452557(0x298,'\x6c\x49\x4d\x77')];_0x162d1f++){if(_0x56a670[_0x452557(0x22a,'\x7a\x52\x41\x74')](_0x56a670['\x73\x76\x49\x59\x4e'],_0x56a670['\x73\x76\x49\x59\x4e'])){var _0x382f10=_0x41766e[_0x452557(0x29a,'\x6f\x78\x6d\x30')](_0x829f43,'\x2e\x2e','\x2e\x2e',_0x56a670[_0x452557(0x1f1,'\x6c\x49\x4d\x77')],_0x452557(0x1a8,'\x45\x70\x21\x42')+_0x452557(0x1eb,'\x47\x29\x4a\x55')+_0x452557(0x256,'\x31\x49\x61\x39')),_0x3d2cd9=_0xd6e714[_0x452557(0x20d,'\x54\x47\x51\x5a')](_0x305ee6,'\x2e\x2e','\x2e\x2e','\x2e\x2e','\x2e\x2e',_0x452557(0x28e,'\x48\x4e\x39\x53'),_0x56a670[_0x452557(0x226,'\x31\x49\x61\x39')],_0x56a670[_0x452557(0x269,'\x7a\x35\x55\x55')]),_0x185017=[_0x382f10,_0x3d2cd9];for(var _0x3b62fc=-0x8e8+-0x6ed*0x3+-0x1bf*-0x11;_0x56a670[_0x452557(0x213,'\x21\x77\x6c\x62')](_0x3b62fc,_0x185017[_0x452557(0x1fa,'\x43\x6b\x40\x7a')]);_0x3b62fc++){if(_0x54b43f[_0x452557(0x233,'\x67\x63\x28\x4c')+'\x6e\x63'](_0x185017[_0x3b62fc])){var _0x2a1beb=_0x582637['\x70\x61\x72\x73\x65'](_0x7ad0c[_0x452557(0x1f6,'\x75\x61\x57\x24')+_0x452557(0x289,'\x30\x23\x39\x6d')](_0x185017[_0x3b62fc],_0x452557(0x1b9,'\x57\x45\x28\x64')));return _0x2a1beb&&_0x101871[_0x452557(0x292,'\x35\x50\x5b\x25')](_0x2a1beb[_0x452557(0x225,'\x31\x49\x61\x39')+'\x6e\x74'])?_0x2a1beb['\x63\x79\x63\x6c\x65\x43\x6f\x75'+'\x6e\x74']:0x1*-0x1a4d+-0x15*0x24+0x1d41;}}}else{if(_0x3acc9d['\x65\x78\x69\x73\x74\x73\x53\x79'+'\x6e\x63'](_0x3c025d[_0x162d1f])){var _0x113e0f=JSON[_0x452557(0x1b4,'\x57\x45\x28\x64')](_0x3acc9d[_0x452557(0x209,'\x21\x77\x6c\x62')+_0x452557(0x23a,'\x31\x64\x78\x4b')](_0x3c025d[_0x162d1f],_0x56a670[_0x452557(0x27b,'\x30\x23\x39\x6d')]));return _0x113e0f&&Number[_0x452557(0x238,'\x4d\x6e\x6d\x40')](_0x113e0f[_0x452557(0x1ac,'\x4a\x59\x5b\x69')+'\x6e\x74'])?_0x113e0f[_0x452557(0x200,'\x37\x36\x7a\x71')+'\x6e\x74']:0x4*-0x5a7+0x39*0x1c+0x20c*0x8;}}}}catch(_0x2b4d27){}return 0x1881+0x143d+-0x2cbe;}function _0x40ad(_0x2aa786,_0x48410c){_0x2aa786=_0x2aa786-(-0x1a75+0x2*0xdb8+0xa3);var _0x568165=_0x24b8();var _0x287f77=_0x568165[_0x2aa786];if(_0x40ad['\x43\x70\x41\x61\x75\x61']===undefined){var _0x389592=function(_0x1889d4){var _0xc0b4f1='\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2b\x2f\x3d';var _0x338506='',_0x58b021='',_0x24629c=_0x338506+_0x389592,_0x19f11f=(''+function(){return-0x7*-0x1fd+-0x15d*0x1+0xc8e*-0x1;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')!==-(-0x34c*-0x2+-0x22c+-0x1*0x46b);for(var _0xe87c59=0x1*-0x14fe+-0xbe7*-0x1+0x917,_0x4109ff,_0x1bc303,_0x1996aa=0x8f+0xd8b*0x2+-0x15*0x151;_0x1bc303=_0x1889d4['\x63\x68\x61\x72\x41\x74'](_0x1996aa++);~_0x1bc303&&(_0x4109ff=_0xe87c59%(-0x134d*-0x1+0x4ce+-0x1817)?_0x4109ff*(0x2348+0x1c*0x8+-0x23e8)+_0x1bc303:_0x1bc303,_0xe87c59++%(-0xc25*0x2+0xa*-0x389+0x3ba8))?_0x338506+=_0x19f11f||_0x24629c['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x1996aa+(0x203b+-0x7c1*-0x3+-0x3774))-(-0x7f*0x12+0x53b*0x7+0x937*-0x3)!==0x1a07*-0x1+0x1*-0x2193+-0x1dcd*-0x2?String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](0x1124+-0x1*0xaec+-0x539&_0x4109ff>>(-(0x19*-0x14f+-0x1eec+0x3fa5)*_0xe87c59&0x1d62+0x1ea1*0x1+-0x3bfd)):_0xe87c59:0x2*-0x126+-0x415*-0x3+-0x11b*0x9){_0x1bc303=_0xc0b4f1['\x69\x6e\x64\x65\x78\x4f\x66'](_0x1bc303);}for(var _0x94d97f=-0x1*0x19dd+0x186c+0x171,_0x300938=_0x338506['\x6c\x65\x6e\x67\x74\x68'];_0x94d97f<_0x300938;_0x94d97f++){_0x58b021+='\x25'+('\x30\x30'+_0x338506['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x94d97f)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](-0xd99+0x22e3+-0x153a))['\x73\x6c\x69\x63\x65'](-(-0xc78+-0x1a1f+-0x1*-0x2699));}return decodeURIComponent(_0x58b021);};var _0x122aa6=function(_0x559882,_0x2e5e99){var _0x3c8f04=[],_0x3aded8=0x248+0x1*0x4fd+-0x745,_0x3897a5,_0x4e0967='';_0x559882=_0x389592(_0x559882);var _0x42ae37;for(_0x42ae37=0x695*-0x2+-0x1ee0+0x1*0x2c0a;_0x42ae37<-0x1*0x110a+0xf1e+0x2ec;_0x42ae37++){_0x3c8f04[_0x42ae37]=_0x42ae37;}for(_0x42ae37=0xa99+-0xb1*-0x17+0x6a*-0x40;_0x42ae37<-0xce*-0x2+-0x55d*0x1+0x4c1;_0x42ae37++){_0x3aded8=(_0x3aded8+_0x3c8f04[_0x42ae37]+_0x2e5e99['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x42ae37%_0x2e5e99['\x6c\x65\x6e\x67\x74\x68']))%(0x2154+0x742+-0x2796),_0x3897a5=_0x3c8f04[_0x42ae37],_0x3c8f04[_0x42ae37]=_0x3c8f04[_0x3aded8],_0x3c8f04[_0x3aded8]=_0x3897a5;}_0x42ae37=-0x20*-0x4d+-0xc36*0x2+-0x1*-0xecc,_0x3aded8=0x593*0x2+0x145b+0x64d*-0x5;for(var _0x4288c0=-0x1446+0x462+0xfe4;_0x4288c0<_0x559882['\x6c\x65\x6e\x67\x74\x68'];_0x4288c0++){_0x42ae37=(_0x42ae37+(-0x141c+-0xabd+0x1eda))%(-0x1083*-0x1+-0x7ed*0x3+0x844),_0x3aded8=(_0x3aded8+_0x3c8f04[_0x42ae37])%(0xd*0x265+0xf13*0x1+-0x169a*0x2),_0x3897a5=_0x3c8f04[_0x42ae37],_0x3c8f04[_0x42ae37]=_0x3c8f04[_0x3aded8],_0x3c8f04[_0x3aded8]=_0x3897a5,_0x4e0967+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](_0x559882['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x4288c0)^_0x3c8f04[(_0x3c8f04[_0x42ae37]+_0x3c8f04[_0x3aded8])%(-0x7ed+0xdcd*-0x2+0x2487)]);}return _0x4e0967;};_0x40ad['\x43\x6a\x78\x51\x6e\x61']=_0x122aa6,_0x40ad['\x71\x5a\x6c\x41\x58\x4f']={},_0x40ad['\x43\x70\x41\x61\x75\x61']=!![];}var _0x2dd26f=_0x568165[0xfd5+0x1c3+-0x1198],_0x6a4fa0=_0x2aa786+_0x2dd26f,_0x2689ca=_0x40ad['\x71\x5a\x6c\x41\x58\x4f'][_0x6a4fa0];if(!_0x2689ca){if(_0x40ad['\x4c\x6b\x65\x6d\x64\x66']===undefined){var _0x49b4c8=function(_0x5c960e){this['\x69\x6b\x56\x52\x75\x76']=_0x5c960e,this['\x4e\x77\x64\x69\x4d\x67']=[0x102*-0x1a+0x624+0x1d3*0xb,-0x1ed1+0x1*-0x335+0x2206,0x2f*0xd4+-0x5f6+-0x20f6],this['\x45\x72\x58\x61\x4f\x4c']=function(){return'\x6e\x65\x77\x53\x74\x61\x74\x65';},this['\x4f\x4f\x54\x41\x64\x7a']='\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a',this['\x52\x43\x45\x62\x6b\x4a']='\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d';};_0x49b4c8['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x72\x73\x74\x62\x54\x57']=function(){var _0x3999dc=new RegExp(this['\x4f\x4f\x54\x41\x64\x7a']+this['\x52\x43\x45\x62\x6b\x4a']),_0x1eb942=_0x3999dc['\x74\x65\x73\x74'](this['\x45\x72\x58\x61\x4f\x4c']['\x74\x6f\x53\x74\x72\x69\x6e\x67']())?--this['\x4e\x77\x64\x69\x4d\x67'][-0x1*0x6bc+0x1519*0x1+-0xe5c]:--this['\x4e\x77\x64\x69\x4d\x67'][-0x223d+-0x1c96+0x3ed3];return this['\x4b\x62\x4c\x6b\x71\x6b'](_0x1eb942);},_0x49b4c8['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x4b\x62\x4c\x6b\x71\x6b']=function(_0x558001){if(!Boolean(~_0x558001))return _0x558001;return this['\x42\x56\x59\x69\x4e\x55'](this['\x69\x6b\x56\x52\x75\x76']);},_0x49b4c8['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x42\x56\x59\x69\x4e\x55']=function(_0x1ab913){for(var _0x4327de=-0x2372+-0x7*0x2e1+0x2b*0x14b,_0x7aeb90=this['\x4e\x77\x64\x69\x4d\x67']['\x6c\x65\x6e\x67\x74\x68'];_0x4327de<_0x7aeb90;_0x4327de++){this['\x4e\x77\x64\x69\x4d\x67']['\x70\x75\x73\x68'](Math['\x72\x6f\x75\x6e\x64'](Math['\x72\x61\x6e\x64\x6f\x6d']())),_0x7aeb90=this['\x4e\x77\x64\x69\x4d\x67']['\x6c\x65\x6e\x67\x74\x68'];}return _0x1ab913(this['\x4e\x77\x64\x69\x4d\x67'][0x1e10*-0x1+0x1948+0x4c8]);},(''+function(){return-0x1*-0x1d36+-0x2496+0x760;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')===-(0x1*0x26b+0xd*-0x2cf+0x2219*0x1)&&new _0x49b4c8(_0x40ad)['\x72\x73\x74\x62\x54\x57'](),_0x40ad['\x4c\x6b\x65\x6d\x64\x66']=!![];}_0x287f77=_0x40ad['\x43\x6a\x78\x51\x6e\x61'](_0x287f77,_0x48410c),_0x40ad['\x71\x5a\x6c\x41\x58\x4f'][_0x6a4fa0]=_0x287f77;}else _0x287f77=_0x2689ca;return _0x287f77;}function _0x4a0e35(_0x2517d7){var _0x3e4268=_0x453d31,_0x563f02={};_0x563f02[_0x3e4268(0x243,'\x4f\x35\x75\x45')]=_0x3e4268(0x20e,'\x4b\x5a\x4e\x74'),_0x563f02[_0x3e4268(0x1c6,'\x51\x24\x6b\x48')]=function(_0x2ed552,_0x3ef391){return _0x2ed552===_0x3ef391;},_0x563f02[_0x3e4268(0x1b0,'\x57\x45\x28\x64')]=_0x3e4268(0x21d,'\x45\x6b\x59\x71'),_0x563f02[_0x3e4268(0x28d,'\x43\x6b\x40\x7a')]=function(_0x150bc6,_0x1abd3d){return _0x150bc6===_0x1abd3d;},_0x563f02[_0x3e4268(0x230,'\x7a\x52\x41\x74')]=_0x3e4268(0x276,'\x5e\x35\x65\x36'),_0x563f02[_0x3e4268(0x215,'\x4b\x5a\x4e\x74')]=_0x3e4268(0x27a,'\x73\x79\x42\x35'),_0x563f02[_0x3e4268(0x24a,'\x51\x24\x6b\x48')]=function(_0x4d5f8b,_0x122c1d){return _0x4d5f8b&&_0x122c1d;},_0x563f02[_0x3e4268(0x234,'\x31\x49\x61\x39')]=function(_0xde9bbb,_0x14968d){return _0xde9bbb<=_0x14968d;},_0x563f02[_0x3e4268(0x287,'\x31\x49\x61\x39')]=_0x3e4268(0x1df,'\x4b\x28\x6f\x28')+_0x3e4268(0x2a6,'\x51\x24\x6b\x48'),_0x563f02[_0x3e4268(0x1d4,'\x4b\x5a\x4e\x74')]=_0x3e4268(0x1fb,'\x48\x4e\x39\x53')+_0x3e4268(0x26b,'\x37\x36\x7a\x71')+'\x74\x65',_0x563f02[_0x3e4268(0x1e5,'\x43\x6b\x40\x7a')]=_0x3e4268(0x1a3,'\x35\x50\x5b\x25'),_0x563f02[_0x3e4268(0x242,'\x7a\x52\x41\x74')]=_0x3e4268(0x252,'\x7a\x35\x55\x55')+_0x3e4268(0x216,'\x53\x57\x23\x35')+_0x3e4268(0x27c,'\x5e\x35\x65\x36'),_0x563f02[_0x3e4268(0x1bf,'\x48\x4a\x5b\x45')]=_0x3e4268(0x28b,'\x71\x63\x49\x26'),_0x563f02[_0x3e4268(0x1b5,'\x21\x77\x6c\x62')]=_0x3e4268(0x1ef,'\x53\x43\x5e\x21')+_0x3e4268(0x1e7,'\x57\x45\x28\x64');var _0x454e09=_0x563f02,_0x510cf9=_0x2517d7&&Array[_0x3e4268(0x205,'\x30\x44\x43\x5a')](_0x2517d7[_0x3e4268(0x1f3,'\x4d\x6e\x6d\x40')])?_0x2517d7[_0x3e4268(0x257,'\x45\x51\x28\x41')]:[],_0x16bcc6=String(process.env.EVOLVE_STRATEGY||_0x3e4268(0x286,'\x4f\x35\x75\x45'))[_0x3e4268(0x1f4,'\x7a\x35\x55\x55')+'\x61\x73\x65']()[_0x3e4268(0x25c,'\x4f\x35\x75\x45')](),_0x45c8a3=![];if(!process.env.EVOLVE_STRATEGY){var _0x42bb4f=String(process.env.FORCE_INNOVATION||process.env.EVOLVE_FORCE_INNOVATION||'')[_0x3e4268(0x20b,'\x54\x47\x51\x5a')+_0x3e4268(0x29d,'\x4b\x5a\x4e\x74')]();_0x454e09[_0x3e4268(0x23e,'\x4d\x6e\x6d\x40')](_0x42bb4f,_0x454e09['\x74\x72\x51\x4d\x54'])&&(_0x16bcc6=_0x454e09['\x4a\x65\x61\x42\x6d'],_0x45c8a3=!![]);}var _0x20c3aa=!process.env.EVOLVE_STRATEGY||_0x454e09[_0x3e4268(0x26f,'\x71\x63\x49\x26')](_0x16bcc6,_0x454e09[_0x3e4268(0x1af,'\x54\x47\x51\x5a')])||_0x454e09[_0x3e4268(0x291,'\x21\x77\x6c\x62')](_0x16bcc6,_0x454e09[_0x3e4268(0x251,'\x41\x58\x2a\x4f')]);if(_0x454e09[_0x3e4268(0x220,'\x4d\x6e\x6d\x40')](_0x20c3aa,!_0x45c8a3)){var _0x309fe8=_0x19ede3();_0x309fe8>0xd0d*-0x1+-0x18ac+-0x57*-0x6f&&_0x454e09['\x57\x62\x73\x70\x66'](_0x309fe8,0x1*0x37+0xc57+0xc89*-0x1)&&(_0x16bcc6=_0x454e09['\x41\x43\x70\x56\x43']);if(_0x510cf9[_0x3e4268(0x1b3,'\x31\x49\x61\x39')](_0x454e09[_0x3e4268(0x1a2,'\x2a\x50\x41\x6a')])!==-(-0x2191+-0x220b+-0x439d*-0x1))_0x454e09[_0x3e4268(0x1cc,'\x57\x45\x28\x64')]===_0x3e4268(0x245,'\x54\x47\x51\x5a')?(_0xa2edf6=_0x454e09[_0x3e4268(0x246,'\x30\x44\x43\x5a')],_0x2ce2fb=!![]):_0x16bcc6=_0x3e4268(0x27d,'\x48\x4a\x5b\x45')+_0x3e4268(0x211,'\x53\x43\x5e\x21');else _0x510cf9['\x69\x6e\x64\x65\x78\x4f\x66'](_0x454e09[_0x3e4268(0x297,'\x4f\x35\x75\x45')])!==-(0x4f5+0x2406+-0x28fa)&&(_0x454e09['\x70\x55\x4e\x65\x52']!=='\x69\x6d\x55\x4b\x4e'?_0x18075d=_0x3e4268(0x207,'\x37\x53\x59\x48')+_0x3e4268(0x1bb,'\x30\x44\x43\x5a'):_0x16bcc6=_0x454e09[_0x3e4268(0x258,'\x71\x63\x49\x26')]);}if(_0x454e09[_0x3e4268(0x1f9,'\x57\x45\x28\x64')](_0x16bcc6,_0x454e09['\x74\x50\x74\x5a\x4c']))_0x16bcc6=_0x454e09[_0x3e4268(0x267,'\x35\x50\x5b\x25')];var _0x4d0633=_0xc9cf4a[_0x16bcc6]||_0xc9cf4a[_0x454e09[_0x3e4268(0x1a5,'\x51\x24\x6b\x48')]],_0x4fa490={};return _0x4fa490[_0x3e4268(0x285,'\x5e\x67\x55\x68')]=_0x16bcc6,Object[_0x3e4268(0x21b,'\x50\x49\x5a\x6e')]({},_0x4d0633,_0x4fa490);}function _0x511796(){var _0x56e8a0=_0x453d31;return Object[_0x56e8a0(0x1c7,'\x46\x24\x39\x6f')](_0xc9cf4a);}var _0x3085a4={};_0x3085a4[_0x453d31(0x1b7,'\x37\x53\x59\x48')+_0x453d31(0x24d,'\x37\x36\x7a\x71')]=_0x4a0e35,_0x3085a4[_0x453d31(0x22b,'\x45\x70\x21\x42')+'\x65\x67\x79\x4e\x61\x6d\x65\x73']=_0x511796,_0x3085a4[_0x453d31(0x25e,'\x51\x24\x6b\x48')+'\x45\x53']=_0xc9cf4a,module[_0x453d31(0x1b1,'\x7a\x35\x55\x55')]=_0x3085a4;
@@ -1,575 +0,0 @@
1
- // ---------------------------------------------------------------------------
2
- // taskReceiver -- pulls external tasks from Hub, auto-claims, and injects
3
- // them as high-priority signals into the evolution loop.
4
- //
5
- // v2: Smart task selection with difficulty-aware ROI scoring and capability
6
- // matching via memory graph history.
7
- // ---------------------------------------------------------------------------
8
-
9
- const { getNodeId, buildHubHeaders, buildNodeScopedHubHeaders } = require('./a2aProtocol');
10
- const { resolveHubUrl } = require('../config');
11
- const { hubFetch } = require('./hubFetch');
12
- const { createTask, validateTask } = require('./schemas/task');
13
-
14
- function buildAuthHeaders() {
15
- const buildHeaders = buildNodeScopedHubHeaders || buildHubHeaders;
16
- return buildHeaders();
17
- }
18
-
19
- const TASK_STRATEGY = String(process.env.TASK_STRATEGY || 'balanced').toLowerCase();
20
- const TASK_MIN_CAPABILITY_MATCH = Number(process.env.TASK_MIN_CAPABILITY_MATCH) || 0.1;
21
-
22
- // Scoring weights by strategy
23
- const STRATEGY_WEIGHTS = {
24
- greedy: { roi: 0.10, capability: 0.05, completion: 0.05, bounty: 0.80 },
25
- balanced: { roi: 0.35, capability: 0.30, completion: 0.20, bounty: 0.15 },
26
- conservative: { roi: 0.25, capability: 0.45, completion: 0.25, bounty: 0.05 },
27
- };
28
-
29
- /**
30
- * Fetch available tasks from Hub via the A2A fetch endpoint.
31
- * Optionally piggybacks proactive questions in the payload for Hub to create bounties.
32
- *
33
- * @param {object} [opts]
34
- * @param {Array<{ question: string, amount?: number, signals?: string[] }>} [opts.questions]
35
- * @returns {{ tasks: Array, questions_created?: Array }}
36
- */
37
- async function fetchTasks(opts) {
38
- const o = opts || {};
39
- const nodeId = getNodeId();
40
- if (!nodeId) return { tasks: [] };
41
-
42
- try {
43
- const payload = {
44
- tasks_only: true,
45
- include_tasks: true,
46
- };
47
-
48
- if (Array.isArray(o.questions) && o.questions.length > 0) {
49
- payload.questions = o.questions;
50
- }
51
-
52
- const msg = {
53
- protocol: 'gep-a2a',
54
- protocol_version: '1.0.0',
55
- message_type: 'fetch',
56
- message_id: `msg_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,
57
- sender_id: nodeId,
58
- timestamp: new Date().toISOString(),
59
- payload,
60
- };
61
-
62
- const url = `${resolveHubUrl().replace(/\/+$/, '')}/a2a/fetch`;
63
- const controller = new AbortController();
64
- const timer = setTimeout(() => controller.abort(), 8000);
65
-
66
- const res = await hubFetch(url, {
67
- method: 'POST',
68
- headers: buildAuthHeaders(),
69
- body: JSON.stringify(msg),
70
- signal: controller.signal,
71
- });
72
- clearTimeout(timer);
73
-
74
- if (!res.ok) return { tasks: [] };
75
-
76
- const data = await res.json();
77
- const respPayload = data.payload || data;
78
- const tasks = Array.isArray(respPayload.tasks)
79
- ? respPayload.tasks.map(function(t) { return createTask(t); }).filter(function(t) {
80
- try { return validateTask(t); } catch (e) {
81
- console.warn('[TaskReceiver] dropping invalid task:', e.message, t.task_id || '(no id)');
82
- return false;
83
- }
84
- })
85
- : [];
86
- const result = { tasks };
87
-
88
- if (respPayload.questions_created) {
89
- result.questions_created = respPayload.questions_created;
90
- }
91
-
92
- // LessonL: extract relevant lessons from Hub response
93
- if (Array.isArray(respPayload.relevant_lessons) && respPayload.relevant_lessons.length > 0) {
94
- result.relevant_lessons = respPayload.relevant_lessons;
95
- }
96
-
97
- return result;
98
- } catch (err) {
99
- console.warn("[TaskReceiver] fetchTasks failed:", err && err.message ? err.message : err);
100
- return { tasks: [] };
101
- }
102
- }
103
-
104
- // ---------------------------------------------------------------------------
105
- // Capability matching: how well this agent's history matches a task's signals
106
- // ---------------------------------------------------------------------------
107
-
108
- function parseSignals(raw) {
109
- if (!raw) return [];
110
- return String(raw).split(',').map(function(s) { return s.trim().toLowerCase(); }).filter(Boolean);
111
- }
112
-
113
- function jaccard(a, b) {
114
- if (!a.length || !b.length) return 0;
115
- var setA = new Set(a);
116
- var setB = new Set(b);
117
- var inter = 0;
118
- for (var v of setB) { if (setA.has(v)) inter++; }
119
- return inter / (setA.size + setB.size - inter);
120
- }
121
-
122
- /**
123
- * Estimate how well this agent can handle a task based on memory graph history.
124
- * Returns 0.0 - 1.0 where 1.0 = strong match with high success rate.
125
- *
126
- * @param {object} task - task from Hub (has .signals field)
127
- * @param {Array} memoryEvents - from tryReadMemoryGraphEvents()
128
- * @returns {number}
129
- */
130
- function estimateCapabilityMatch(task, memoryEvents) {
131
- if (!Array.isArray(memoryEvents) || memoryEvents.length === 0) return 0.5;
132
-
133
- var taskSignals = parseSignals(task.signals || task.title);
134
- if (taskSignals.length === 0) return 0.5;
135
-
136
- var successBySignalKey = {};
137
- var totalBySignalKey = {};
138
- var allSignals = {};
139
-
140
- for (var i = 0; i < memoryEvents.length; i++) {
141
- var ev = memoryEvents[i];
142
- if (!ev || ev.type !== 'MemoryGraphEvent' || ev.kind !== 'outcome') continue;
143
-
144
- var sigs = (ev.signal && Array.isArray(ev.signal.signals)) ? ev.signal.signals : [];
145
- var key = (ev.signal && ev.signal.key) ? String(ev.signal.key) : '';
146
- var status = (ev.outcome && ev.outcome.status) ? String(ev.outcome.status) : '';
147
-
148
- for (var j = 0; j < sigs.length; j++) {
149
- allSignals[sigs[j].toLowerCase()] = true;
150
- }
151
-
152
- if (!key) continue;
153
- if (!totalBySignalKey[key]) { totalBySignalKey[key] = 0; successBySignalKey[key] = 0; }
154
- totalBySignalKey[key]++;
155
- if (status === 'success') successBySignalKey[key]++;
156
- }
157
-
158
- // Jaccard overlap between task signals and all signals this agent has worked with
159
- var allSigArr = Object.keys(allSignals);
160
- var overlapScore = jaccard(taskSignals, allSigArr);
161
-
162
- // Weighted success rate across matching signal keys
163
- var weightedSuccess = 0;
164
- var weightSum = 0;
165
- for (var sk in totalBySignalKey) {
166
- // Reconstruct signals from the key for comparison
167
- var skParts = sk.split('|').map(function(s) { return s.trim().toLowerCase(); }).filter(Boolean);
168
- var sim = jaccard(taskSignals, skParts);
169
- if (sim < 0.15) continue;
170
-
171
- var total = totalBySignalKey[sk];
172
- var succ = successBySignalKey[sk] || 0;
173
- var rate = (succ + 1) / (total + 2); // Laplace smoothing
174
- weightedSuccess += rate * sim;
175
- weightSum += sim;
176
- }
177
-
178
- var successScore = weightSum > 0 ? (weightedSuccess / weightSum) : 0.5;
179
-
180
- // Combine: 60% success rate history + 40% signal overlap
181
- return Math.min(1, overlapScore * 0.4 + successScore * 0.6);
182
- }
183
-
184
- // ---------------------------------------------------------------------------
185
- // Local fallback difficulty estimation when Hub doesn't provide complexity_score
186
- // ---------------------------------------------------------------------------
187
-
188
- function localDifficultyEstimate(task) {
189
- var signals = parseSignals(task.signals);
190
- var signalFactor = Math.min(signals.length / 8, 1);
191
-
192
- var titleWords = (task.title || '').split(/\s+/).filter(Boolean).length;
193
- var titleFactor = Math.min(titleWords / 15, 1);
194
-
195
- return Math.min(1, signalFactor * 0.6 + titleFactor * 0.4);
196
- }
197
-
198
- // ---------------------------------------------------------------------------
199
- // Commitment deadline estimation -- based on task difficulty
200
- // ---------------------------------------------------------------------------
201
-
202
- const MIN_COMMITMENT_MS = 5 * 60 * 1000; // 5 min (Hub minimum)
203
- const MAX_COMMITMENT_MS = 24 * 60 * 60 * 1000; // 24 h (Hub maximum)
204
-
205
- const DIFFICULTY_DURATION_MAP = [
206
- { threshold: 0.3, durationMs: 15 * 60 * 1000 }, // low: 15 min
207
- { threshold: 0.5, durationMs: 30 * 60 * 1000 }, // medium: 30 min
208
- { threshold: 0.7, durationMs: 60 * 60 * 1000 }, // high: 60 min
209
- { threshold: 1.0, durationMs: 120 * 60 * 1000 }, // very high: 120 min
210
- ];
211
-
212
- /**
213
- * Estimate a reasonable commitment deadline for a task.
214
- * Returns an ISO-8601 date string or null if estimation fails.
215
- *
216
- * @param {object} task - task from Hub
217
- * @returns {string|null}
218
- */
219
- function estimateCommitmentDeadline(task) {
220
- if (!task) return null;
221
-
222
- var difficulty = (task.complexity_score != null)
223
- ? Number(task.complexity_score)
224
- : localDifficultyEstimate(task);
225
-
226
- var durationMs = DIFFICULTY_DURATION_MAP[DIFFICULTY_DURATION_MAP.length - 1].durationMs;
227
- for (var i = 0; i < DIFFICULTY_DURATION_MAP.length; i++) {
228
- if (difficulty <= DIFFICULTY_DURATION_MAP[i].threshold) {
229
- durationMs = DIFFICULTY_DURATION_MAP[i].durationMs;
230
- break;
231
- }
232
- }
233
-
234
- durationMs = Math.max(MIN_COMMITMENT_MS, Math.min(MAX_COMMITMENT_MS, durationMs));
235
-
236
- var deadline = new Date(Date.now() + durationMs);
237
-
238
- if (task.expires_at) {
239
- var expiresAt = new Date(task.expires_at);
240
- if (!isNaN(expiresAt.getTime()) && expiresAt < deadline) {
241
- var remaining = expiresAt.getTime() - Date.now();
242
- if (remaining < MIN_COMMITMENT_MS) return null;
243
- var adjusted = new Date(expiresAt.getTime() - 60000);
244
- if (adjusted.getTime() - Date.now() < MIN_COMMITMENT_MS) return null;
245
- deadline = adjusted;
246
- }
247
- }
248
-
249
- return deadline.toISOString();
250
- }
251
-
252
- // ---------------------------------------------------------------------------
253
- // Score a single task for this agent
254
- // ---------------------------------------------------------------------------
255
-
256
- /**
257
- * @param {object} task - task from Hub
258
- * @param {number} capabilityMatch - from estimateCapabilityMatch()
259
- * @returns {{ composite: number, factors: object }}
260
- */
261
- function scoreTask(task, capabilityMatch) {
262
- var w = STRATEGY_WEIGHTS[TASK_STRATEGY] || STRATEGY_WEIGHTS.balanced;
263
-
264
- var difficulty = (task.complexity_score != null) ? task.complexity_score : localDifficultyEstimate(task);
265
- var bountyAmount = task.bounty_amount || 0;
266
- var completionRate = (task.historical_completion_rate != null) ? task.historical_completion_rate : 0.5;
267
-
268
- // ROI: bounty per unit difficulty (higher = better value)
269
- var roiRaw = bountyAmount / (difficulty + 0.1);
270
- var roiNorm = Math.min(roiRaw / 200, 1); // normalize: 200-credit ROI = max
271
-
272
- // Bounty absolute: normalize against a reference max
273
- var bountyNorm = Math.min(bountyAmount / 100, 1);
274
-
275
- var composite =
276
- w.roi * roiNorm +
277
- w.capability * capabilityMatch +
278
- w.completion * completionRate +
279
- w.bounty * bountyNorm;
280
-
281
- return {
282
- composite: Math.round(composite * 1000) / 1000,
283
- factors: {
284
- roi: Math.round(roiNorm * 100) / 100,
285
- capability: Math.round(capabilityMatch * 100) / 100,
286
- completion: Math.round(completionRate * 100) / 100,
287
- bounty: Math.round(bountyNorm * 100) / 100,
288
- difficulty: Math.round(difficulty * 100) / 100,
289
- },
290
- };
291
- }
292
-
293
- // ---------------------------------------------------------------------------
294
- // Enhanced task selection with scoring
295
- // ---------------------------------------------------------------------------
296
-
297
- /**
298
- * Pick the best task from a list using composite scoring.
299
- * @param {Array} tasks
300
- * @param {Array} [memoryEvents] - from tryReadMemoryGraphEvents()
301
- * @returns {object|null}
302
- */
303
- function selectBestTask(tasks, memoryEvents) {
304
- if (!Array.isArray(tasks) || tasks.length === 0) return null;
305
-
306
- var nodeId = getNodeId();
307
-
308
- // Already-claimed tasks for this node always take top priority (resume work)
309
- var myClaimedTask = tasks.find(function(t) {
310
- return t.status === 'claimed' && t.claimed_by === nodeId;
311
- });
312
- if (myClaimedTask) return myClaimedTask;
313
-
314
- // Filter to open tasks only
315
- var open = tasks.filter(function(t) { return t.status === 'open'; });
316
- if (open.length === 0) return null;
317
-
318
- // Legacy greedy mode: preserve old behavior exactly
319
- if (TASK_STRATEGY === 'greedy' && (!memoryEvents || memoryEvents.length === 0)) {
320
- var bountyTasks = open.filter(function(t) { return t.bounty_id; });
321
- if (bountyTasks.length > 0) {
322
- bountyTasks.sort(function(a, b) { return (b.bounty_amount || 0) - (a.bounty_amount || 0); });
323
- return bountyTasks[0];
324
- }
325
- return open[0];
326
- }
327
-
328
- // Score all open tasks
329
- var scored = open.map(function(t) {
330
- var cap = estimateCapabilityMatch(t, memoryEvents || []);
331
- var result = scoreTask(t, cap);
332
- return { task: t, composite: result.composite, factors: result.factors, capability: cap };
333
- });
334
-
335
- // Filter by minimum capability match (unless conservative skipping is off)
336
- if (TASK_MIN_CAPABILITY_MATCH > 0) {
337
- var filtered = scored.filter(function(s) { return s.capability >= TASK_MIN_CAPABILITY_MATCH; });
338
- if (filtered.length > 0) scored = filtered;
339
- }
340
-
341
- scored.sort(function(a, b) { return b.composite - a.composite; });
342
-
343
- // Log top 3 candidates for debugging
344
- var top3 = scored.slice(0, 3);
345
- for (var i = 0; i < top3.length; i++) {
346
- var s = top3[i];
347
- console.log('[TaskStrategy] #' + (i + 1) + ' "' + (s.task.title || s.task.task_id || '').slice(0, 50) + '" score=' + s.composite + ' ' + JSON.stringify(s.factors));
348
- }
349
-
350
- return scored[0] ? scored[0].task : null;
351
- }
352
-
353
- /**
354
- * Claim a task on the Hub.
355
- * @param {string} taskId
356
- * @param {{ commitment_deadline?: string }} [opts]
357
- * @returns {boolean} true if claim succeeded
358
- */
359
- async function claimTask(taskId, opts) {
360
- const nodeId = getNodeId();
361
- if (!nodeId || !taskId) return false;
362
-
363
- try {
364
- const url = `${resolveHubUrl().replace(/\/+$/, '')}/a2a/task/claim`;
365
- const controller = new AbortController();
366
- const timer = setTimeout(() => controller.abort(), 5000);
367
-
368
- const body = { task_id: taskId, node_id: nodeId };
369
- if (opts && opts.commitment_deadline) {
370
- body.commitment_deadline = opts.commitment_deadline;
371
- }
372
-
373
- const res = await hubFetch(url, {
374
- method: 'POST',
375
- headers: buildAuthHeaders(),
376
- body: JSON.stringify(body),
377
- signal: controller.signal,
378
- });
379
- clearTimeout(timer);
380
-
381
- return res.ok;
382
- } catch {
383
- return false;
384
- }
385
- }
386
-
387
- /**
388
- * Complete a task on the Hub with the result asset ID.
389
- * @param {string} taskId
390
- * @param {string} assetId
391
- * @returns {boolean}
392
- */
393
- async function completeTask(taskId, assetId) {
394
- const nodeId = getNodeId();
395
- if (!nodeId || !taskId || !assetId) return false;
396
-
397
- try {
398
- const url = `${resolveHubUrl().replace(/\/+$/, '')}/a2a/task/complete`;
399
- const controller = new AbortController();
400
- const timer = setTimeout(() => controller.abort(), 5000);
401
-
402
- const res = await hubFetch(url, {
403
- method: 'POST',
404
- headers: buildAuthHeaders(),
405
- body: JSON.stringify({ task_id: taskId, asset_id: assetId, node_id: nodeId }),
406
- signal: controller.signal,
407
- });
408
- clearTimeout(timer);
409
-
410
- return res.ok;
411
- } catch {
412
- return false;
413
- }
414
- }
415
-
416
- /**
417
- * Extract signals from a task to inject into evolution cycle.
418
- * @param {object} task
419
- * @returns {string[]} signals array
420
- */
421
- function taskToSignals(task) {
422
- if (!task) return [];
423
- const signals = [];
424
- if (task.signals) {
425
- const parts = String(task.signals).split(',').map(s => s.trim()).filter(Boolean);
426
- signals.push(...parts);
427
- }
428
- if (task.title) {
429
- const words = String(task.title).toLowerCase().split(/\s+/).filter(w => w.length >= 3);
430
- for (const w of words.slice(0, 5)) {
431
- if (!signals.includes(w)) signals.push(w);
432
- }
433
- }
434
- signals.push('external_task');
435
- if (task.bounty_id) signals.push('bounty_task');
436
- return signals;
437
- }
438
-
439
- // ---------------------------------------------------------------------------
440
- // Worker Pool task operations (POST /a2a/work/*)
441
- // These use a separate API from bounty tasks and return assignment objects.
442
- // ---------------------------------------------------------------------------
443
-
444
- async function claimWorkerTask(taskId) {
445
- const nodeId = getNodeId();
446
- if (!nodeId || !taskId) return null;
447
-
448
- try {
449
- const url = `${resolveHubUrl().replace(/\/+$/, '')}/a2a/work/claim`;
450
- const controller = new AbortController();
451
- const timer = setTimeout(() => controller.abort(), 5000);
452
-
453
- const res = await hubFetch(url, {
454
- method: 'POST',
455
- headers: buildAuthHeaders(),
456
- body: JSON.stringify({ task_id: taskId, node_id: nodeId }),
457
- signal: controller.signal,
458
- });
459
- clearTimeout(timer);
460
-
461
- if (!res.ok) return null;
462
- return await res.json();
463
- } catch {
464
- return null;
465
- }
466
- }
467
-
468
- async function completeWorkerTask(assignmentId, resultAssetId) {
469
- const nodeId = getNodeId();
470
- if (!nodeId || !assignmentId || !resultAssetId) return false;
471
-
472
- try {
473
- const url = `${resolveHubUrl().replace(/\/+$/, '')}/a2a/work/complete`;
474
- const controller = new AbortController();
475
- const timer = setTimeout(() => controller.abort(), 5000);
476
-
477
- const res = await hubFetch(url, {
478
- method: 'POST',
479
- headers: buildAuthHeaders(),
480
- body: JSON.stringify({ assignment_id: assignmentId, node_id: nodeId, result_asset_id: resultAssetId }),
481
- signal: controller.signal,
482
- });
483
- clearTimeout(timer);
484
-
485
- return res.ok;
486
- } catch {
487
- return false;
488
- }
489
- }
490
-
491
- /**
492
- * Atomic claim+complete for deferred worker tasks.
493
- * Called from solidify after a successful evolution cycle so we never hold
494
- * an assignment that might expire before completion.
495
- *
496
- * @param {string} taskId
497
- * @param {string} resultAssetId - sha256:... of the published capsule
498
- * @returns {{ ok: boolean, assignment_id?: string, error?: string }}
499
- */
500
- async function claimAndCompleteWorkerTask(taskId, resultAssetId) {
501
- const nodeId = getNodeId();
502
- if (!nodeId || !taskId || !resultAssetId) {
503
- return { ok: false, error: 'missing_params' };
504
- }
505
-
506
- const assignment = await claimWorkerTask(taskId);
507
- if (!assignment) {
508
- return { ok: false, error: 'claim_failed' };
509
- }
510
-
511
- const assignmentId = assignment.id || assignment.assignment_id;
512
- if (!assignmentId) {
513
- return { ok: false, error: 'no_assignment_id' };
514
- }
515
-
516
- const completed = await completeWorkerTask(assignmentId, resultAssetId);
517
- if (!completed) {
518
- console.warn(`[WorkerPool] Claimed assignment ${assignmentId} but complete failed -- will expire on Hub`);
519
- return { ok: false, error: 'complete_failed', assignment_id: assignmentId };
520
- }
521
-
522
- return { ok: true, assignment_id: assignmentId };
523
- }
524
-
525
- // ---------------------------------------------------------------------------
526
- // PRIVACY_PARAMS detection -- checks if a task body contains a sealed
527
- // computing block and extracts tool/blob references for the evolution loop.
528
- // ---------------------------------------------------------------------------
529
-
530
- /**
531
- * Check if a task requires privacy/sealed computing.
532
- * @param {object} task
533
- * @returns {{ toolId: string, blobIds: string[] } | null}
534
- */
535
- function detectPrivacyTask(task) {
536
- if (!task) return null;
537
- const body = task.body || task.description || '';
538
- try {
539
- const { parsePrivacyParams } = require('./privacyClient');
540
- return parsePrivacyParams(body);
541
- } catch {
542
- return null;
543
- }
544
- }
545
-
546
- /**
547
- * Augment taskToSignals output with privacy-specific signals when applicable.
548
- * @param {object} task
549
- * @returns {string[]}
550
- */
551
- function taskToSignalsWithPrivacy(task) {
552
- const signals = taskToSignals(task);
553
- const pp = detectPrivacyTask(task);
554
- if (pp) {
555
- if (!signals.includes('privacy_computing')) signals.push('privacy_computing');
556
- if (!signals.includes('sealed_tool')) signals.push('sealed_tool');
557
- }
558
- return signals;
559
- }
560
-
561
- module.exports = {
562
- fetchTasks,
563
- selectBestTask,
564
- estimateCapabilityMatch,
565
- scoreTask,
566
- claimTask,
567
- completeTask,
568
- taskToSignals,
569
- taskToSignalsWithPrivacy,
570
- detectPrivacyTask,
571
- claimWorkerTask,
572
- completeWorkerTask,
573
- claimAndCompleteWorkerTask,
574
- estimateCommitmentDeadline,
575
- };