repoburg 1.3.128 → 1.3.129
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/backend/coverage/clover.xml +12003 -0
- package/backend/coverage/coverage-final.json +313 -0
- package/backend/coverage/lcov-report/base.css +224 -0
- package/backend/coverage/lcov-report/block-navigation.js +87 -0
- package/backend/coverage/lcov-report/favicon.png +0 -0
- package/backend/coverage/lcov-report/index.html +1301 -0
- package/backend/coverage/lcov-report/packages/gemini-core/examples/index.html +116 -0
- package/backend/coverage/lcov-report/packages/gemini-core/examples/simple.ts.html +445 -0
- package/backend/coverage/lcov-report/packages/gemini-core/index.html +116 -0
- package/backend/coverage/lcov-report/packages/gemini-core/index.ts.html +127 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/codeAssist.ts.html +193 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/converter.ts.html +832 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/index.html +206 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/oauth-credential-storage.ts.html +469 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/oauth2.ts.html +1705 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/server.ts.html +790 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/setup.ts.html +454 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/types.ts.html +685 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/config/config.ts.html +307 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/config/index.html +146 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/config/models.ts.html +151 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/config/storage.ts.html +172 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/core/contentGenerator.ts.html +490 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/core/geminiChat.ts.html +1237 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/core/geminiRequest.ts.html +139 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/core/index.html +176 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/core/prompts.ts.html +409 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/core/tokenLimits.ts.html +181 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/index.html +116 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/index.ts.html +187 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/base-token-storage.ts.html +229 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/file-token-storage.ts.html +634 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/hybrid-token-storage.ts.html +373 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/index.html +191 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/index.ts.html +124 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/keychain-token-storage.ts.html +835 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/types.ts.html +211 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/utils/errors.ts.html +421 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/utils/index.html +191 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/utils/partUtils.ts.html +592 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/utils/quotaErrorDetection.ts.html +388 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/utils/retry.ts.html +877 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/utils/session.ts.html +112 -0
- package/backend/coverage/lcov-report/packages/gemini-core/src/utils/userAccountManager.ts.html +502 -0
- package/backend/coverage/lcov-report/packages/tokenpatch/index.html +161 -0
- package/backend/coverage/lcov-report/packages/tokenpatch/index.ts.html +415 -0
- package/backend/coverage/lcov-report/packages/tokenpatch/parser.ts.html +139 -0
- package/backend/coverage/lcov-report/packages/tokenpatch/patcher.ts.html +1249 -0
- package/backend/coverage/lcov-report/packages/tokenpatch/strategies/index.html +131 -0
- package/backend/coverage/lcov-report/packages/tokenpatch/strategies/tiktoken-tokenizer.ts.html +187 -0
- package/backend/coverage/lcov-report/packages/tokenpatch/strategies/tree-sitter-tokenizer.ts.html +193 -0
- package/backend/coverage/lcov-report/packages/tokenpatch/tokens.ts.html +178 -0
- package/backend/coverage/lcov-report/prettify.css +1 -0
- package/backend/coverage/lcov-report/prettify.js +2 -0
- package/backend/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/backend/coverage/lcov-report/sorter.js +210 -0
- package/backend/coverage/lcov-report/src/ai-actions/ai-action-batch.service.ts.html +1549 -0
- package/backend/coverage/lcov-report/src/ai-actions/ai-actions.controller.ts.html +904 -0
- package/backend/coverage/lcov-report/src/ai-actions/ai-actions.module.ts.html +175 -0
- package/backend/coverage/lcov-report/src/ai-actions/ai-actions.service.ts.html +1534 -0
- package/backend/coverage/lcov-report/src/ai-actions/index.html +161 -0
- package/backend/coverage/lcov-report/src/app.controller.ts.html +151 -0
- package/backend/coverage/lcov-report/src/app.module.ts.html +451 -0
- package/backend/coverage/lcov-report/src/app.service.ts.html +163 -0
- package/backend/coverage/lcov-report/src/application-state/application-state.controller.ts.html +1609 -0
- package/backend/coverage/lcov-report/src/application-state/application-state.module.ts.html +136 -0
- package/backend/coverage/lcov-report/src/application-state/application-state.service.ts.html +2281 -0
- package/backend/coverage/lcov-report/src/application-state/dto/index.html +416 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-alibaba-config.dto.ts.html +109 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-auto-context-fetch-enabled.dto.ts.html +118 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-auto-send-to-ai-studio-enabled.dto.ts.html +109 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-context-token-limit.dto.ts.html +124 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-execution-strategy.dto.ts.html +121 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-followup-token-limit.dto.ts.html +124 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-history-compression-enabled.dto.ts.html +115 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-llm-retry-enabled.dto.ts.html +115 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-llm-retry-max-attempts.dto.ts.html +127 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-manual-llm-enabled.dto.ts.html +118 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-ollama-config.dto.ts.html +109 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-openai-config.dto.ts.html +139 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-openrouter-config.dto.ts.html +109 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-streaming-enabled.dto.ts.html +109 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-syntax-validation-enabled.dto.ts.html +118 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-theme.dto.ts.html +124 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-tools-enabled.dto.ts.html +118 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-websocket-enabled.dto.ts.html +109 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-yolo-mode-message.dto.ts.html +124 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-yolo-mode.dto.ts.html +118 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-zai-config.dto.ts.html +109 -0
- package/backend/coverage/lcov-report/src/application-state/index.html +146 -0
- package/backend/coverage/lcov-report/src/common/cache/cache-invalidation.service.ts.html +1297 -0
- package/backend/coverage/lcov-report/src/common/cache/cache-invalidation.subscriber.ts.html +712 -0
- package/backend/coverage/lcov-report/src/common/cache/etag-cache.service.ts.html +379 -0
- package/backend/coverage/lcov-report/src/common/cache/index.html +146 -0
- package/backend/coverage/lcov-report/src/common/common.module.ts.html +121 -0
- package/backend/coverage/lcov-report/src/common/index.html +116 -0
- package/backend/coverage/lcov-report/src/common/interceptors/etag-cache.interceptor.ts.html +337 -0
- package/backend/coverage/lcov-report/src/common/interceptors/index.html +116 -0
- package/backend/coverage/lcov-report/src/common/middleware/cache.middleware.ts.html +265 -0
- package/backend/coverage/lcov-report/src/common/middleware/index.html +116 -0
- package/backend/coverage/lcov-report/src/context-generation/context-generation.module.ts.html +118 -0
- package/backend/coverage/lcov-report/src/context-generation/context-generation.service.ts.html +1501 -0
- package/backend/coverage/lcov-report/src/context-generation/index.html +131 -0
- package/backend/coverage/lcov-report/src/context-snippets/context-snippets.controller.ts.html +427 -0
- package/backend/coverage/lcov-report/src/context-snippets/context-snippets.module.ts.html +142 -0
- package/backend/coverage/lcov-report/src/context-snippets/context-snippets.service.ts.html +442 -0
- package/backend/coverage/lcov-report/src/context-snippets/dto/context-snippet.dto.ts.html +211 -0
- package/backend/coverage/lcov-report/src/context-snippets/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/context-snippets/index.html +146 -0
- package/backend/coverage/lcov-report/src/context-templates/context-templates.controller.ts.html +724 -0
- package/backend/coverage/lcov-report/src/context-templates/context-templates.module.ts.html +142 -0
- package/backend/coverage/lcov-report/src/context-templates/context-templates.service.ts.html +1015 -0
- package/backend/coverage/lcov-report/src/context-templates/dto/context-template.dto.ts.html +511 -0
- package/backend/coverage/lcov-report/src/context-templates/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/context-templates/index.html +146 -0
- package/backend/coverage/lcov-report/src/core-entities/ai-action.entity.ts.html +613 -0
- package/backend/coverage/lcov-report/src/core-entities/application-state.entity.ts.html +124 -0
- package/backend/coverage/lcov-report/src/core-entities/base.entity.ts.html +211 -0
- package/backend/coverage/lcov-report/src/core-entities/context-snippet.entity.ts.html +190 -0
- package/backend/coverage/lcov-report/src/core-entities/context-template.entity.ts.html +439 -0
- package/backend/coverage/lcov-report/src/core-entities/custom-snippet.entity.ts.html +205 -0
- package/backend/coverage/lcov-report/src/core-entities/custom-variable.entity.ts.html +241 -0
- package/backend/coverage/lcov-report/src/core-entities/enums.ts.html +553 -0
- package/backend/coverage/lcov-report/src/core-entities/execution-log.entity.ts.html +208 -0
- package/backend/coverage/lcov-report/src/core-entities/index.html +371 -0
- package/backend/coverage/lcov-report/src/core-entities/index.ts.html +136 -0
- package/backend/coverage/lcov-report/src/core-entities/llm-call-log.entity.ts.html +388 -0
- package/backend/coverage/lcov-report/src/core-entities/mcp-config.entity.ts.html +256 -0
- package/backend/coverage/lcov-report/src/core-entities/mcp-tool.entity.ts.html +256 -0
- package/backend/coverage/lcov-report/src/core-entities/project.entity.ts.html +181 -0
- package/backend/coverage/lcov-report/src/core-entities/session-input.entity.ts.html +745 -0
- package/backend/coverage/lcov-report/src/core-entities/session.entity.ts.html +688 -0
- package/backend/coverage/lcov-report/src/core-entities/system-prompt.entity.ts.html +349 -0
- package/backend/coverage/lcov-report/src/core-entities/tool-hook.entity.ts.html +235 -0
- package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.controller.ts.html +442 -0
- package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.service.ts.html +304 -0
- package/backend/coverage/lcov-report/src/custom-snippets/dto/custom-snippet.dto.ts.html +205 -0
- package/backend/coverage/lcov-report/src/custom-snippets/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/custom-snippets/index.html +146 -0
- package/backend/coverage/lcov-report/src/custom-variables/custom-variables.controller.ts.html +463 -0
- package/backend/coverage/lcov-report/src/custom-variables/custom-variables.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/custom-variables/custom-variables.service.ts.html +310 -0
- package/backend/coverage/lcov-report/src/custom-variables/dto/custom-variable.dto.ts.html +244 -0
- package/backend/coverage/lcov-report/src/custom-variables/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/custom-variables/index.html +146 -0
- package/backend/coverage/lcov-report/src/events/events.gateway.ts.html +295 -0
- package/backend/coverage/lcov-report/src/events/events.module.ts.html +109 -0
- package/backend/coverage/lcov-report/src/events/index.html +146 -0
- package/backend/coverage/lcov-report/src/events/websocket.events.ts.html +466 -0
- package/backend/coverage/lcov-report/src/execution-logs/dto/execution-log.dto.ts.html +130 -0
- package/backend/coverage/lcov-report/src/execution-logs/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/execution-logs/execution-logs.controller.ts.html +130 -0
- package/backend/coverage/lcov-report/src/execution-logs/execution-logs.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/execution-logs/execution-logs.service.ts.html +238 -0
- package/backend/coverage/lcov-report/src/execution-logs/index.html +146 -0
- package/backend/coverage/lcov-report/src/gemini/gemini-llm.provider.ts.html +553 -0
- package/backend/coverage/lcov-report/src/gemini/gemini.module.ts.html +109 -0
- package/backend/coverage/lcov-report/src/gemini/index.html +131 -0
- package/backend/coverage/lcov-report/src/global-config/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/global-config/dto/update-global-config.dto.ts.html +367 -0
- package/backend/coverage/lcov-report/src/global-config/global-config.controller.ts.html +220 -0
- package/backend/coverage/lcov-report/src/global-config/global-config.module.ts.html +115 -0
- package/backend/coverage/lcov-report/src/global-config/global-config.service.ts.html +397 -0
- package/backend/coverage/lcov-report/src/global-config/index.html +146 -0
- package/backend/coverage/lcov-report/src/http-exception.filter.ts.html +340 -0
- package/backend/coverage/lcov-report/src/index.html +206 -0
- package/backend/coverage/lcov-report/src/interactive-chat/chat.module.ts.html +187 -0
- package/backend/coverage/lcov-report/src/interactive-chat/chat.service.ts.html +1825 -0
- package/backend/coverage/lcov-report/src/interactive-chat/index.html +146 -0
- package/backend/coverage/lcov-report/src/interactive-chat/streaming.controller.ts.html +343 -0
- package/backend/coverage/lcov-report/src/llm-call-logs/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/llm-call-logs/dto/llm-call-log.dto.ts.html +214 -0
- package/backend/coverage/lcov-report/src/llm-call-logs/index.html +146 -0
- package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.controller.ts.html +634 -0
- package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.service.ts.html +643 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/apply-diff.handler.ts.html +1090 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/ask-user.handler.ts.html +433 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/create-file.handler.ts.html +757 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/delete-file.handler.ts.html +586 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/discard-messages.handler.ts.html +1153 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/apply-diff.args.dto.ts.html +124 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/ask-user.args.dto.ts.html +103 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/create-file.args.dto.ts.html +124 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/delete-file.args.dto.ts.html +106 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/execute-code.args.dto.ts.html +106 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/final.args.dto.ts.html +118 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/generate-title.args.dto.ts.html +190 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/get-session-history.args.dto.ts.html +196 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/howto.args.dto.ts.html +91 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/index.html +356 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/new-session.args.dto.ts.html +106 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/overwrite-file.args.dto.ts.html +124 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/patch.args.dto.ts.html +124 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/quick-edit.args.dto.ts.html +214 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/request-context.args.dto.ts.html +202 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/run-command.args.dto.ts.html +151 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/sanitizer.decorator.ts.html +181 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/write-todo.args.dto.ts.html +130 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/execute-code.handler.ts.html +631 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/final.handler.ts.html +469 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/generate-title.handler.ts.html +448 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/get-messages.handler.ts.html +1351 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/get-session-history.handler.ts.html +868 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/howto.handler.ts.html +481 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/index.html +416 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/invoke-subagent.handler.ts.html +580 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/list-sub-agents.handler.ts.html +352 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/context-aware.matcher.ts.html +1054 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/exact.matcher.ts.html +331 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/hybrid.matcher.ts.html +403 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/index.html +176 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/index.ts.html +100 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/normalized.matcher.ts.html +724 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/mcp-tool-action.handler.ts.html +358 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/new-session.handler.ts.html +379 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/overwrite-file.handler.ts.html +838 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/patch.handler.ts.html +1702 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/quick-edit.handler.ts.html +1459 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/request-context.handler.ts.html +679 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/run-command.handler.ts.html +964 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/write-todo.handler.ts.html +625 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/errors/handler-validation.error.ts.html +103 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/errors/index.html +116 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/history-compression.service.ts.html +1645 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/hooks/follow-up-post-execution.hook.ts.html +238 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/hooks/frontend-notification.hook.ts.html +181 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/hooks/index.html +161 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/hooks/invalid-tool-feedback.hook.ts.html +313 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/hooks/yolo-mode-post-execution.hook.ts.html +466 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/index.html +176 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/llm-orchestration.interfaces.ts.html +319 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/llm-orchestration.module.ts.html +706 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/llm-turn-processor.service.ts.html +1150 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/parser/index.html +131 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/parser/llm-output-parser.service.ts.html +658 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/parser/parsing.constants.ts.html +127 -0
- package/backend/coverage/lcov-report/src/llm-orchestration/tool-schema.service.ts.html +547 -0
- package/backend/coverage/lcov-report/src/llm-provider/alibaba-llm.provider.ts.html +1681 -0
- package/backend/coverage/lcov-report/src/llm-provider/index.html +236 -0
- package/backend/coverage/lcov-report/src/llm-provider/llm-provider.controller.ts.html +187 -0
- package/backend/coverage/lcov-report/src/llm-provider/llm-provider.interface.ts.html +361 -0
- package/backend/coverage/lcov-report/src/llm-provider/llm-provider.module.ts.html +175 -0
- package/backend/coverage/lcov-report/src/llm-provider/ollama-llm.provider.ts.html +1780 -0
- package/backend/coverage/lcov-report/src/llm-provider/openai-llm.provider.ts.html +1867 -0
- package/backend/coverage/lcov-report/src/llm-provider/openrouter-llm.provider.ts.html +1891 -0
- package/backend/coverage/lcov-report/src/llm-provider/proxy-llm.provider.ts.html +304 -0
- package/backend/coverage/lcov-report/src/llm-provider/zai-llm.provider.ts.html +1666 -0
- package/backend/coverage/lcov-report/src/llm-responses/dto/index.html +131 -0
- package/backend/coverage/lcov-report/src/llm-responses/dto/submit-llm-response.dto.ts.html +436 -0
- package/backend/coverage/lcov-report/src/llm-responses/dto/sync-conversation.dto.ts.html +319 -0
- package/backend/coverage/lcov-report/src/llm-responses/index.html +146 -0
- package/backend/coverage/lcov-report/src/llm-responses/llm-responses.controller.ts.html +283 -0
- package/backend/coverage/lcov-report/src/llm-responses/llm-responses.module.ts.html +184 -0
- package/backend/coverage/lcov-report/src/llm-responses/llm-responses.service.ts.html +1474 -0
- package/backend/coverage/lcov-report/src/main.ts.html +463 -0
- package/backend/coverage/lcov-report/src/mcp/dto/batch-update-mcp-tools.dto.ts.html +145 -0
- package/backend/coverage/lcov-report/src/mcp/dto/create-mcp-config.dto.ts.html +127 -0
- package/backend/coverage/lcov-report/src/mcp/dto/index.html +146 -0
- package/backend/coverage/lcov-report/src/mcp/dto/update-mcp-config.dto.ts.html +112 -0
- package/backend/coverage/lcov-report/src/mcp/index.html +146 -0
- package/backend/coverage/lcov-report/src/mcp/mcp.controller.ts.html +340 -0
- package/backend/coverage/lcov-report/src/mcp/mcp.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/mcp/mcp.service.ts.html +1345 -0
- package/backend/coverage/lcov-report/src/message-bus/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/message-bus/dto/submit-message.dto.ts.html +109 -0
- package/backend/coverage/lcov-report/src/message-bus/index.html +146 -0
- package/backend/coverage/lcov-report/src/message-bus/message-bus.controller.ts.html +148 -0
- package/backend/coverage/lcov-report/src/message-bus/message-bus.module.ts.html +115 -0
- package/backend/coverage/lcov-report/src/message-bus/message-bus.service.ts.html +151 -0
- package/backend/coverage/lcov-report/src/projects/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/projects/dto/project.dto.ts.html +196 -0
- package/backend/coverage/lcov-report/src/projects/index.html +146 -0
- package/backend/coverage/lcov-report/src/projects/projects.controller.ts.html +322 -0
- package/backend/coverage/lcov-report/src/projects/projects.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/projects/projects.service.ts.html +235 -0
- package/backend/coverage/lcov-report/src/seeding/context-snippet-seeding.service.ts.html +280 -0
- package/backend/coverage/lcov-report/src/seeding/context-template-seeding.service.ts.html +439 -0
- package/backend/coverage/lcov-report/src/seeding/custom-snippet-seeding.service.ts.html +271 -0
- package/backend/coverage/lcov-report/src/seeding/custom-variable-seeding.service.ts.html +271 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-snippets/compress.ts.html +172 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-snippets/index.html +116 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-followup_ad-hoc-focused-context.ts.html +157 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_condensed-project-context.ts.html +148 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_full-project-context.ts.html +151 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/index.html +161 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/open-pr-command.ts.html +247 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/default_rglob.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-for.ts.html +100 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-if.ts.html +97 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-ifelse.ts.html +100 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/everest-playwright-auth.ts.html +304 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/git-diff.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/index.html +341 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/it-mcp.ts.html +100 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/it-tools.ts.html +97 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-exclude.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search-glob.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/run-command.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/tree.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-adhoc-incl.ts.html +100 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-cmd-output-incl.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-input-incl.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-variables/default-auto-execute-code.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-variables/default-plan-mode.ts.html +97 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-variables/index.html +131 -0
- package/backend/coverage/lcov-report/src/seeding/data/mcp-configs/default-configs.ts.html +121 -0
- package/backend/coverage/lcov-report/src/seeding/data/mcp-configs/index.html +116 -0
- package/backend/coverage/lcov-report/src/seeding/data/sub-agents/browser-use.ts.html +115 -0
- package/backend/coverage/lcov-report/src/seeding/data/sub-agents/explore-codebase.ts.html +136 -0
- package/backend/coverage/lcov-report/src/seeding/data/sub-agents/index.html +131 -0
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/browser-use-agent.ts.html +190 -0
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/default_native_tool_agent.ts.html +421 -0
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/explore-codebase-agent.ts.html +265 -0
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/index.html +161 -0
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/master-agent.ts.html +388 -0
- package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/eslint-hook.ts.html +265 -0
- package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/example-hook.ts.html +274 -0
- package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/index.html +146 -0
- package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/readme.ts.html +250 -0
- package/backend/coverage/lcov-report/src/seeding/index.html +236 -0
- package/backend/coverage/lcov-report/src/seeding/mcp-config-seeding.service.ts.html +193 -0
- package/backend/coverage/lcov-report/src/seeding/seeding.module.ts.html +211 -0
- package/backend/coverage/lcov-report/src/seeding/seeding.service.ts.html +187 -0
- package/backend/coverage/lcov-report/src/seeding/sub-agent-seeding.service.ts.html +742 -0
- package/backend/coverage/lcov-report/src/seeding/system-prompt-seeding.service.ts.html +397 -0
- package/backend/coverage/lcov-report/src/session-followup/index.html +131 -0
- package/backend/coverage/lcov-report/src/session-followup/session-followup.module.ts.html +130 -0
- package/backend/coverage/lcov-report/src/session-followup/session-followup.service.ts.html +718 -0
- package/backend/coverage/lcov-report/src/session-inputs/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/session-inputs/dto/session-input.dto.ts.html +577 -0
- package/backend/coverage/lcov-report/src/session-inputs/index.html +176 -0
- package/backend/coverage/lcov-report/src/session-inputs/session-input-context.service.ts.html +832 -0
- package/backend/coverage/lcov-report/src/session-inputs/session-input.subscriber.ts.html +220 -0
- package/backend/coverage/lcov-report/src/session-inputs/session-inputs.controller.ts.html +685 -0
- package/backend/coverage/lcov-report/src/session-inputs/session-inputs.module.ts.html +229 -0
- package/backend/coverage/lcov-report/src/session-inputs/session-inputs.service.ts.html +1981 -0
- package/backend/coverage/lcov-report/src/session-transfer/index.html +131 -0
- package/backend/coverage/lcov-report/src/session-transfer/session-transfer.module.ts.html +160 -0
- package/backend/coverage/lcov-report/src/session-transfer/session-transfer.service.ts.html +883 -0
- package/backend/coverage/lcov-report/src/sessions/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/sessions/dto/session.dto.ts.html +769 -0
- package/backend/coverage/lcov-report/src/sessions/index.html +146 -0
- package/backend/coverage/lcov-report/src/sessions/sessions.controller.ts.html +1306 -0
- package/backend/coverage/lcov-report/src/sessions/sessions.module.ts.html +220 -0
- package/backend/coverage/lcov-report/src/sessions/sessions.service.ts.html +2797 -0
- package/backend/coverage/lcov-report/src/sub-agents/dto/create-sub-agent.dto.ts.html +355 -0
- package/backend/coverage/lcov-report/src/sub-agents/dto/index.html +131 -0
- package/backend/coverage/lcov-report/src/sub-agents/dto/update-sub-agent.dto.ts.html +295 -0
- package/backend/coverage/lcov-report/src/sub-agents/index.html +221 -0
- package/backend/coverage/lcov-report/src/sub-agents/sub-agent-run.entity.ts.html +463 -0
- package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runner.service.ts.html +2428 -0
- package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runs.controller.ts.html +580 -0
- package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runs.service.ts.html +550 -0
- package/backend/coverage/lcov-report/src/sub-agents/sub-agent.entity.ts.html +475 -0
- package/backend/coverage/lcov-report/src/sub-agents/sub-agents.controller.ts.html +373 -0
- package/backend/coverage/lcov-report/src/sub-agents/sub-agents.module.ts.html +205 -0
- package/backend/coverage/lcov-report/src/sub-agents/sub-agents.service.ts.html +619 -0
- package/backend/coverage/lcov-report/src/syntax-validation/index.html +131 -0
- package/backend/coverage/lcov-report/src/syntax-validation/syntax-validation.module.ts.html +109 -0
- package/backend/coverage/lcov-report/src/syntax-validation/syntax-validation.service.ts.html +724 -0
- package/backend/coverage/lcov-report/src/system-prompts/dto/index.html +176 -0
- package/backend/coverage/lcov-report/src/system-prompts/dto/set-enabled-mcp-tools.dto.ts.html +157 -0
- package/backend/coverage/lcov-report/src/system-prompts/dto/set-enabled-tools.dto.ts.html +148 -0
- package/backend/coverage/lcov-report/src/system-prompts/dto/system-prompt.dto.ts.html +517 -0
- package/backend/coverage/lcov-report/src/system-prompts/dto/toggle-mcp-tool.dto.ts.html +121 -0
- package/backend/coverage/lcov-report/src/system-prompts/dto/toggle-tool.dto.ts.html +118 -0
- package/backend/coverage/lcov-report/src/system-prompts/index.html +146 -0
- package/backend/coverage/lcov-report/src/system-prompts/system-prompts.controller.ts.html +1060 -0
- package/backend/coverage/lcov-report/src/system-prompts/system-prompts.module.ts.html +160 -0
- package/backend/coverage/lcov-report/src/system-prompts/system-prompts.service.ts.html +2254 -0
- package/backend/coverage/lcov-report/src/timeout.interceptor.ts.html +178 -0
- package/backend/coverage/lcov-report/src/tool-hooks/dto/create-tool-hook.dto.ts.html +181 -0
- package/backend/coverage/lcov-report/src/tool-hooks/dto/index.html +131 -0
- package/backend/coverage/lcov-report/src/tool-hooks/dto/update-tool-hook.dto.ts.html +178 -0
- package/backend/coverage/lcov-report/src/tool-hooks/index.html +146 -0
- package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.controller.ts.html +481 -0
- package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.module.ts.html +127 -0
- package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.service.ts.html +1222 -0
- package/backend/coverage/lcov-report/src/tracing.ts.html +214 -0
- package/backend/coverage/lcov-report/src/types/express-multer.d.ts.html +130 -0
- package/backend/coverage/lcov-report/src/types/index.html +116 -0
- package/backend/coverage/lcov-report/src/utils/ai-format-generator.ts.html +253 -0
- package/backend/coverage/lcov-report/src/utils/fuzzy-search.ts.html +310 -0
- package/backend/coverage/lcov-report/src/utils/index.html +191 -0
- package/backend/coverage/lcov-report/src/utils/index.ts.html +100 -0
- package/backend/coverage/lcov-report/src/utils/short-id.ts.html +109 -0
- package/backend/coverage/lcov-report/src/utils/spawn-with-kill.ts.html +412 -0
- package/backend/coverage/lcov-report/src/utils/trace.decorator.ts.html +223 -0
- package/backend/coverage/lcov-report/src/visual-editor/index.html +146 -0
- package/backend/coverage/lcov-report/src/visual-editor/visual-editor.controller.ts.html +409 -0
- package/backend/coverage/lcov-report/src/visual-editor/visual-editor.dto.ts.html +130 -0
- package/backend/coverage/lcov-report/src/visual-editor/visual-editor.module.ts.html +118 -0
- package/backend/coverage/lcov-report/src/workspace/dto/file-tree.dto.ts.html +112 -0
- package/backend/coverage/lcov-report/src/workspace/dto/index.html +131 -0
- package/backend/coverage/lcov-report/src/workspace/dto/search-workspace.dto.ts.html +193 -0
- package/backend/coverage/lcov-report/src/workspace/index.html +146 -0
- package/backend/coverage/lcov-report/src/workspace/workspace.controller.ts.html +394 -0
- package/backend/coverage/lcov-report/src/workspace/workspace.module.ts.html +121 -0
- package/backend/coverage/lcov-report/src/workspace/workspace.service.ts.html +1027 -0
- package/backend/coverage/lcov.info +20220 -0
- package/backend/dist/src/context-templates/context-templates.service.js +0 -3
- package/backend/dist/src/context-templates/context-templates.service.js.map +1 -1
- package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.d.ts +1 -1
- package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.js +4 -0
- package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.js.map +1 -1
- package/backend/dist/src/seeding/data/sub-agents/browser-use.d.ts +1 -1
- package/backend/dist/src/seeding/data/sub-agents/browser-use.js +1 -1
- package/backend/dist/src/seeding/data/sub-agents/browser-use.js.map +1 -1
- package/backend/dist/src/seeding/data/system-prompts/browser-use-agent.d.ts +1 -0
- package/backend/dist/src/seeding/data/system-prompts/browser-use-agent.js +2 -1
- package/backend/dist/src/seeding/data/system-prompts/browser-use-agent.js.map +1 -1
- package/backend/dist/src/seeding/data/system-prompts/default_native_tool_agent.d.ts +1 -0
- package/backend/dist/src/seeding/data/system-prompts/default_native_tool_agent.js +2 -1
- package/backend/dist/src/seeding/data/system-prompts/default_native_tool_agent.js.map +1 -1
- package/backend/dist/src/seeding/data/system-prompts/explore-codebase-agent.d.ts +1 -0
- package/backend/dist/src/seeding/data/system-prompts/explore-codebase-agent.js +2 -1
- package/backend/dist/src/seeding/data/system-prompts/explore-codebase-agent.js.map +1 -1
- package/backend/dist/src/seeding/system-prompt-seeding.service.js +3 -1
- package/backend/dist/src/seeding/system-prompt-seeding.service.js.map +1 -1
- package/backend/dist/src/sub-agents/sub-agent-run.entity.d.ts +1 -1
- package/backend/dist/src/sub-agents/sub-agent-run.entity.js +1 -1
- package/backend/dist/src/sub-agents/sub-agent-run.entity.js.map +1 -1
- package/backend/dist/src/sub-agents/sub-agent-runner.service.d.ts +1 -0
- package/backend/dist/src/sub-agents/sub-agent-runner.service.js +16 -2
- package/backend/dist/src/sub-agents/sub-agent-runner.service.js.map +1 -1
- package/backend/dist/src/sub-agents/sub-agents.service.js +0 -3
- package/backend/dist/src/sub-agents/sub-agents.service.js.map +1 -1
- package/backend/dist/src/system-prompts/system-prompts.service.d.ts +2 -1
- package/backend/dist/src/system-prompts/system-prompts.service.js +20 -14
- package/backend/dist/src/system-prompts/system-prompts.service.js.map +1 -1
- package/backend/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,1825 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for src/interactive-chat/chat.service.ts</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(../../sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="../../index.html">All files</a> / <a href="index.html">src/interactive-chat</a> chat.service.ts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">42.92% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>91/212</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">40% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>36/90</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">46.15% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>6/13</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">42.3% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>88/208</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
<template id="filterTemplate">
|
|
58
|
+
<div class="quiet">
|
|
59
|
+
Filter:
|
|
60
|
+
<input type="search" id="fileSearch">
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
</div>
|
|
64
|
+
<div class='status-line low'></div>
|
|
65
|
+
<pre><table class="coverage">
|
|
66
|
+
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
+
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
+
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
+
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
+
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
+
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
+
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
+
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
+
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
+
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
+
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
+
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
+
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
+
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
+
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
+
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
+
<a name='L17'></a><a href='#L17'>17</a>
|
|
83
|
+
<a name='L18'></a><a href='#L18'>18</a>
|
|
84
|
+
<a name='L19'></a><a href='#L19'>19</a>
|
|
85
|
+
<a name='L20'></a><a href='#L20'>20</a>
|
|
86
|
+
<a name='L21'></a><a href='#L21'>21</a>
|
|
87
|
+
<a name='L22'></a><a href='#L22'>22</a>
|
|
88
|
+
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
|
+
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
|
+
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
+
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
+
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
+
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
+
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
+
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
+
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
+
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
+
<a name='L33'></a><a href='#L33'>33</a>
|
|
99
|
+
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
+
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
+
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
+
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
+
<a name='L38'></a><a href='#L38'>38</a>
|
|
104
|
+
<a name='L39'></a><a href='#L39'>39</a>
|
|
105
|
+
<a name='L40'></a><a href='#L40'>40</a>
|
|
106
|
+
<a name='L41'></a><a href='#L41'>41</a>
|
|
107
|
+
<a name='L42'></a><a href='#L42'>42</a>
|
|
108
|
+
<a name='L43'></a><a href='#L43'>43</a>
|
|
109
|
+
<a name='L44'></a><a href='#L44'>44</a>
|
|
110
|
+
<a name='L45'></a><a href='#L45'>45</a>
|
|
111
|
+
<a name='L46'></a><a href='#L46'>46</a>
|
|
112
|
+
<a name='L47'></a><a href='#L47'>47</a>
|
|
113
|
+
<a name='L48'></a><a href='#L48'>48</a>
|
|
114
|
+
<a name='L49'></a><a href='#L49'>49</a>
|
|
115
|
+
<a name='L50'></a><a href='#L50'>50</a>
|
|
116
|
+
<a name='L51'></a><a href='#L51'>51</a>
|
|
117
|
+
<a name='L52'></a><a href='#L52'>52</a>
|
|
118
|
+
<a name='L53'></a><a href='#L53'>53</a>
|
|
119
|
+
<a name='L54'></a><a href='#L54'>54</a>
|
|
120
|
+
<a name='L55'></a><a href='#L55'>55</a>
|
|
121
|
+
<a name='L56'></a><a href='#L56'>56</a>
|
|
122
|
+
<a name='L57'></a><a href='#L57'>57</a>
|
|
123
|
+
<a name='L58'></a><a href='#L58'>58</a>
|
|
124
|
+
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
|
+
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
|
+
<a name='L61'></a><a href='#L61'>61</a>
|
|
127
|
+
<a name='L62'></a><a href='#L62'>62</a>
|
|
128
|
+
<a name='L63'></a><a href='#L63'>63</a>
|
|
129
|
+
<a name='L64'></a><a href='#L64'>64</a>
|
|
130
|
+
<a name='L65'></a><a href='#L65'>65</a>
|
|
131
|
+
<a name='L66'></a><a href='#L66'>66</a>
|
|
132
|
+
<a name='L67'></a><a href='#L67'>67</a>
|
|
133
|
+
<a name='L68'></a><a href='#L68'>68</a>
|
|
134
|
+
<a name='L69'></a><a href='#L69'>69</a>
|
|
135
|
+
<a name='L70'></a><a href='#L70'>70</a>
|
|
136
|
+
<a name='L71'></a><a href='#L71'>71</a>
|
|
137
|
+
<a name='L72'></a><a href='#L72'>72</a>
|
|
138
|
+
<a name='L73'></a><a href='#L73'>73</a>
|
|
139
|
+
<a name='L74'></a><a href='#L74'>74</a>
|
|
140
|
+
<a name='L75'></a><a href='#L75'>75</a>
|
|
141
|
+
<a name='L76'></a><a href='#L76'>76</a>
|
|
142
|
+
<a name='L77'></a><a href='#L77'>77</a>
|
|
143
|
+
<a name='L78'></a><a href='#L78'>78</a>
|
|
144
|
+
<a name='L79'></a><a href='#L79'>79</a>
|
|
145
|
+
<a name='L80'></a><a href='#L80'>80</a>
|
|
146
|
+
<a name='L81'></a><a href='#L81'>81</a>
|
|
147
|
+
<a name='L82'></a><a href='#L82'>82</a>
|
|
148
|
+
<a name='L83'></a><a href='#L83'>83</a>
|
|
149
|
+
<a name='L84'></a><a href='#L84'>84</a>
|
|
150
|
+
<a name='L85'></a><a href='#L85'>85</a>
|
|
151
|
+
<a name='L86'></a><a href='#L86'>86</a>
|
|
152
|
+
<a name='L87'></a><a href='#L87'>87</a>
|
|
153
|
+
<a name='L88'></a><a href='#L88'>88</a>
|
|
154
|
+
<a name='L89'></a><a href='#L89'>89</a>
|
|
155
|
+
<a name='L90'></a><a href='#L90'>90</a>
|
|
156
|
+
<a name='L91'></a><a href='#L91'>91</a>
|
|
157
|
+
<a name='L92'></a><a href='#L92'>92</a>
|
|
158
|
+
<a name='L93'></a><a href='#L93'>93</a>
|
|
159
|
+
<a name='L94'></a><a href='#L94'>94</a>
|
|
160
|
+
<a name='L95'></a><a href='#L95'>95</a>
|
|
161
|
+
<a name='L96'></a><a href='#L96'>96</a>
|
|
162
|
+
<a name='L97'></a><a href='#L97'>97</a>
|
|
163
|
+
<a name='L98'></a><a href='#L98'>98</a>
|
|
164
|
+
<a name='L99'></a><a href='#L99'>99</a>
|
|
165
|
+
<a name='L100'></a><a href='#L100'>100</a>
|
|
166
|
+
<a name='L101'></a><a href='#L101'>101</a>
|
|
167
|
+
<a name='L102'></a><a href='#L102'>102</a>
|
|
168
|
+
<a name='L103'></a><a href='#L103'>103</a>
|
|
169
|
+
<a name='L104'></a><a href='#L104'>104</a>
|
|
170
|
+
<a name='L105'></a><a href='#L105'>105</a>
|
|
171
|
+
<a name='L106'></a><a href='#L106'>106</a>
|
|
172
|
+
<a name='L107'></a><a href='#L107'>107</a>
|
|
173
|
+
<a name='L108'></a><a href='#L108'>108</a>
|
|
174
|
+
<a name='L109'></a><a href='#L109'>109</a>
|
|
175
|
+
<a name='L110'></a><a href='#L110'>110</a>
|
|
176
|
+
<a name='L111'></a><a href='#L111'>111</a>
|
|
177
|
+
<a name='L112'></a><a href='#L112'>112</a>
|
|
178
|
+
<a name='L113'></a><a href='#L113'>113</a>
|
|
179
|
+
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
|
+
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
|
+
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
+
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
+
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
+
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
+
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
+
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
+
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
|
+
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
+
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
+
<a name='L125'></a><a href='#L125'>125</a>
|
|
191
|
+
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
|
+
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
|
+
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
+
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
+
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
+
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
+
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
|
+
<a name='L133'></a><a href='#L133'>133</a>
|
|
199
|
+
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
|
+
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
|
+
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
+
<a name='L137'></a><a href='#L137'>137</a>
|
|
203
|
+
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
|
+
<a name='L139'></a><a href='#L139'>139</a>
|
|
205
|
+
<a name='L140'></a><a href='#L140'>140</a>
|
|
206
|
+
<a name='L141'></a><a href='#L141'>141</a>
|
|
207
|
+
<a name='L142'></a><a href='#L142'>142</a>
|
|
208
|
+
<a name='L143'></a><a href='#L143'>143</a>
|
|
209
|
+
<a name='L144'></a><a href='#L144'>144</a>
|
|
210
|
+
<a name='L145'></a><a href='#L145'>145</a>
|
|
211
|
+
<a name='L146'></a><a href='#L146'>146</a>
|
|
212
|
+
<a name='L147'></a><a href='#L147'>147</a>
|
|
213
|
+
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
|
+
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
|
+
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
+
<a name='L151'></a><a href='#L151'>151</a>
|
|
217
|
+
<a name='L152'></a><a href='#L152'>152</a>
|
|
218
|
+
<a name='L153'></a><a href='#L153'>153</a>
|
|
219
|
+
<a name='L154'></a><a href='#L154'>154</a>
|
|
220
|
+
<a name='L155'></a><a href='#L155'>155</a>
|
|
221
|
+
<a name='L156'></a><a href='#L156'>156</a>
|
|
222
|
+
<a name='L157'></a><a href='#L157'>157</a>
|
|
223
|
+
<a name='L158'></a><a href='#L158'>158</a>
|
|
224
|
+
<a name='L159'></a><a href='#L159'>159</a>
|
|
225
|
+
<a name='L160'></a><a href='#L160'>160</a>
|
|
226
|
+
<a name='L161'></a><a href='#L161'>161</a>
|
|
227
|
+
<a name='L162'></a><a href='#L162'>162</a>
|
|
228
|
+
<a name='L163'></a><a href='#L163'>163</a>
|
|
229
|
+
<a name='L164'></a><a href='#L164'>164</a>
|
|
230
|
+
<a name='L165'></a><a href='#L165'>165</a>
|
|
231
|
+
<a name='L166'></a><a href='#L166'>166</a>
|
|
232
|
+
<a name='L167'></a><a href='#L167'>167</a>
|
|
233
|
+
<a name='L168'></a><a href='#L168'>168</a>
|
|
234
|
+
<a name='L169'></a><a href='#L169'>169</a>
|
|
235
|
+
<a name='L170'></a><a href='#L170'>170</a>
|
|
236
|
+
<a name='L171'></a><a href='#L171'>171</a>
|
|
237
|
+
<a name='L172'></a><a href='#L172'>172</a>
|
|
238
|
+
<a name='L173'></a><a href='#L173'>173</a>
|
|
239
|
+
<a name='L174'></a><a href='#L174'>174</a>
|
|
240
|
+
<a name='L175'></a><a href='#L175'>175</a>
|
|
241
|
+
<a name='L176'></a><a href='#L176'>176</a>
|
|
242
|
+
<a name='L177'></a><a href='#L177'>177</a>
|
|
243
|
+
<a name='L178'></a><a href='#L178'>178</a>
|
|
244
|
+
<a name='L179'></a><a href='#L179'>179</a>
|
|
245
|
+
<a name='L180'></a><a href='#L180'>180</a>
|
|
246
|
+
<a name='L181'></a><a href='#L181'>181</a>
|
|
247
|
+
<a name='L182'></a><a href='#L182'>182</a>
|
|
248
|
+
<a name='L183'></a><a href='#L183'>183</a>
|
|
249
|
+
<a name='L184'></a><a href='#L184'>184</a>
|
|
250
|
+
<a name='L185'></a><a href='#L185'>185</a>
|
|
251
|
+
<a name='L186'></a><a href='#L186'>186</a>
|
|
252
|
+
<a name='L187'></a><a href='#L187'>187</a>
|
|
253
|
+
<a name='L188'></a><a href='#L188'>188</a>
|
|
254
|
+
<a name='L189'></a><a href='#L189'>189</a>
|
|
255
|
+
<a name='L190'></a><a href='#L190'>190</a>
|
|
256
|
+
<a name='L191'></a><a href='#L191'>191</a>
|
|
257
|
+
<a name='L192'></a><a href='#L192'>192</a>
|
|
258
|
+
<a name='L193'></a><a href='#L193'>193</a>
|
|
259
|
+
<a name='L194'></a><a href='#L194'>194</a>
|
|
260
|
+
<a name='L195'></a><a href='#L195'>195</a>
|
|
261
|
+
<a name='L196'></a><a href='#L196'>196</a>
|
|
262
|
+
<a name='L197'></a><a href='#L197'>197</a>
|
|
263
|
+
<a name='L198'></a><a href='#L198'>198</a>
|
|
264
|
+
<a name='L199'></a><a href='#L199'>199</a>
|
|
265
|
+
<a name='L200'></a><a href='#L200'>200</a>
|
|
266
|
+
<a name='L201'></a><a href='#L201'>201</a>
|
|
267
|
+
<a name='L202'></a><a href='#L202'>202</a>
|
|
268
|
+
<a name='L203'></a><a href='#L203'>203</a>
|
|
269
|
+
<a name='L204'></a><a href='#L204'>204</a>
|
|
270
|
+
<a name='L205'></a><a href='#L205'>205</a>
|
|
271
|
+
<a name='L206'></a><a href='#L206'>206</a>
|
|
272
|
+
<a name='L207'></a><a href='#L207'>207</a>
|
|
273
|
+
<a name='L208'></a><a href='#L208'>208</a>
|
|
274
|
+
<a name='L209'></a><a href='#L209'>209</a>
|
|
275
|
+
<a name='L210'></a><a href='#L210'>210</a>
|
|
276
|
+
<a name='L211'></a><a href='#L211'>211</a>
|
|
277
|
+
<a name='L212'></a><a href='#L212'>212</a>
|
|
278
|
+
<a name='L213'></a><a href='#L213'>213</a>
|
|
279
|
+
<a name='L214'></a><a href='#L214'>214</a>
|
|
280
|
+
<a name='L215'></a><a href='#L215'>215</a>
|
|
281
|
+
<a name='L216'></a><a href='#L216'>216</a>
|
|
282
|
+
<a name='L217'></a><a href='#L217'>217</a>
|
|
283
|
+
<a name='L218'></a><a href='#L218'>218</a>
|
|
284
|
+
<a name='L219'></a><a href='#L219'>219</a>
|
|
285
|
+
<a name='L220'></a><a href='#L220'>220</a>
|
|
286
|
+
<a name='L221'></a><a href='#L221'>221</a>
|
|
287
|
+
<a name='L222'></a><a href='#L222'>222</a>
|
|
288
|
+
<a name='L223'></a><a href='#L223'>223</a>
|
|
289
|
+
<a name='L224'></a><a href='#L224'>224</a>
|
|
290
|
+
<a name='L225'></a><a href='#L225'>225</a>
|
|
291
|
+
<a name='L226'></a><a href='#L226'>226</a>
|
|
292
|
+
<a name='L227'></a><a href='#L227'>227</a>
|
|
293
|
+
<a name='L228'></a><a href='#L228'>228</a>
|
|
294
|
+
<a name='L229'></a><a href='#L229'>229</a>
|
|
295
|
+
<a name='L230'></a><a href='#L230'>230</a>
|
|
296
|
+
<a name='L231'></a><a href='#L231'>231</a>
|
|
297
|
+
<a name='L232'></a><a href='#L232'>232</a>
|
|
298
|
+
<a name='L233'></a><a href='#L233'>233</a>
|
|
299
|
+
<a name='L234'></a><a href='#L234'>234</a>
|
|
300
|
+
<a name='L235'></a><a href='#L235'>235</a>
|
|
301
|
+
<a name='L236'></a><a href='#L236'>236</a>
|
|
302
|
+
<a name='L237'></a><a href='#L237'>237</a>
|
|
303
|
+
<a name='L238'></a><a href='#L238'>238</a>
|
|
304
|
+
<a name='L239'></a><a href='#L239'>239</a>
|
|
305
|
+
<a name='L240'></a><a href='#L240'>240</a>
|
|
306
|
+
<a name='L241'></a><a href='#L241'>241</a>
|
|
307
|
+
<a name='L242'></a><a href='#L242'>242</a>
|
|
308
|
+
<a name='L243'></a><a href='#L243'>243</a>
|
|
309
|
+
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
|
+
<a name='L245'></a><a href='#L245'>245</a>
|
|
311
|
+
<a name='L246'></a><a href='#L246'>246</a>
|
|
312
|
+
<a name='L247'></a><a href='#L247'>247</a>
|
|
313
|
+
<a name='L248'></a><a href='#L248'>248</a>
|
|
314
|
+
<a name='L249'></a><a href='#L249'>249</a>
|
|
315
|
+
<a name='L250'></a><a href='#L250'>250</a>
|
|
316
|
+
<a name='L251'></a><a href='#L251'>251</a>
|
|
317
|
+
<a name='L252'></a><a href='#L252'>252</a>
|
|
318
|
+
<a name='L253'></a><a href='#L253'>253</a>
|
|
319
|
+
<a name='L254'></a><a href='#L254'>254</a>
|
|
320
|
+
<a name='L255'></a><a href='#L255'>255</a>
|
|
321
|
+
<a name='L256'></a><a href='#L256'>256</a>
|
|
322
|
+
<a name='L257'></a><a href='#L257'>257</a>
|
|
323
|
+
<a name='L258'></a><a href='#L258'>258</a>
|
|
324
|
+
<a name='L259'></a><a href='#L259'>259</a>
|
|
325
|
+
<a name='L260'></a><a href='#L260'>260</a>
|
|
326
|
+
<a name='L261'></a><a href='#L261'>261</a>
|
|
327
|
+
<a name='L262'></a><a href='#L262'>262</a>
|
|
328
|
+
<a name='L263'></a><a href='#L263'>263</a>
|
|
329
|
+
<a name='L264'></a><a href='#L264'>264</a>
|
|
330
|
+
<a name='L265'></a><a href='#L265'>265</a>
|
|
331
|
+
<a name='L266'></a><a href='#L266'>266</a>
|
|
332
|
+
<a name='L267'></a><a href='#L267'>267</a>
|
|
333
|
+
<a name='L268'></a><a href='#L268'>268</a>
|
|
334
|
+
<a name='L269'></a><a href='#L269'>269</a>
|
|
335
|
+
<a name='L270'></a><a href='#L270'>270</a>
|
|
336
|
+
<a name='L271'></a><a href='#L271'>271</a>
|
|
337
|
+
<a name='L272'></a><a href='#L272'>272</a>
|
|
338
|
+
<a name='L273'></a><a href='#L273'>273</a>
|
|
339
|
+
<a name='L274'></a><a href='#L274'>274</a>
|
|
340
|
+
<a name='L275'></a><a href='#L275'>275</a>
|
|
341
|
+
<a name='L276'></a><a href='#L276'>276</a>
|
|
342
|
+
<a name='L277'></a><a href='#L277'>277</a>
|
|
343
|
+
<a name='L278'></a><a href='#L278'>278</a>
|
|
344
|
+
<a name='L279'></a><a href='#L279'>279</a>
|
|
345
|
+
<a name='L280'></a><a href='#L280'>280</a>
|
|
346
|
+
<a name='L281'></a><a href='#L281'>281</a>
|
|
347
|
+
<a name='L282'></a><a href='#L282'>282</a>
|
|
348
|
+
<a name='L283'></a><a href='#L283'>283</a>
|
|
349
|
+
<a name='L284'></a><a href='#L284'>284</a>
|
|
350
|
+
<a name='L285'></a><a href='#L285'>285</a>
|
|
351
|
+
<a name='L286'></a><a href='#L286'>286</a>
|
|
352
|
+
<a name='L287'></a><a href='#L287'>287</a>
|
|
353
|
+
<a name='L288'></a><a href='#L288'>288</a>
|
|
354
|
+
<a name='L289'></a><a href='#L289'>289</a>
|
|
355
|
+
<a name='L290'></a><a href='#L290'>290</a>
|
|
356
|
+
<a name='L291'></a><a href='#L291'>291</a>
|
|
357
|
+
<a name='L292'></a><a href='#L292'>292</a>
|
|
358
|
+
<a name='L293'></a><a href='#L293'>293</a>
|
|
359
|
+
<a name='L294'></a><a href='#L294'>294</a>
|
|
360
|
+
<a name='L295'></a><a href='#L295'>295</a>
|
|
361
|
+
<a name='L296'></a><a href='#L296'>296</a>
|
|
362
|
+
<a name='L297'></a><a href='#L297'>297</a>
|
|
363
|
+
<a name='L298'></a><a href='#L298'>298</a>
|
|
364
|
+
<a name='L299'></a><a href='#L299'>299</a>
|
|
365
|
+
<a name='L300'></a><a href='#L300'>300</a>
|
|
366
|
+
<a name='L301'></a><a href='#L301'>301</a>
|
|
367
|
+
<a name='L302'></a><a href='#L302'>302</a>
|
|
368
|
+
<a name='L303'></a><a href='#L303'>303</a>
|
|
369
|
+
<a name='L304'></a><a href='#L304'>304</a>
|
|
370
|
+
<a name='L305'></a><a href='#L305'>305</a>
|
|
371
|
+
<a name='L306'></a><a href='#L306'>306</a>
|
|
372
|
+
<a name='L307'></a><a href='#L307'>307</a>
|
|
373
|
+
<a name='L308'></a><a href='#L308'>308</a>
|
|
374
|
+
<a name='L309'></a><a href='#L309'>309</a>
|
|
375
|
+
<a name='L310'></a><a href='#L310'>310</a>
|
|
376
|
+
<a name='L311'></a><a href='#L311'>311</a>
|
|
377
|
+
<a name='L312'></a><a href='#L312'>312</a>
|
|
378
|
+
<a name='L313'></a><a href='#L313'>313</a>
|
|
379
|
+
<a name='L314'></a><a href='#L314'>314</a>
|
|
380
|
+
<a name='L315'></a><a href='#L315'>315</a>
|
|
381
|
+
<a name='L316'></a><a href='#L316'>316</a>
|
|
382
|
+
<a name='L317'></a><a href='#L317'>317</a>
|
|
383
|
+
<a name='L318'></a><a href='#L318'>318</a>
|
|
384
|
+
<a name='L319'></a><a href='#L319'>319</a>
|
|
385
|
+
<a name='L320'></a><a href='#L320'>320</a>
|
|
386
|
+
<a name='L321'></a><a href='#L321'>321</a>
|
|
387
|
+
<a name='L322'></a><a href='#L322'>322</a>
|
|
388
|
+
<a name='L323'></a><a href='#L323'>323</a>
|
|
389
|
+
<a name='L324'></a><a href='#L324'>324</a>
|
|
390
|
+
<a name='L325'></a><a href='#L325'>325</a>
|
|
391
|
+
<a name='L326'></a><a href='#L326'>326</a>
|
|
392
|
+
<a name='L327'></a><a href='#L327'>327</a>
|
|
393
|
+
<a name='L328'></a><a href='#L328'>328</a>
|
|
394
|
+
<a name='L329'></a><a href='#L329'>329</a>
|
|
395
|
+
<a name='L330'></a><a href='#L330'>330</a>
|
|
396
|
+
<a name='L331'></a><a href='#L331'>331</a>
|
|
397
|
+
<a name='L332'></a><a href='#L332'>332</a>
|
|
398
|
+
<a name='L333'></a><a href='#L333'>333</a>
|
|
399
|
+
<a name='L334'></a><a href='#L334'>334</a>
|
|
400
|
+
<a name='L335'></a><a href='#L335'>335</a>
|
|
401
|
+
<a name='L336'></a><a href='#L336'>336</a>
|
|
402
|
+
<a name='L337'></a><a href='#L337'>337</a>
|
|
403
|
+
<a name='L338'></a><a href='#L338'>338</a>
|
|
404
|
+
<a name='L339'></a><a href='#L339'>339</a>
|
|
405
|
+
<a name='L340'></a><a href='#L340'>340</a>
|
|
406
|
+
<a name='L341'></a><a href='#L341'>341</a>
|
|
407
|
+
<a name='L342'></a><a href='#L342'>342</a>
|
|
408
|
+
<a name='L343'></a><a href='#L343'>343</a>
|
|
409
|
+
<a name='L344'></a><a href='#L344'>344</a>
|
|
410
|
+
<a name='L345'></a><a href='#L345'>345</a>
|
|
411
|
+
<a name='L346'></a><a href='#L346'>346</a>
|
|
412
|
+
<a name='L347'></a><a href='#L347'>347</a>
|
|
413
|
+
<a name='L348'></a><a href='#L348'>348</a>
|
|
414
|
+
<a name='L349'></a><a href='#L349'>349</a>
|
|
415
|
+
<a name='L350'></a><a href='#L350'>350</a>
|
|
416
|
+
<a name='L351'></a><a href='#L351'>351</a>
|
|
417
|
+
<a name='L352'></a><a href='#L352'>352</a>
|
|
418
|
+
<a name='L353'></a><a href='#L353'>353</a>
|
|
419
|
+
<a name='L354'></a><a href='#L354'>354</a>
|
|
420
|
+
<a name='L355'></a><a href='#L355'>355</a>
|
|
421
|
+
<a name='L356'></a><a href='#L356'>356</a>
|
|
422
|
+
<a name='L357'></a><a href='#L357'>357</a>
|
|
423
|
+
<a name='L358'></a><a href='#L358'>358</a>
|
|
424
|
+
<a name='L359'></a><a href='#L359'>359</a>
|
|
425
|
+
<a name='L360'></a><a href='#L360'>360</a>
|
|
426
|
+
<a name='L361'></a><a href='#L361'>361</a>
|
|
427
|
+
<a name='L362'></a><a href='#L362'>362</a>
|
|
428
|
+
<a name='L363'></a><a href='#L363'>363</a>
|
|
429
|
+
<a name='L364'></a><a href='#L364'>364</a>
|
|
430
|
+
<a name='L365'></a><a href='#L365'>365</a>
|
|
431
|
+
<a name='L366'></a><a href='#L366'>366</a>
|
|
432
|
+
<a name='L367'></a><a href='#L367'>367</a>
|
|
433
|
+
<a name='L368'></a><a href='#L368'>368</a>
|
|
434
|
+
<a name='L369'></a><a href='#L369'>369</a>
|
|
435
|
+
<a name='L370'></a><a href='#L370'>370</a>
|
|
436
|
+
<a name='L371'></a><a href='#L371'>371</a>
|
|
437
|
+
<a name='L372'></a><a href='#L372'>372</a>
|
|
438
|
+
<a name='L373'></a><a href='#L373'>373</a>
|
|
439
|
+
<a name='L374'></a><a href='#L374'>374</a>
|
|
440
|
+
<a name='L375'></a><a href='#L375'>375</a>
|
|
441
|
+
<a name='L376'></a><a href='#L376'>376</a>
|
|
442
|
+
<a name='L377'></a><a href='#L377'>377</a>
|
|
443
|
+
<a name='L378'></a><a href='#L378'>378</a>
|
|
444
|
+
<a name='L379'></a><a href='#L379'>379</a>
|
|
445
|
+
<a name='L380'></a><a href='#L380'>380</a>
|
|
446
|
+
<a name='L381'></a><a href='#L381'>381</a>
|
|
447
|
+
<a name='L382'></a><a href='#L382'>382</a>
|
|
448
|
+
<a name='L383'></a><a href='#L383'>383</a>
|
|
449
|
+
<a name='L384'></a><a href='#L384'>384</a>
|
|
450
|
+
<a name='L385'></a><a href='#L385'>385</a>
|
|
451
|
+
<a name='L386'></a><a href='#L386'>386</a>
|
|
452
|
+
<a name='L387'></a><a href='#L387'>387</a>
|
|
453
|
+
<a name='L388'></a><a href='#L388'>388</a>
|
|
454
|
+
<a name='L389'></a><a href='#L389'>389</a>
|
|
455
|
+
<a name='L390'></a><a href='#L390'>390</a>
|
|
456
|
+
<a name='L391'></a><a href='#L391'>391</a>
|
|
457
|
+
<a name='L392'></a><a href='#L392'>392</a>
|
|
458
|
+
<a name='L393'></a><a href='#L393'>393</a>
|
|
459
|
+
<a name='L394'></a><a href='#L394'>394</a>
|
|
460
|
+
<a name='L395'></a><a href='#L395'>395</a>
|
|
461
|
+
<a name='L396'></a><a href='#L396'>396</a>
|
|
462
|
+
<a name='L397'></a><a href='#L397'>397</a>
|
|
463
|
+
<a name='L398'></a><a href='#L398'>398</a>
|
|
464
|
+
<a name='L399'></a><a href='#L399'>399</a>
|
|
465
|
+
<a name='L400'></a><a href='#L400'>400</a>
|
|
466
|
+
<a name='L401'></a><a href='#L401'>401</a>
|
|
467
|
+
<a name='L402'></a><a href='#L402'>402</a>
|
|
468
|
+
<a name='L403'></a><a href='#L403'>403</a>
|
|
469
|
+
<a name='L404'></a><a href='#L404'>404</a>
|
|
470
|
+
<a name='L405'></a><a href='#L405'>405</a>
|
|
471
|
+
<a name='L406'></a><a href='#L406'>406</a>
|
|
472
|
+
<a name='L407'></a><a href='#L407'>407</a>
|
|
473
|
+
<a name='L408'></a><a href='#L408'>408</a>
|
|
474
|
+
<a name='L409'></a><a href='#L409'>409</a>
|
|
475
|
+
<a name='L410'></a><a href='#L410'>410</a>
|
|
476
|
+
<a name='L411'></a><a href='#L411'>411</a>
|
|
477
|
+
<a name='L412'></a><a href='#L412'>412</a>
|
|
478
|
+
<a name='L413'></a><a href='#L413'>413</a>
|
|
479
|
+
<a name='L414'></a><a href='#L414'>414</a>
|
|
480
|
+
<a name='L415'></a><a href='#L415'>415</a>
|
|
481
|
+
<a name='L416'></a><a href='#L416'>416</a>
|
|
482
|
+
<a name='L417'></a><a href='#L417'>417</a>
|
|
483
|
+
<a name='L418'></a><a href='#L418'>418</a>
|
|
484
|
+
<a name='L419'></a><a href='#L419'>419</a>
|
|
485
|
+
<a name='L420'></a><a href='#L420'>420</a>
|
|
486
|
+
<a name='L421'></a><a href='#L421'>421</a>
|
|
487
|
+
<a name='L422'></a><a href='#L422'>422</a>
|
|
488
|
+
<a name='L423'></a><a href='#L423'>423</a>
|
|
489
|
+
<a name='L424'></a><a href='#L424'>424</a>
|
|
490
|
+
<a name='L425'></a><a href='#L425'>425</a>
|
|
491
|
+
<a name='L426'></a><a href='#L426'>426</a>
|
|
492
|
+
<a name='L427'></a><a href='#L427'>427</a>
|
|
493
|
+
<a name='L428'></a><a href='#L428'>428</a>
|
|
494
|
+
<a name='L429'></a><a href='#L429'>429</a>
|
|
495
|
+
<a name='L430'></a><a href='#L430'>430</a>
|
|
496
|
+
<a name='L431'></a><a href='#L431'>431</a>
|
|
497
|
+
<a name='L432'></a><a href='#L432'>432</a>
|
|
498
|
+
<a name='L433'></a><a href='#L433'>433</a>
|
|
499
|
+
<a name='L434'></a><a href='#L434'>434</a>
|
|
500
|
+
<a name='L435'></a><a href='#L435'>435</a>
|
|
501
|
+
<a name='L436'></a><a href='#L436'>436</a>
|
|
502
|
+
<a name='L437'></a><a href='#L437'>437</a>
|
|
503
|
+
<a name='L438'></a><a href='#L438'>438</a>
|
|
504
|
+
<a name='L439'></a><a href='#L439'>439</a>
|
|
505
|
+
<a name='L440'></a><a href='#L440'>440</a>
|
|
506
|
+
<a name='L441'></a><a href='#L441'>441</a>
|
|
507
|
+
<a name='L442'></a><a href='#L442'>442</a>
|
|
508
|
+
<a name='L443'></a><a href='#L443'>443</a>
|
|
509
|
+
<a name='L444'></a><a href='#L444'>444</a>
|
|
510
|
+
<a name='L445'></a><a href='#L445'>445</a>
|
|
511
|
+
<a name='L446'></a><a href='#L446'>446</a>
|
|
512
|
+
<a name='L447'></a><a href='#L447'>447</a>
|
|
513
|
+
<a name='L448'></a><a href='#L448'>448</a>
|
|
514
|
+
<a name='L449'></a><a href='#L449'>449</a>
|
|
515
|
+
<a name='L450'></a><a href='#L450'>450</a>
|
|
516
|
+
<a name='L451'></a><a href='#L451'>451</a>
|
|
517
|
+
<a name='L452'></a><a href='#L452'>452</a>
|
|
518
|
+
<a name='L453'></a><a href='#L453'>453</a>
|
|
519
|
+
<a name='L454'></a><a href='#L454'>454</a>
|
|
520
|
+
<a name='L455'></a><a href='#L455'>455</a>
|
|
521
|
+
<a name='L456'></a><a href='#L456'>456</a>
|
|
522
|
+
<a name='L457'></a><a href='#L457'>457</a>
|
|
523
|
+
<a name='L458'></a><a href='#L458'>458</a>
|
|
524
|
+
<a name='L459'></a><a href='#L459'>459</a>
|
|
525
|
+
<a name='L460'></a><a href='#L460'>460</a>
|
|
526
|
+
<a name='L461'></a><a href='#L461'>461</a>
|
|
527
|
+
<a name='L462'></a><a href='#L462'>462</a>
|
|
528
|
+
<a name='L463'></a><a href='#L463'>463</a>
|
|
529
|
+
<a name='L464'></a><a href='#L464'>464</a>
|
|
530
|
+
<a name='L465'></a><a href='#L465'>465</a>
|
|
531
|
+
<a name='L466'></a><a href='#L466'>466</a>
|
|
532
|
+
<a name='L467'></a><a href='#L467'>467</a>
|
|
533
|
+
<a name='L468'></a><a href='#L468'>468</a>
|
|
534
|
+
<a name='L469'></a><a href='#L469'>469</a>
|
|
535
|
+
<a name='L470'></a><a href='#L470'>470</a>
|
|
536
|
+
<a name='L471'></a><a href='#L471'>471</a>
|
|
537
|
+
<a name='L472'></a><a href='#L472'>472</a>
|
|
538
|
+
<a name='L473'></a><a href='#L473'>473</a>
|
|
539
|
+
<a name='L474'></a><a href='#L474'>474</a>
|
|
540
|
+
<a name='L475'></a><a href='#L475'>475</a>
|
|
541
|
+
<a name='L476'></a><a href='#L476'>476</a>
|
|
542
|
+
<a name='L477'></a><a href='#L477'>477</a>
|
|
543
|
+
<a name='L478'></a><a href='#L478'>478</a>
|
|
544
|
+
<a name='L479'></a><a href='#L479'>479</a>
|
|
545
|
+
<a name='L480'></a><a href='#L480'>480</a>
|
|
546
|
+
<a name='L481'></a><a href='#L481'>481</a>
|
|
547
|
+
<a name='L482'></a><a href='#L482'>482</a>
|
|
548
|
+
<a name='L483'></a><a href='#L483'>483</a>
|
|
549
|
+
<a name='L484'></a><a href='#L484'>484</a>
|
|
550
|
+
<a name='L485'></a><a href='#L485'>485</a>
|
|
551
|
+
<a name='L486'></a><a href='#L486'>486</a>
|
|
552
|
+
<a name='L487'></a><a href='#L487'>487</a>
|
|
553
|
+
<a name='L488'></a><a href='#L488'>488</a>
|
|
554
|
+
<a name='L489'></a><a href='#L489'>489</a>
|
|
555
|
+
<a name='L490'></a><a href='#L490'>490</a>
|
|
556
|
+
<a name='L491'></a><a href='#L491'>491</a>
|
|
557
|
+
<a name='L492'></a><a href='#L492'>492</a>
|
|
558
|
+
<a name='L493'></a><a href='#L493'>493</a>
|
|
559
|
+
<a name='L494'></a><a href='#L494'>494</a>
|
|
560
|
+
<a name='L495'></a><a href='#L495'>495</a>
|
|
561
|
+
<a name='L496'></a><a href='#L496'>496</a>
|
|
562
|
+
<a name='L497'></a><a href='#L497'>497</a>
|
|
563
|
+
<a name='L498'></a><a href='#L498'>498</a>
|
|
564
|
+
<a name='L499'></a><a href='#L499'>499</a>
|
|
565
|
+
<a name='L500'></a><a href='#L500'>500</a>
|
|
566
|
+
<a name='L501'></a><a href='#L501'>501</a>
|
|
567
|
+
<a name='L502'></a><a href='#L502'>502</a>
|
|
568
|
+
<a name='L503'></a><a href='#L503'>503</a>
|
|
569
|
+
<a name='L504'></a><a href='#L504'>504</a>
|
|
570
|
+
<a name='L505'></a><a href='#L505'>505</a>
|
|
571
|
+
<a name='L506'></a><a href='#L506'>506</a>
|
|
572
|
+
<a name='L507'></a><a href='#L507'>507</a>
|
|
573
|
+
<a name='L508'></a><a href='#L508'>508</a>
|
|
574
|
+
<a name='L509'></a><a href='#L509'>509</a>
|
|
575
|
+
<a name='L510'></a><a href='#L510'>510</a>
|
|
576
|
+
<a name='L511'></a><a href='#L511'>511</a>
|
|
577
|
+
<a name='L512'></a><a href='#L512'>512</a>
|
|
578
|
+
<a name='L513'></a><a href='#L513'>513</a>
|
|
579
|
+
<a name='L514'></a><a href='#L514'>514</a>
|
|
580
|
+
<a name='L515'></a><a href='#L515'>515</a>
|
|
581
|
+
<a name='L516'></a><a href='#L516'>516</a>
|
|
582
|
+
<a name='L517'></a><a href='#L517'>517</a>
|
|
583
|
+
<a name='L518'></a><a href='#L518'>518</a>
|
|
584
|
+
<a name='L519'></a><a href='#L519'>519</a>
|
|
585
|
+
<a name='L520'></a><a href='#L520'>520</a>
|
|
586
|
+
<a name='L521'></a><a href='#L521'>521</a>
|
|
587
|
+
<a name='L522'></a><a href='#L522'>522</a>
|
|
588
|
+
<a name='L523'></a><a href='#L523'>523</a>
|
|
589
|
+
<a name='L524'></a><a href='#L524'>524</a>
|
|
590
|
+
<a name='L525'></a><a href='#L525'>525</a>
|
|
591
|
+
<a name='L526'></a><a href='#L526'>526</a>
|
|
592
|
+
<a name='L527'></a><a href='#L527'>527</a>
|
|
593
|
+
<a name='L528'></a><a href='#L528'>528</a>
|
|
594
|
+
<a name='L529'></a><a href='#L529'>529</a>
|
|
595
|
+
<a name='L530'></a><a href='#L530'>530</a>
|
|
596
|
+
<a name='L531'></a><a href='#L531'>531</a>
|
|
597
|
+
<a name='L532'></a><a href='#L532'>532</a>
|
|
598
|
+
<a name='L533'></a><a href='#L533'>533</a>
|
|
599
|
+
<a name='L534'></a><a href='#L534'>534</a>
|
|
600
|
+
<a name='L535'></a><a href='#L535'>535</a>
|
|
601
|
+
<a name='L536'></a><a href='#L536'>536</a>
|
|
602
|
+
<a name='L537'></a><a href='#L537'>537</a>
|
|
603
|
+
<a name='L538'></a><a href='#L538'>538</a>
|
|
604
|
+
<a name='L539'></a><a href='#L539'>539</a>
|
|
605
|
+
<a name='L540'></a><a href='#L540'>540</a>
|
|
606
|
+
<a name='L541'></a><a href='#L541'>541</a>
|
|
607
|
+
<a name='L542'></a><a href='#L542'>542</a>
|
|
608
|
+
<a name='L543'></a><a href='#L543'>543</a>
|
|
609
|
+
<a name='L544'></a><a href='#L544'>544</a>
|
|
610
|
+
<a name='L545'></a><a href='#L545'>545</a>
|
|
611
|
+
<a name='L546'></a><a href='#L546'>546</a>
|
|
612
|
+
<a name='L547'></a><a href='#L547'>547</a>
|
|
613
|
+
<a name='L548'></a><a href='#L548'>548</a>
|
|
614
|
+
<a name='L549'></a><a href='#L549'>549</a>
|
|
615
|
+
<a name='L550'></a><a href='#L550'>550</a>
|
|
616
|
+
<a name='L551'></a><a href='#L551'>551</a>
|
|
617
|
+
<a name='L552'></a><a href='#L552'>552</a>
|
|
618
|
+
<a name='L553'></a><a href='#L553'>553</a>
|
|
619
|
+
<a name='L554'></a><a href='#L554'>554</a>
|
|
620
|
+
<a name='L555'></a><a href='#L555'>555</a>
|
|
621
|
+
<a name='L556'></a><a href='#L556'>556</a>
|
|
622
|
+
<a name='L557'></a><a href='#L557'>557</a>
|
|
623
|
+
<a name='L558'></a><a href='#L558'>558</a>
|
|
624
|
+
<a name='L559'></a><a href='#L559'>559</a>
|
|
625
|
+
<a name='L560'></a><a href='#L560'>560</a>
|
|
626
|
+
<a name='L561'></a><a href='#L561'>561</a>
|
|
627
|
+
<a name='L562'></a><a href='#L562'>562</a>
|
|
628
|
+
<a name='L563'></a><a href='#L563'>563</a>
|
|
629
|
+
<a name='L564'></a><a href='#L564'>564</a>
|
|
630
|
+
<a name='L565'></a><a href='#L565'>565</a>
|
|
631
|
+
<a name='L566'></a><a href='#L566'>566</a>
|
|
632
|
+
<a name='L567'></a><a href='#L567'>567</a>
|
|
633
|
+
<a name='L568'></a><a href='#L568'>568</a>
|
|
634
|
+
<a name='L569'></a><a href='#L569'>569</a>
|
|
635
|
+
<a name='L570'></a><a href='#L570'>570</a>
|
|
636
|
+
<a name='L571'></a><a href='#L571'>571</a>
|
|
637
|
+
<a name='L572'></a><a href='#L572'>572</a>
|
|
638
|
+
<a name='L573'></a><a href='#L573'>573</a>
|
|
639
|
+
<a name='L574'></a><a href='#L574'>574</a>
|
|
640
|
+
<a name='L575'></a><a href='#L575'>575</a>
|
|
641
|
+
<a name='L576'></a><a href='#L576'>576</a>
|
|
642
|
+
<a name='L577'></a><a href='#L577'>577</a>
|
|
643
|
+
<a name='L578'></a><a href='#L578'>578</a>
|
|
644
|
+
<a name='L579'></a><a href='#L579'>579</a>
|
|
645
|
+
<a name='L580'></a><a href='#L580'>580</a>
|
|
646
|
+
<a name='L581'></a><a href='#L581'>581</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">15x</span>
|
|
647
|
+
<span class="cline-any cline-yes">15x</span>
|
|
648
|
+
<span class="cline-any cline-neutral"> </span>
|
|
649
|
+
<span class="cline-any cline-neutral"> </span>
|
|
650
|
+
<span class="cline-any cline-neutral"> </span>
|
|
651
|
+
<span class="cline-any cline-neutral"> </span>
|
|
652
|
+
<span class="cline-any cline-neutral"> </span>
|
|
653
|
+
<span class="cline-any cline-yes">15x</span>
|
|
654
|
+
<span class="cline-any cline-yes">15x</span>
|
|
655
|
+
<span class="cline-any cline-yes">15x</span>
|
|
656
|
+
<span class="cline-any cline-yes">15x</span>
|
|
657
|
+
<span class="cline-any cline-yes">15x</span>
|
|
658
|
+
<span class="cline-any cline-yes">15x</span>
|
|
659
|
+
<span class="cline-any cline-yes">15x</span>
|
|
660
|
+
<span class="cline-any cline-yes">15x</span>
|
|
661
|
+
<span class="cline-any cline-yes">15x</span>
|
|
662
|
+
<span class="cline-any cline-yes">15x</span>
|
|
663
|
+
<span class="cline-any cline-yes">15x</span>
|
|
664
|
+
<span class="cline-any cline-yes">15x</span>
|
|
665
|
+
<span class="cline-any cline-yes">15x</span>
|
|
666
|
+
<span class="cline-any cline-yes">15x</span>
|
|
667
|
+
<span class="cline-any cline-neutral"> </span>
|
|
668
|
+
<span class="cline-any cline-neutral"> </span>
|
|
669
|
+
<span class="cline-any cline-neutral"> </span>
|
|
670
|
+
<span class="cline-any cline-neutral"> </span>
|
|
671
|
+
<span class="cline-any cline-neutral"> </span>
|
|
672
|
+
<span class="cline-any cline-neutral"> </span>
|
|
673
|
+
<span class="cline-any cline-neutral"> </span>
|
|
674
|
+
<span class="cline-any cline-neutral"> </span>
|
|
675
|
+
<span class="cline-any cline-no"> </span>
|
|
676
|
+
<span class="cline-any cline-neutral"> </span>
|
|
677
|
+
<span class="cline-any cline-neutral"> </span>
|
|
678
|
+
<span class="cline-any cline-neutral"> </span>
|
|
679
|
+
<span class="cline-any cline-no"> </span>
|
|
680
|
+
<span class="cline-any cline-no"> </span>
|
|
681
|
+
<span class="cline-any cline-no"> </span>
|
|
682
|
+
<span class="cline-any cline-neutral"> </span>
|
|
683
|
+
<span class="cline-any cline-neutral"> </span>
|
|
684
|
+
<span class="cline-any cline-no"> </span>
|
|
685
|
+
<span class="cline-any cline-neutral"> </span>
|
|
686
|
+
<span class="cline-any cline-neutral"> </span>
|
|
687
|
+
<span class="cline-any cline-neutral"> </span>
|
|
688
|
+
<span class="cline-any cline-neutral"> </span>
|
|
689
|
+
<span class="cline-any cline-no"> </span>
|
|
690
|
+
<span class="cline-any cline-neutral"> </span>
|
|
691
|
+
<span class="cline-any cline-neutral"> </span>
|
|
692
|
+
<span class="cline-any cline-neutral"> </span>
|
|
693
|
+
<span class="cline-any cline-no"> </span>
|
|
694
|
+
<span class="cline-any cline-neutral"> </span>
|
|
695
|
+
<span class="cline-any cline-neutral"> </span>
|
|
696
|
+
<span class="cline-any cline-neutral"> </span>
|
|
697
|
+
<span class="cline-any cline-neutral"> </span>
|
|
698
|
+
<span class="cline-any cline-neutral"> </span>
|
|
699
|
+
<span class="cline-any cline-neutral"> </span>
|
|
700
|
+
<span class="cline-any cline-no"> </span>
|
|
701
|
+
<span class="cline-any cline-no"> </span>
|
|
702
|
+
<span class="cline-any cline-neutral"> </span>
|
|
703
|
+
<span class="cline-any cline-neutral"> </span>
|
|
704
|
+
<span class="cline-any cline-neutral"> </span>
|
|
705
|
+
<span class="cline-any cline-no"> </span>
|
|
706
|
+
<span class="cline-any cline-neutral"> </span>
|
|
707
|
+
<span class="cline-any cline-neutral"> </span>
|
|
708
|
+
<span class="cline-any cline-neutral"> </span>
|
|
709
|
+
<span class="cline-any cline-neutral"> </span>
|
|
710
|
+
<span class="cline-any cline-no"> </span>
|
|
711
|
+
<span class="cline-any cline-neutral"> </span>
|
|
712
|
+
<span class="cline-any cline-neutral"> </span>
|
|
713
|
+
<span class="cline-any cline-neutral"> </span>
|
|
714
|
+
<span class="cline-any cline-no"> </span>
|
|
715
|
+
<span class="cline-any cline-no"> </span>
|
|
716
|
+
<span class="cline-any cline-neutral"> </span>
|
|
717
|
+
<span class="cline-any cline-neutral"> </span>
|
|
718
|
+
<span class="cline-any cline-neutral"> </span>
|
|
719
|
+
<span class="cline-any cline-no"> </span>
|
|
720
|
+
<span class="cline-any cline-no"> </span>
|
|
721
|
+
<span class="cline-any cline-neutral"> </span>
|
|
722
|
+
<span class="cline-any cline-neutral"> </span>
|
|
723
|
+
<span class="cline-any cline-neutral"> </span>
|
|
724
|
+
<span class="cline-any cline-no"> </span>
|
|
725
|
+
<span class="cline-any cline-no"> </span>
|
|
726
|
+
<span class="cline-any cline-neutral"> </span>
|
|
727
|
+
<span class="cline-any cline-neutral"> </span>
|
|
728
|
+
<span class="cline-any cline-no"> </span>
|
|
729
|
+
<span class="cline-any cline-neutral"> </span>
|
|
730
|
+
<span class="cline-any cline-neutral"> </span>
|
|
731
|
+
<span class="cline-any cline-neutral"> </span>
|
|
732
|
+
<span class="cline-any cline-yes">15x</span>
|
|
733
|
+
<span class="cline-any cline-yes">25x</span>
|
|
734
|
+
<span class="cline-any cline-yes">25x</span>
|
|
735
|
+
<span class="cline-any cline-neutral"> </span>
|
|
736
|
+
<span class="cline-any cline-neutral"> </span>
|
|
737
|
+
<span class="cline-any cline-neutral"> </span>
|
|
738
|
+
<span class="cline-any cline-yes">25x</span>
|
|
739
|
+
<span class="cline-any cline-yes">25x</span>
|
|
740
|
+
<span class="cline-any cline-yes">25x</span>
|
|
741
|
+
<span class="cline-any cline-yes">25x</span>
|
|
742
|
+
<span class="cline-any cline-yes">25x</span>
|
|
743
|
+
<span class="cline-any cline-yes">25x</span>
|
|
744
|
+
<span class="cline-any cline-yes">25x</span>
|
|
745
|
+
<span class="cline-any cline-yes">25x</span>
|
|
746
|
+
<span class="cline-any cline-yes">25x</span>
|
|
747
|
+
<span class="cline-any cline-yes">25x</span>
|
|
748
|
+
<span class="cline-any cline-yes">25x</span>
|
|
749
|
+
<span class="cline-any cline-yes">25x</span>
|
|
750
|
+
<span class="cline-any cline-yes">25x</span>
|
|
751
|
+
<span class="cline-any cline-neutral"> </span>
|
|
752
|
+
<span class="cline-any cline-yes">25x</span>
|
|
753
|
+
<span class="cline-any cline-neutral"> </span>
|
|
754
|
+
<span class="cline-any cline-yes">25x</span>
|
|
755
|
+
<span class="cline-any cline-neutral"> </span>
|
|
756
|
+
<span class="cline-any cline-yes">25x</span>
|
|
757
|
+
<span class="cline-any cline-neutral"> </span>
|
|
758
|
+
<span class="cline-any cline-neutral"> </span>
|
|
759
|
+
<span class="cline-any cline-neutral"> </span>
|
|
760
|
+
<span class="cline-any cline-neutral"> </span>
|
|
761
|
+
<span class="cline-any cline-neutral"> </span>
|
|
762
|
+
<span class="cline-any cline-neutral"> </span>
|
|
763
|
+
<span class="cline-any cline-neutral"> </span>
|
|
764
|
+
<span class="cline-any cline-neutral"> </span>
|
|
765
|
+
<span class="cline-any cline-neutral"> </span>
|
|
766
|
+
<span class="cline-any cline-neutral"> </span>
|
|
767
|
+
<span class="cline-any cline-neutral"> </span>
|
|
768
|
+
<span class="cline-any cline-neutral"> </span>
|
|
769
|
+
<span class="cline-any cline-neutral"> </span>
|
|
770
|
+
<span class="cline-any cline-neutral"> </span>
|
|
771
|
+
<span class="cline-any cline-neutral"> </span>
|
|
772
|
+
<span class="cline-any cline-neutral"> </span>
|
|
773
|
+
<span class="cline-any cline-neutral"> </span>
|
|
774
|
+
<span class="cline-any cline-neutral"> </span>
|
|
775
|
+
<span class="cline-any cline-neutral"> </span>
|
|
776
|
+
<span class="cline-any cline-neutral"> </span>
|
|
777
|
+
<span class="cline-any cline-neutral"> </span>
|
|
778
|
+
<span class="cline-any cline-neutral"> </span>
|
|
779
|
+
<span class="cline-any cline-neutral"> </span>
|
|
780
|
+
<span class="cline-any cline-neutral"> </span>
|
|
781
|
+
<span class="cline-any cline-no"> </span>
|
|
782
|
+
<span class="cline-any cline-neutral"> </span>
|
|
783
|
+
<span class="cline-any cline-no"> </span>
|
|
784
|
+
<span class="cline-any cline-neutral"> </span>
|
|
785
|
+
<span class="cline-any cline-neutral"> </span>
|
|
786
|
+
<span class="cline-any cline-no"> </span>
|
|
787
|
+
<span class="cline-any cline-neutral"> </span>
|
|
788
|
+
<span class="cline-any cline-no"> </span>
|
|
789
|
+
<span class="cline-any cline-no"> </span>
|
|
790
|
+
<span class="cline-any cline-neutral"> </span>
|
|
791
|
+
<span class="cline-any cline-no"> </span>
|
|
792
|
+
<span class="cline-any cline-no"> </span>
|
|
793
|
+
<span class="cline-any cline-neutral"> </span>
|
|
794
|
+
<span class="cline-any cline-neutral"> </span>
|
|
795
|
+
<span class="cline-any cline-no"> </span>
|
|
796
|
+
<span class="cline-any cline-neutral"> </span>
|
|
797
|
+
<span class="cline-any cline-neutral"> </span>
|
|
798
|
+
<span class="cline-any cline-neutral"> </span>
|
|
799
|
+
<span class="cline-any cline-neutral"> </span>
|
|
800
|
+
<span class="cline-any cline-neutral"> </span>
|
|
801
|
+
<span class="cline-any cline-neutral"> </span>
|
|
802
|
+
<span class="cline-any cline-neutral"> </span>
|
|
803
|
+
<span class="cline-any cline-no"> </span>
|
|
804
|
+
<span class="cline-any cline-neutral"> </span>
|
|
805
|
+
<span class="cline-any cline-no"> </span>
|
|
806
|
+
<span class="cline-any cline-neutral"> </span>
|
|
807
|
+
<span class="cline-any cline-neutral"> </span>
|
|
808
|
+
<span class="cline-any cline-neutral"> </span>
|
|
809
|
+
<span class="cline-any cline-no"> </span>
|
|
810
|
+
<span class="cline-any cline-neutral"> </span>
|
|
811
|
+
<span class="cline-any cline-neutral"> </span>
|
|
812
|
+
<span class="cline-any cline-neutral"> </span>
|
|
813
|
+
<span class="cline-any cline-no"> </span>
|
|
814
|
+
<span class="cline-any cline-no"> </span>
|
|
815
|
+
<span class="cline-any cline-neutral"> </span>
|
|
816
|
+
<span class="cline-any cline-neutral"> </span>
|
|
817
|
+
<span class="cline-any cline-neutral"> </span>
|
|
818
|
+
<span class="cline-any cline-no"> </span>
|
|
819
|
+
<span class="cline-any cline-no"> </span>
|
|
820
|
+
<span class="cline-any cline-neutral"> </span>
|
|
821
|
+
<span class="cline-any cline-neutral"> </span>
|
|
822
|
+
<span class="cline-any cline-no"> </span>
|
|
823
|
+
<span class="cline-any cline-no"> </span>
|
|
824
|
+
<span class="cline-any cline-neutral"> </span>
|
|
825
|
+
<span class="cline-any cline-neutral"> </span>
|
|
826
|
+
<span class="cline-any cline-neutral"> </span>
|
|
827
|
+
<span class="cline-any cline-neutral"> </span>
|
|
828
|
+
<span class="cline-any cline-no"> </span>
|
|
829
|
+
<span class="cline-any cline-neutral"> </span>
|
|
830
|
+
<span class="cline-any cline-neutral"> </span>
|
|
831
|
+
<span class="cline-any cline-neutral"> </span>
|
|
832
|
+
<span class="cline-any cline-neutral"> </span>
|
|
833
|
+
<span class="cline-any cline-neutral"> </span>
|
|
834
|
+
<span class="cline-any cline-neutral"> </span>
|
|
835
|
+
<span class="cline-any cline-neutral"> </span>
|
|
836
|
+
<span class="cline-any cline-neutral"> </span>
|
|
837
|
+
<span class="cline-any cline-yes">22x</span>
|
|
838
|
+
<span class="cline-any cline-neutral"> </span>
|
|
839
|
+
<span class="cline-any cline-neutral"> </span>
|
|
840
|
+
<span class="cline-any cline-neutral"> </span>
|
|
841
|
+
<span class="cline-any cline-neutral"> </span>
|
|
842
|
+
<span class="cline-any cline-neutral"> </span>
|
|
843
|
+
<span class="cline-any cline-yes">22x</span>
|
|
844
|
+
<span class="cline-any cline-yes">22x</span>
|
|
845
|
+
<span class="cline-any cline-yes">36x</span>
|
|
846
|
+
<span class="cline-any cline-yes">13x</span>
|
|
847
|
+
<span class="cline-any cline-neutral"> </span>
|
|
848
|
+
<span class="cline-any cline-neutral"> </span>
|
|
849
|
+
<span class="cline-any cline-neutral"> </span>
|
|
850
|
+
<span class="cline-any cline-neutral"> </span>
|
|
851
|
+
<span class="cline-any cline-yes">22x</span>
|
|
852
|
+
<span class="cline-any cline-yes">22x</span>
|
|
853
|
+
<span class="cline-any cline-yes">11x</span>
|
|
854
|
+
<span class="cline-any cline-neutral"> </span>
|
|
855
|
+
<span class="cline-any cline-neutral"> </span>
|
|
856
|
+
<span class="cline-any cline-neutral"> </span>
|
|
857
|
+
<span class="cline-any cline-yes">11x</span>
|
|
858
|
+
<span class="cline-any cline-yes">15x</span>
|
|
859
|
+
<span class="cline-any cline-yes">15x</span>
|
|
860
|
+
<span class="cline-any cline-yes">15x</span>
|
|
861
|
+
<span class="cline-any cline-neutral"> </span>
|
|
862
|
+
<span class="cline-any cline-neutral"> </span>
|
|
863
|
+
<span class="cline-any cline-neutral"> </span>
|
|
864
|
+
<span class="cline-any cline-yes">22x</span>
|
|
865
|
+
<span class="cline-any cline-yes">22x</span>
|
|
866
|
+
<span class="cline-any cline-yes">36x</span>
|
|
867
|
+
<span class="cline-any cline-yes">18x</span>
|
|
868
|
+
<span class="cline-any cline-neutral"> </span>
|
|
869
|
+
<span class="cline-any cline-neutral"> </span>
|
|
870
|
+
<span class="cline-any cline-neutral"> </span>
|
|
871
|
+
<span class="cline-any cline-neutral"> </span>
|
|
872
|
+
<span class="cline-any cline-yes">18x</span>
|
|
873
|
+
<span class="cline-any cline-yes">18x</span>
|
|
874
|
+
<span class="cline-any cline-neutral"> </span>
|
|
875
|
+
<span class="cline-any cline-neutral"> </span>
|
|
876
|
+
<span class="cline-any cline-neutral"> </span>
|
|
877
|
+
<span class="cline-any cline-neutral"> </span>
|
|
878
|
+
<span class="cline-any cline-neutral"> </span>
|
|
879
|
+
<span class="cline-any cline-neutral"> </span>
|
|
880
|
+
<span class="cline-any cline-yes">18x</span>
|
|
881
|
+
<span class="cline-any cline-yes">1x</span>
|
|
882
|
+
<span class="cline-any cline-neutral"> </span>
|
|
883
|
+
<span class="cline-any cline-neutral"> </span>
|
|
884
|
+
<span class="cline-any cline-neutral"> </span>
|
|
885
|
+
<span class="cline-any cline-yes">18x</span>
|
|
886
|
+
<span class="cline-any cline-yes">13x</span>
|
|
887
|
+
<span class="cline-any cline-yes">13x</span>
|
|
888
|
+
<span class="cline-any cline-neutral"> </span>
|
|
889
|
+
<span class="cline-any cline-yes">1x</span>
|
|
890
|
+
<span class="cline-any cline-neutral"> </span>
|
|
891
|
+
<span class="cline-any cline-neutral"> </span>
|
|
892
|
+
<span class="cline-any cline-neutral"> </span>
|
|
893
|
+
<span class="cline-any cline-neutral"> </span>
|
|
894
|
+
<span class="cline-any cline-yes">18x</span>
|
|
895
|
+
<span class="cline-any cline-neutral"> </span>
|
|
896
|
+
<span class="cline-any cline-neutral"> </span>
|
|
897
|
+
<span class="cline-any cline-yes">18x</span>
|
|
898
|
+
<span class="cline-any cline-yes">12x</span>
|
|
899
|
+
<span class="cline-any cline-neutral"> </span>
|
|
900
|
+
<span class="cline-any cline-neutral"> </span>
|
|
901
|
+
<span class="cline-any cline-yes">12x</span>
|
|
902
|
+
<span class="cline-any cline-yes">12x</span>
|
|
903
|
+
<span class="cline-any cline-yes">15x</span>
|
|
904
|
+
<span class="cline-any cline-yes">14x</span>
|
|
905
|
+
<span class="cline-any cline-neutral"> </span>
|
|
906
|
+
<span class="cline-any cline-neutral"> </span>
|
|
907
|
+
<span class="cline-any cline-neutral"> </span>
|
|
908
|
+
<span class="cline-any cline-neutral"> </span>
|
|
909
|
+
<span class="cline-any cline-neutral"> </span>
|
|
910
|
+
<span class="cline-any cline-yes">12x</span>
|
|
911
|
+
<span class="cline-any cline-yes">16x</span>
|
|
912
|
+
<span class="cline-any cline-yes">16x</span>
|
|
913
|
+
<span class="cline-any cline-neutral"> </span>
|
|
914
|
+
<span class="cline-any cline-yes">14x</span>
|
|
915
|
+
<span class="cline-any cline-yes">14x</span>
|
|
916
|
+
<span class="cline-any cline-neutral"> </span>
|
|
917
|
+
<span class="cline-any cline-neutral"> </span>
|
|
918
|
+
<span class="cline-any cline-yes">14x</span>
|
|
919
|
+
<span class="cline-any cline-yes">2x</span>
|
|
920
|
+
<span class="cline-any cline-neutral"> </span>
|
|
921
|
+
<span class="cline-any cline-neutral"> </span>
|
|
922
|
+
<span class="cline-any cline-yes">2x</span>
|
|
923
|
+
<span class="cline-any cline-neutral"> </span>
|
|
924
|
+
<span class="cline-any cline-neutral"> </span>
|
|
925
|
+
<span class="cline-any cline-neutral"> </span>
|
|
926
|
+
<span class="cline-any cline-neutral"> </span>
|
|
927
|
+
<span class="cline-any cline-yes">12x</span>
|
|
928
|
+
<span class="cline-any cline-neutral"> </span>
|
|
929
|
+
<span class="cline-any cline-yes">1x</span>
|
|
930
|
+
<span class="cline-any cline-yes">11x</span>
|
|
931
|
+
<span class="cline-any cline-neutral"> </span>
|
|
932
|
+
<span class="cline-any cline-yes">1x</span>
|
|
933
|
+
<span class="cline-any cline-neutral"> </span>
|
|
934
|
+
<span class="cline-any cline-neutral"> </span>
|
|
935
|
+
<span class="cline-any cline-yes">10x</span>
|
|
936
|
+
<span class="cline-any cline-neutral"> </span>
|
|
937
|
+
<span class="cline-any cline-neutral"> </span>
|
|
938
|
+
<span class="cline-any cline-yes">12x</span>
|
|
939
|
+
<span class="cline-any cline-neutral"> </span>
|
|
940
|
+
<span class="cline-any cline-neutral"> </span>
|
|
941
|
+
<span class="cline-any cline-neutral"> </span>
|
|
942
|
+
<span class="cline-any cline-neutral"> </span>
|
|
943
|
+
<span class="cline-any cline-neutral"> </span>
|
|
944
|
+
<span class="cline-any cline-neutral"> </span>
|
|
945
|
+
<span class="cline-any cline-neutral"> </span>
|
|
946
|
+
<span class="cline-any cline-neutral"> </span>
|
|
947
|
+
<span class="cline-any cline-neutral"> </span>
|
|
948
|
+
<span class="cline-any cline-neutral"> </span>
|
|
949
|
+
<span class="cline-any cline-yes">22x</span>
|
|
950
|
+
<span class="cline-any cline-neutral"> </span>
|
|
951
|
+
<span class="cline-any cline-neutral"> </span>
|
|
952
|
+
<span class="cline-any cline-neutral"> </span>
|
|
953
|
+
<span class="cline-any cline-neutral"> </span>
|
|
954
|
+
<span class="cline-any cline-yes">22x</span>
|
|
955
|
+
<span class="cline-any cline-neutral"> </span>
|
|
956
|
+
<span class="cline-any cline-neutral"> </span>
|
|
957
|
+
<span class="cline-any cline-neutral"> </span>
|
|
958
|
+
<span class="cline-any cline-neutral"> </span>
|
|
959
|
+
<span class="cline-any cline-neutral"> </span>
|
|
960
|
+
<span class="cline-any cline-neutral"> </span>
|
|
961
|
+
<span class="cline-any cline-neutral"> </span>
|
|
962
|
+
<span class="cline-any cline-neutral"> </span>
|
|
963
|
+
<span class="cline-any cline-yes">3x</span>
|
|
964
|
+
<span class="cline-any cline-neutral"> </span>
|
|
965
|
+
<span class="cline-any cline-yes">3x</span>
|
|
966
|
+
<span class="cline-any cline-yes">3x</span>
|
|
967
|
+
<span class="cline-any cline-neutral"> </span>
|
|
968
|
+
<span class="cline-any cline-neutral"> </span>
|
|
969
|
+
<span class="cline-any cline-neutral"> </span>
|
|
970
|
+
<span class="cline-any cline-yes">3x</span>
|
|
971
|
+
<span class="cline-any cline-yes">3x</span>
|
|
972
|
+
<span class="cline-any cline-yes">3x</span>
|
|
973
|
+
<span class="cline-any cline-neutral"> </span>
|
|
974
|
+
<span class="cline-any cline-neutral"> </span>
|
|
975
|
+
<span class="cline-any cline-no"> </span>
|
|
976
|
+
<span class="cline-any cline-no"> </span>
|
|
977
|
+
<span class="cline-any cline-neutral"> </span>
|
|
978
|
+
<span class="cline-any cline-no"> </span>
|
|
979
|
+
<span class="cline-any cline-neutral"> </span>
|
|
980
|
+
<span class="cline-any cline-neutral"> </span>
|
|
981
|
+
<span class="cline-any cline-no"> </span>
|
|
982
|
+
<span class="cline-any cline-no"> </span>
|
|
983
|
+
<span class="cline-any cline-no"> </span>
|
|
984
|
+
<span class="cline-any cline-no"> </span>
|
|
985
|
+
<span class="cline-any cline-neutral"> </span>
|
|
986
|
+
<span class="cline-any cline-no"> </span>
|
|
987
|
+
<span class="cline-any cline-no"> </span>
|
|
988
|
+
<span class="cline-any cline-no"> </span>
|
|
989
|
+
<span class="cline-any cline-neutral"> </span>
|
|
990
|
+
<span class="cline-any cline-no"> </span>
|
|
991
|
+
<span class="cline-any cline-neutral"> </span>
|
|
992
|
+
<span class="cline-any cline-no"> </span>
|
|
993
|
+
<span class="cline-any cline-neutral"> </span>
|
|
994
|
+
<span class="cline-any cline-neutral"> </span>
|
|
995
|
+
<span class="cline-any cline-neutral"> </span>
|
|
996
|
+
<span class="cline-any cline-neutral"> </span>
|
|
997
|
+
<span class="cline-any cline-neutral"> </span>
|
|
998
|
+
<span class="cline-any cline-no"> </span>
|
|
999
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1000
|
+
<span class="cline-any cline-no"> </span>
|
|
1001
|
+
<span class="cline-any cline-no"> </span>
|
|
1002
|
+
<span class="cline-any cline-no"> </span>
|
|
1003
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1004
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1005
|
+
<span class="cline-any cline-no"> </span>
|
|
1006
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1007
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1008
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1009
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1010
|
+
<span class="cline-any cline-no"> </span>
|
|
1011
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1012
|
+
<span class="cline-any cline-no"> </span>
|
|
1013
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1014
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1015
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1016
|
+
<span class="cline-any cline-no"> </span>
|
|
1017
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1018
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1019
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1020
|
+
<span class="cline-any cline-no"> </span>
|
|
1021
|
+
<span class="cline-any cline-no"> </span>
|
|
1022
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1023
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1024
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1025
|
+
<span class="cline-any cline-no"> </span>
|
|
1026
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1027
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1028
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1029
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1030
|
+
<span class="cline-any cline-no"> </span>
|
|
1031
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1032
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1033
|
+
<span class="cline-any cline-no"> </span>
|
|
1034
|
+
<span class="cline-any cline-no"> </span>
|
|
1035
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1036
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1037
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1038
|
+
<span class="cline-any cline-no"> </span>
|
|
1039
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1040
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1041
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1042
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1043
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1044
|
+
<span class="cline-any cline-no"> </span>
|
|
1045
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1046
|
+
<span class="cline-any cline-no"> </span>
|
|
1047
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1048
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1049
|
+
<span class="cline-any cline-no"> </span>
|
|
1050
|
+
<span class="cline-any cline-no"> </span>
|
|
1051
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1052
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1053
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1054
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1055
|
+
<span class="cline-any cline-no"> </span>
|
|
1056
|
+
<span class="cline-any cline-no"> </span>
|
|
1057
|
+
<span class="cline-any cline-no"> </span>
|
|
1058
|
+
<span class="cline-any cline-no"> </span>
|
|
1059
|
+
<span class="cline-any cline-no"> </span>
|
|
1060
|
+
<span class="cline-any cline-no"> </span>
|
|
1061
|
+
<span class="cline-any cline-no"> </span>
|
|
1062
|
+
<span class="cline-any cline-no"> </span>
|
|
1063
|
+
<span class="cline-any cline-no"> </span>
|
|
1064
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1065
|
+
<span class="cline-any cline-no"> </span>
|
|
1066
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1067
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1068
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1069
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1070
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1071
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1072
|
+
<span class="cline-any cline-no"> </span>
|
|
1073
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1074
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1075
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1076
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1077
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1078
|
+
<span class="cline-any cline-no"> </span>
|
|
1079
|
+
<span class="cline-any cline-no"> </span>
|
|
1080
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1081
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1082
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1083
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1084
|
+
<span class="cline-any cline-no"> </span>
|
|
1085
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1086
|
+
<span class="cline-any cline-no"> </span>
|
|
1087
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1088
|
+
<span class="cline-any cline-no"> </span>
|
|
1089
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1090
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1091
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1092
|
+
<span class="cline-any cline-no"> </span>
|
|
1093
|
+
<span class="cline-any cline-no"> </span>
|
|
1094
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1095
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1096
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1097
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1098
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1099
|
+
<span class="cline-any cline-no"> </span>
|
|
1100
|
+
<span class="cline-any cline-no"> </span>
|
|
1101
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1102
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1103
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1104
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1105
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1106
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1107
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1108
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1109
|
+
<span class="cline-any cline-no"> </span>
|
|
1110
|
+
<span class="cline-any cline-no"> </span>
|
|
1111
|
+
<span class="cline-any cline-no"> </span>
|
|
1112
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1113
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1114
|
+
<span class="cline-any cline-no"> </span>
|
|
1115
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1116
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1117
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1118
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1119
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1120
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1121
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1122
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1123
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1124
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1125
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1126
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1127
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1128
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1129
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1130
|
+
<span class="cline-any cline-no"> </span>
|
|
1131
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1132
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1133
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1134
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1135
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1136
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1137
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1138
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1139
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1140
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1141
|
+
<span class="cline-any cline-no"> </span>
|
|
1142
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1143
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1144
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1145
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1146
|
+
<span class="cline-any cline-no"> </span>
|
|
1147
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1148
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1149
|
+
<span class="cline-any cline-no"> </span>
|
|
1150
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1151
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1152
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1153
|
+
<span class="cline-any cline-no"> </span>
|
|
1154
|
+
<span class="cline-any cline-no"> </span>
|
|
1155
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1156
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1157
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1158
|
+
<span class="cline-any cline-no"> </span>
|
|
1159
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1160
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1161
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1162
|
+
<span class="cline-any cline-no"> </span>
|
|
1163
|
+
<span class="cline-any cline-no"> </span>
|
|
1164
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1165
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1166
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1167
|
+
<span class="cline-any cline-no"> </span>
|
|
1168
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1169
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1170
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1171
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1172
|
+
<span class="cline-any cline-no"> </span>
|
|
1173
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1174
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1175
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1176
|
+
<span class="cline-any cline-no"> </span>
|
|
1177
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1178
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1179
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1180
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1181
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1182
|
+
<span class="cline-any cline-no"> </span>
|
|
1183
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1184
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1185
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1186
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1187
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1188
|
+
<span class="cline-any cline-no"> </span>
|
|
1189
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1190
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1191
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1192
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1193
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1194
|
+
<span class="cline-any cline-no"> </span>
|
|
1195
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1196
|
+
<span class="cline-any cline-no"> </span>
|
|
1197
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1198
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1199
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1200
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1201
|
+
<span class="cline-any cline-no"> </span>
|
|
1202
|
+
<span class="cline-any cline-no"> </span>
|
|
1203
|
+
<span class="cline-any cline-no"> </span>
|
|
1204
|
+
<span class="cline-any cline-no"> </span>
|
|
1205
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1206
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1207
|
+
<span class="cline-any cline-no"> </span>
|
|
1208
|
+
<span class="cline-any cline-no"> </span>
|
|
1209
|
+
<span class="cline-any cline-no"> </span>
|
|
1210
|
+
<span class="cline-any cline-no"> </span>
|
|
1211
|
+
<span class="cline-any cline-no"> </span>
|
|
1212
|
+
<span class="cline-any cline-no"> </span>
|
|
1213
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1214
|
+
<span class="cline-any cline-no"> </span>
|
|
1215
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1216
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1217
|
+
<span class="cline-any cline-no"> </span>
|
|
1218
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1219
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1220
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1221
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1222
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1223
|
+
<span class="cline-any cline-no"> </span>
|
|
1224
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1225
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1226
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { Injectable, Logger, Inject, forwardRef } from '@nestjs/common';
|
|
1227
|
+
import {
|
|
1228
|
+
LlmProvider,
|
|
1229
|
+
LLM_PROVIDER,
|
|
1230
|
+
LlmContent,
|
|
1231
|
+
LlmGenerationConfig,
|
|
1232
|
+
} from '../llm-provider/llm-provider.interface';
|
|
1233
|
+
import { EventsGateway } from '../events/events.gateway';
|
|
1234
|
+
import { LlmResponsesService } from '../llm-responses/llm-responses.service';
|
|
1235
|
+
import { ApplicationStateService } from '../application-state/application-state.service';
|
|
1236
|
+
import { MessageBusService } from '../message-bus/message-bus.service';
|
|
1237
|
+
import { SessionsService } from '../sessions/sessions.service';
|
|
1238
|
+
import { SystemPromptsService } from '../system-prompts/system-prompts.service';
|
|
1239
|
+
import { ToolSchemaService } from '../llm-orchestration/tool-schema.service';
|
|
1240
|
+
import { HistoryCompressionService } from '../llm-orchestration/history-compression.service';
|
|
1241
|
+
import { SubAgentsService } from '../sub-agents/sub-agents.service';
|
|
1242
|
+
import { InjectRepository } from '@nestjs/typeorm';
|
|
1243
|
+
import { In, Repository } from 'typeorm';
|
|
1244
|
+
import { SessionInput } from '../core-entities/session-input.entity';
|
|
1245
|
+
import { AIAction } from '../core-entities/ai-action.entity';
|
|
1246
|
+
import { toShortId } from '../utils';
|
|
1247
|
+
|
|
1248
|
+
interface ActiveRequestState {
|
|
1249
|
+
abortController: AbortController;
|
|
1250
|
+
pendingInputId: string;
|
|
1251
|
+
}
|
|
1252
|
+
|
|
1253
|
+
// Retry utility functions
|
|
1254
|
+
function <span class="fstat-no" title="function not covered" >delay(</span>ms: number): Promise<void> {
|
|
1255
|
+
<span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve) => <span class="cstat-no" title="statement not covered" >setTimeout(resolve, ms))</span>;</span>
|
|
1256
|
+
}
|
|
1257
|
+
|
|
1258
|
+
function <span class="fstat-no" title="function not covered" >isRetryableError(</span>error: any, _retryAttempt: number): boolean {
|
|
1259
|
+
const errorMessage = <span class="cstat-no" title="statement not covered" >error.message?.toLowerCase() || '';</span>
|
|
1260
|
+
const errorCode = <span class="cstat-no" title="statement not covered" >error.code;</span>
|
|
1261
|
+
const status = <span class="cstat-no" title="statement not covered" >error.status;</span>
|
|
1262
|
+
|
|
1263
|
+
// Never retry on abort
|
|
1264
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
|
|
1265
|
+
error.name === 'AbortError' ||
|
|
1266
|
+
error.code === 'ABORT_ERR' ||
|
|
1267
|
+
error.message === 'This operation was aborted'
|
|
1268
|
+
) {
|
|
1269
|
+
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
1270
|
+
}
|
|
1271
|
+
|
|
1272
|
+
// Retry on network errors
|
|
1273
|
+
const networkErrors = <span class="cstat-no" title="statement not covered" >[</span>
|
|
1274
|
+
'ECONNRESET',
|
|
1275
|
+
'ETIMEDOUT',
|
|
1276
|
+
'ENOTFOUND',
|
|
1277
|
+
'ENETUNREACH',
|
|
1278
|
+
'ECONNREFUSED',
|
|
1279
|
+
];
|
|
1280
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (errorCode && networkErrors.includes(errorCode)) {</span>
|
|
1281
|
+
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1284
|
+
// Retry on rate limiting
|
|
1285
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
|
|
1286
|
+
status === 429 ||
|
|
1287
|
+
errorMessage.includes('rate limit') ||
|
|
1288
|
+
errorMessage.includes('too many requests')
|
|
1289
|
+
) {
|
|
1290
|
+
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
1291
|
+
}
|
|
1292
|
+
|
|
1293
|
+
// Retry on server errors
|
|
1294
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (status >= 500 && status < 600) {</span>
|
|
1295
|
+
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
1296
|
+
}
|
|
1297
|
+
|
|
1298
|
+
// Retry on empty response errors
|
|
1299
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (errorMessage.includes('empty response')) {</span>
|
|
1300
|
+
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
1301
|
+
}
|
|
1302
|
+
|
|
1303
|
+
// Retry on timeout
|
|
1304
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (errorMessage.includes('timeout')) {</span>
|
|
1305
|
+
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
1306
|
+
}
|
|
1307
|
+
|
|
1308
|
+
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
1309
|
+
}
|
|
1310
|
+
|
|
1311
|
+
@Injectable()
|
|
1312
|
+
export class ChatService {
|
|
1313
|
+
private readonly logger = new Logger(ChatService.name);
|
|
1314
|
+
private activeRequests = new Map<string, ActiveRequestState>();
|
|
1315
|
+
|
|
1316
|
+
constructor(
|
|
1317
|
+
@Inject(LLM_PROVIDER)
|
|
1318
|
+
private readonly llmProvider: LlmProvider,
|
|
1319
|
+
private readonly eventsGateway: EventsGateway,
|
|
1320
|
+
@Inject(forwardRef(() => LlmResponsesService))
|
|
1321
|
+
private readonly llmResponsesService: LlmResponsesService,
|
|
1322
|
+
private readonly applicationStateService: ApplicationStateService,
|
|
1323
|
+
private readonly messageBusService: MessageBusService,
|
|
1324
|
+
@Inject(forwardRef(() => SessionsService))
|
|
1325
|
+
private readonly sessionsService: SessionsService,
|
|
1326
|
+
@Inject(forwardRef(() => SystemPromptsService))
|
|
1327
|
+
private readonly systemPromptsService: SystemPromptsService,
|
|
1328
|
+
private readonly toolSchemaService: ToolSchemaService,
|
|
1329
|
+
private readonly historyCompressionService: HistoryCompressionService,
|
|
1330
|
+
private readonly subAgentsService: SubAgentsService,
|
|
1331
|
+
@Inject('ACTION_HANDLER_REGISTRY')
|
|
1332
|
+
private readonly handlerRegistry: Map<string, any>,
|
|
1333
|
+
@InjectRepository(SessionInput)
|
|
1334
|
+
private readonly sessionInputsRepository: Repository<SessionInput>,
|
|
1335
|
+
@InjectRepository(AIAction)
|
|
1336
|
+
private readonly aiActionsRepository: Repository<AIAction>,
|
|
1337
|
+
) {}
|
|
1338
|
+
|
|
1339
|
+
/**
|
|
1340
|
+
* Helper to call LLM with exponential backoff retry.
|
|
1341
|
+
*/
|
|
1342
|
+
private <span class="fstat-no" title="function not covered" >async </span>callWithRetry(
|
|
1343
|
+
request: {
|
|
1344
|
+
prompt: string;
|
|
1345
|
+
systemInstruction: string;
|
|
1346
|
+
history: LlmContent[];
|
|
1347
|
+
modelId?: string;
|
|
1348
|
+
generationConfig?: LlmGenerationConfig;
|
|
1349
|
+
tools?: any[];
|
|
1350
|
+
onToken?: (
|
|
1351
|
+
token: string,
|
|
1352
|
+
isFirst: boolean,
|
|
1353
|
+
thoughtChunk?: string,
|
|
1354
|
+
) => void;
|
|
1355
|
+
abortController: AbortController;
|
|
1356
|
+
},
|
|
1357
|
+
sessionId: string,
|
|
1358
|
+
pendingInputId: string,
|
|
1359
|
+
): Promise<any> {
|
|
1360
|
+
const retryEnabled =
|
|
1361
|
+
<span class="cstat-no" title="statement not covered" > await this.applicationStateService.getLlmRetryEnabled();</span>
|
|
1362
|
+
const maxAttempts =
|
|
1363
|
+
<span class="cstat-no" title="statement not covered" > await this.applicationStateService.getLlmRetryMaxAttempts();</span>
|
|
1364
|
+
|
|
1365
|
+
let lastError: Error | undefined;
|
|
1366
|
+
let attempt = <span class="cstat-no" title="statement not covered" >1;</span>
|
|
1367
|
+
|
|
1368
|
+
<span class="cstat-no" title="statement not covered" > while (attempt <= maxAttempts) {</span>
|
|
1369
|
+
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
1370
|
+
// Broadcast retry attempt if not first
|
|
1371
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (attempt > 1) {</span>
|
|
1372
|
+
<span class="cstat-no" title="statement not covered" > this.logger.log(</span>
|
|
1373
|
+
`Retry attempt ${attempt}/${maxAttempts} for session ${sessionId}`,
|
|
1374
|
+
);
|
|
1375
|
+
<span class="cstat-no" title="statement not covered" > this.eventsGateway.sendToAll('llm-retry-attempt', {</span>
|
|
1376
|
+
sessionInputId: pendingInputId,
|
|
1377
|
+
sessionId,
|
|
1378
|
+
attempt,
|
|
1379
|
+
maxAttempts,
|
|
1380
|
+
});
|
|
1381
|
+
}
|
|
1382
|
+
|
|
1383
|
+
<span class="cstat-no" title="statement not covered" > return await this.llmProvider.generateContent(request);</span>
|
|
1384
|
+
} catch (error) {
|
|
1385
|
+
<span class="cstat-no" title="statement not covered" > lastError = error as Error;</span>
|
|
1386
|
+
|
|
1387
|
+
// Check if we should retry
|
|
1388
|
+
const shouldRetry =
|
|
1389
|
+
<span class="cstat-no" title="statement not covered" > retryEnabled &&</span>
|
|
1390
|
+
attempt < maxAttempts &&
|
|
1391
|
+
isRetryableError(error, attempt);
|
|
1392
|
+
|
|
1393
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!shouldRetry) {</span>
|
|
1394
|
+
<span class="cstat-no" title="statement not covered" > throw error;</span>
|
|
1395
|
+
}
|
|
1396
|
+
|
|
1397
|
+
// Exponential backoff: 1s, 2s, 4s...
|
|
1398
|
+
const backoffMs = <span class="cstat-no" title="statement not covered" >Math.pow(2, attempt - 1) * 1000;</span>
|
|
1399
|
+
<span class="cstat-no" title="statement not covered" > this.logger.log(</span>
|
|
1400
|
+
`LLM call failed (attempt ${attempt}/${maxAttempts}): ${error.message}. Retrying in ${backoffMs}ms...`,
|
|
1401
|
+
);
|
|
1402
|
+
<span class="cstat-no" title="statement not covered" > await delay(backoffMs);</span>
|
|
1403
|
+
<span class="cstat-no" title="statement not covered" > attempt++;</span>
|
|
1404
|
+
}
|
|
1405
|
+
}
|
|
1406
|
+
|
|
1407
|
+
// Should not reach here, but throw last error if we do
|
|
1408
|
+
<span class="cstat-no" title="statement not covered" > throw lastError;</span>
|
|
1409
|
+
}
|
|
1410
|
+
|
|
1411
|
+
/**
|
|
1412
|
+
* Reconstructs chat history from
|
|
1413
|
+
* database for a given session.
|
|
1414
|
+
* Orders by sequence_number to ensure correct conversation flow.
|
|
1415
|
+
*/
|
|
1416
|
+
private async getHistory(sessionId: string): Promise<LlmContent[]> {
|
|
1417
|
+
const inputs = await this.sessionInputsRepository.find({
|
|
1418
|
+
where: { session_id: sessionId, is_discarded: false },
|
|
1419
|
+
order: { sequence_number: 'ASC' },
|
|
1420
|
+
});
|
|
1421
|
+
|
|
1422
|
+
// Pre-identify model inputs that have tool_calls so we can batch-load their actions
|
|
1423
|
+
const modelInputIdsWithToolCalls: string[] = [];
|
|
1424
|
+
for (const input of inputs) {
|
|
1425
|
+
if (input.role === 'model' && input.tool_calls) {
|
|
1426
|
+
modelInputIdsWithToolCalls.push(input.id);
|
|
1427
|
+
}
|
|
1428
|
+
}
|
|
1429
|
+
|
|
1430
|
+
// Single batch query for ALL AIActions with executionLogs for all model turns
|
|
1431
|
+
const actionsByInputId = new Map<string, AIAction[]>();
|
|
1432
|
+
if (modelInputIdsWithToolCalls.length > 0) {
|
|
1433
|
+
const allActions = await this.aiActionsRepository.find({
|
|
1434
|
+
where: { input_id: In(modelInputIdsWithToolCalls) },
|
|
1435
|
+
relations: ['executionLogs'],
|
|
1436
|
+
});
|
|
1437
|
+
for (const action of allActions) {
|
|
1438
|
+
const existing = actionsByInputId.get(action.input_id) || [];
|
|
1439
|
+
existing.push(action);
|
|
1440
|
+
actionsByInputId.set(action.input_id, existing);
|
|
1441
|
+
}
|
|
1442
|
+
}
|
|
1443
|
+
|
|
1444
|
+
const history: LlmContent[] = [];
|
|
1445
|
+
for (const input of inputs) {
|
|
1446
|
+
if (input.role === 'user' && input.generated_context_string) {
|
|
1447
|
+
history.push({
|
|
1448
|
+
role: 'user',
|
|
1449
|
+
parts: [{ text: input.generated_context_string }],
|
|
1450
|
+
shortId: toShortId(input.id),
|
|
1451
|
+
});
|
|
1452
|
+
} else if (input.role === 'model') {
|
|
1453
|
+
const content: LlmContent = {
|
|
1454
|
+
role: 'model',
|
|
1455
|
+
parts: [{ text: input.raw_llm_response || '' }],
|
|
1456
|
+
shortId: toShortId(input.id),
|
|
1457
|
+
};
|
|
1458
|
+
|
|
1459
|
+
// Attach thoughts if they exist in database
|
|
1460
|
+
if (input.thoughts) {
|
|
1461
|
+
content.thoughts = input.thoughts;
|
|
1462
|
+
}
|
|
1463
|
+
|
|
1464
|
+
// Attach tool calls if they exist in database
|
|
1465
|
+
if (input.tool_calls) {
|
|
1466
|
+
try {
|
|
1467
|
+
content.tool_calls = JSON.parse(input.tool_calls);
|
|
1468
|
+
} catch (e) {
|
|
1469
|
+
this.logger.error(
|
|
1470
|
+
`Failed to parse tool_calls for input ${input.id}: ${e.message}`,
|
|
1471
|
+
);
|
|
1472
|
+
}
|
|
1473
|
+
}
|
|
1474
|
+
history.push(content);
|
|
1475
|
+
|
|
1476
|
+
// If this turn had tool calls, add tool results from pre-loaded batch
|
|
1477
|
+
if (content.tool_calls && content.tool_calls.length > 0) {
|
|
1478
|
+
const toolActions = actionsByInputId.get(input.id) || [];
|
|
1479
|
+
|
|
1480
|
+
// Build a map of tool_call_id -> action for O(1) lookup
|
|
1481
|
+
const actionsByToolCallId = new Map<string, AIAction>();
|
|
1482
|
+
for (const action of toolActions) {
|
|
1483
|
+
if (action.tool_call_id) {
|
|
1484
|
+
actionsByToolCallId.set(action.tool_call_id, action);
|
|
1485
|
+
}
|
|
1486
|
+
}
|
|
1487
|
+
|
|
1488
|
+
// Iterate over tool_calls in order and add matching tool results
|
|
1489
|
+
// This ensures tool results are in the same order as tool_calls (critical for Ollama)
|
|
1490
|
+
for (const toolCall of content.tool_calls) {
|
|
1491
|
+
const action = actionsByToolCallId.get(toolCall.id);
|
|
1492
|
+
if (!action) continue;
|
|
1493
|
+
|
|
1494
|
+
const output = action.executionLogs?.[0]?.output || '';
|
|
1495
|
+
const errorMessage = action.executionLogs?.[0]?.error_message || '';
|
|
1496
|
+
|
|
1497
|
+
// Skip if no output and no error - nothing to report
|
|
1498
|
+
if (!output && !errorMessage) {
|
|
1499
|
+
this.logger.warn(
|
|
1500
|
+
`Tool ${action.action_type} (tool_call_id: ${action.tool_call_id}) has no output or error. Skipping tool result.`,
|
|
1501
|
+
);
|
|
1502
|
+
continue;
|
|
1503
|
+
}
|
|
1504
|
+
|
|
1505
|
+
// Determine what to send as tool result
|
|
1506
|
+
let toolResult: string;
|
|
1507
|
+
if (output && errorMessage) {
|
|
1508
|
+
// Tool has both output and error
|
|
1509
|
+
toolResult = `${output}\n\nError: ${errorMessage}`;
|
|
1510
|
+
} else if (errorMessage) {
|
|
1511
|
+
// Tool failed with error only
|
|
1512
|
+
toolResult = `Error: ${errorMessage}`;
|
|
1513
|
+
} else {
|
|
1514
|
+
// Tool has output only
|
|
1515
|
+
toolResult = output;
|
|
1516
|
+
}
|
|
1517
|
+
|
|
1518
|
+
history.push({
|
|
1519
|
+
role: 'tool',
|
|
1520
|
+
tool_call_id: action.tool_call_id,
|
|
1521
|
+
tool_name: action.action_type,
|
|
1522
|
+
parts: [{ text: toolResult }],
|
|
1523
|
+
});
|
|
1524
|
+
}
|
|
1525
|
+
}
|
|
1526
|
+
}
|
|
1527
|
+
}
|
|
1528
|
+
|
|
1529
|
+
this.logger.log(
|
|
1530
|
+
`Reconstructed history for session ${sessionId} with ${history.length} turns.`,
|
|
1531
|
+
);
|
|
1532
|
+
|
|
1533
|
+
// Compress history to redact older request_context results
|
|
1534
|
+
return this.historyCompressionService.compress(history);
|
|
1535
|
+
}
|
|
1536
|
+
|
|
1537
|
+
public async sendMessage(
|
|
1538
|
+
sessionId: string,
|
|
1539
|
+
message: string,
|
|
1540
|
+
isManual: boolean,
|
|
1541
|
+
existingInputId?: string,
|
|
1542
|
+
): Promise<void> {
|
|
1543
|
+
const history = await this.getHistory(sessionId);
|
|
1544
|
+
|
|
1545
|
+
if (isManual) {
|
|
1546
|
+
this.messageBusService.submit({
|
|
1547
|
+
event: 'llm-input-generated',
|
|
1548
|
+
data: { prompt: message },
|
|
1549
|
+
});
|
|
1550
|
+
this.eventsGateway.sendToAll('llm-input-generated', { prompt: message });
|
|
1551
|
+
this.eventsGateway.sendToAll('refresh-ui', { sessionId });
|
|
1552
|
+
return;
|
|
1553
|
+
}
|
|
1554
|
+
|
|
1555
|
+
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
1556
|
+
const session = <span class="cstat-no" title="statement not covered" >await this.sessionsService.findOne(sessionId);</span>
|
|
1557
|
+
const isStreaming =
|
|
1558
|
+
<span class="cstat-no" title="statement not covered" > await this.applicationStateService.getStreamingEnabled();</span>
|
|
1559
|
+
|
|
1560
|
+
// Check if this is a sub-agent session
|
|
1561
|
+
const isSubAgentSession = <span class="cstat-no" title="statement not covered" >!!session.sub_agent_id;</span>
|
|
1562
|
+
let subAgent = <span class="cstat-no" title="statement not covered" >null;</span>
|
|
1563
|
+
let systemPromptToUse = <span class="cstat-no" title="statement not covered" >session.systemPrompt;</span>
|
|
1564
|
+
let systemPromptId = <span class="cstat-no" title="statement not covered" >'';</span>
|
|
1565
|
+
|
|
1566
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (isSubAgentSession) {</span>
|
|
1567
|
+
<span class="cstat-no" title="statement not covered" > subAgent = await this.subAgentsService.findOne(session.sub_agent_id);</span>
|
|
1568
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (subAgent && subAgent.systemPrompt) {</span>
|
|
1569
|
+
// Use sub-agent's system prompt
|
|
1570
|
+
<span class="cstat-no" title="statement not covered" > systemPromptToUse = subAgent.systemPrompt;</span>
|
|
1571
|
+
}
|
|
1572
|
+
<span class="cstat-no" title="statement not covered" > this.logger.log(</span>
|
|
1573
|
+
`Session ${sessionId} is a sub-agent session (agent: ${subAgent?.name})`,
|
|
1574
|
+
);
|
|
1575
|
+
}
|
|
1576
|
+
|
|
1577
|
+
// Lazy rendering: Fetch and render system prompt right before calling LLM
|
|
1578
|
+
let finalSystemInstruction = <span class="cstat-no" title="statement not covered" >'';</span>
|
|
1579
|
+
|
|
1580
|
+
<span class="cstat-no" title="statement not covered" > if (systemPromptToUse) {</span>
|
|
1581
|
+
<span class="cstat-no" title="statement not covered" > systemPromptId = systemPromptToUse.id;</span>
|
|
1582
|
+
<span class="cstat-no" title="statement not covered" > this.logger.log(</span>
|
|
1583
|
+
`Lazy rendering system prompt ${systemPromptId} for turn in session ${sessionId}`,
|
|
1584
|
+
);
|
|
1585
|
+
const rendered = <span class="cstat-no" title="statement not covered" >await this.systemPromptsService.findOneWithSession(</span>
|
|
1586
|
+
systemPromptId,
|
|
1587
|
+
session.id,
|
|
1588
|
+
session.session_title,
|
|
1589
|
+
);
|
|
1590
|
+
<span class="cstat-no" title="statement not covered" > finalSystemInstruction = rendered.prompt_content;</span>
|
|
1591
|
+
} else {
|
|
1592
|
+
<span class="cstat-no" title="statement not covered" > this.logger.log(</span>
|
|
1593
|
+
`No system prompt found for session ${sessionId}. Fetching default.`,
|
|
1594
|
+
);
|
|
1595
|
+
const defaultPrompt =
|
|
1596
|
+
<span class="cstat-no" title="statement not covered" > await this.systemPromptsService.findDefaultWithSession(</span>
|
|
1597
|
+
session.id,
|
|
1598
|
+
session.session_title,
|
|
1599
|
+
);
|
|
1600
|
+
<span class="cstat-no" title="statement not covered" > finalSystemInstruction = defaultPrompt?.prompt_content || '';</span>
|
|
1601
|
+
<span class="cstat-no" title="statement not covered" > systemPromptId = defaultPrompt?.id || '';</span>
|
|
1602
|
+
}
|
|
1603
|
+
|
|
1604
|
+
const executionStrategy =
|
|
1605
|
+
<span class="cstat-no" title="statement not covered" > await this.applicationStateService.getExecutionStrategy();</span>
|
|
1606
|
+
|
|
1607
|
+
// Generate tool definitions for native tool calling
|
|
1608
|
+
// For sub-agents, only use the tools defined in their system prompt
|
|
1609
|
+
// TODO: tool_capable should be queried from model registry
|
|
1610
|
+
const isToolCapable = <span class="cstat-no" title="statement not covered" >session.model_id?.includes('/');</span>
|
|
1611
|
+
let tools: any[] | undefined;
|
|
1612
|
+
|
|
1613
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (isToolCapable && systemPromptId) {</span>
|
|
1614
|
+
<span class="cstat-no" title="statement not covered" > tools = await this.toolSchemaService.generateToolDefinitionsForPrompt(</span>
|
|
1615
|
+
this.handlerRegistry,
|
|
1616
|
+
systemPromptId,
|
|
1617
|
+
);
|
|
1618
|
+
<span class="cstat-no" title="statement not covered" > this.logger.log(</span>
|
|
1619
|
+
`Generated ${tools?.length || 0} tools for system prompt ${systemPromptId}`,
|
|
1620
|
+
);
|
|
1621
|
+
}
|
|
1622
|
+
|
|
1623
|
+
let pendingInput: SessionInput;
|
|
1624
|
+
<span class="cstat-no" title="statement not covered" > if (existingInputId) {</span>
|
|
1625
|
+
// Use existing input for regeneration
|
|
1626
|
+
<span class="cstat-no" title="statement not covered" > pendingInput = await this.sessionInputsRepository.findOneBy({</span>
|
|
1627
|
+
id: existingInputId,
|
|
1628
|
+
});
|
|
1629
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!pendingInput) {</span>
|
|
1630
|
+
<span class="cstat-no" title="statement not covered" > throw new Error(</span>
|
|
1631
|
+
`Existing SessionInput with ID "${existingInputId}" not found for regeneration.`,
|
|
1632
|
+
);
|
|
1633
|
+
}
|
|
1634
|
+
// Clear AI response fields for regeneration
|
|
1635
|
+
<span class="cstat-no" title="statement not covered" > pendingInput.raw_llm_response = null;</span>
|
|
1636
|
+
<span class="cstat-no" title="statement not covered" > pendingInput.thoughts = null;</span>
|
|
1637
|
+
<span class="cstat-no" title="statement not covered" > pendingInput.tool_calls = null;</span>
|
|
1638
|
+
<span class="cstat-no" title="statement not covered" > pendingInput.llm_response_explanation = null;</span>
|
|
1639
|
+
<span class="cstat-no" title="statement not covered" > pendingInput.error_message = null;</span>
|
|
1640
|
+
<span class="cstat-no" title="statement not covered" > pendingInput.input_token_count = null;</span>
|
|
1641
|
+
<span class="cstat-no" title="statement not covered" > pendingInput.output_token_count = null;</span>
|
|
1642
|
+
<span class="cstat-no" title="statement not covered" > pendingInput.cached_token_count = null;</span>
|
|
1643
|
+
<span class="cstat-no" title="statement not covered" > pendingInput = await this.sessionInputsRepository.save(pendingInput);</span>
|
|
1644
|
+
} else {
|
|
1645
|
+
<span class="cstat-no" title="statement not covered" > pendingInput = await this.llmResponsesService.createPendingAiInput(</span>
|
|
1646
|
+
sessionId,
|
|
1647
|
+
executionStrategy,
|
|
1648
|
+
);
|
|
1649
|
+
}
|
|
1650
|
+
|
|
1651
|
+
// BROADCAST: LLM Generation Started
|
|
1652
|
+
<span class="cstat-no" title="statement not covered" > this.eventsGateway.sendToAll('llm-generation-started', {</span>
|
|
1653
|
+
sessionInputId: pendingInput.id,
|
|
1654
|
+
sessionId: session.id,
|
|
1655
|
+
isStreaming: isStreaming,
|
|
1656
|
+
});
|
|
1657
|
+
|
|
1658
|
+
const abortController = <span class="cstat-no" title="statement not covered" >new AbortController();</span>
|
|
1659
|
+
<span class="cstat-no" title="statement not covered" > this.activeRequests.set(sessionId, {</span>
|
|
1660
|
+
abortController,
|
|
1661
|
+
pendingInputId: pendingInput.id,
|
|
1662
|
+
});
|
|
1663
|
+
|
|
1664
|
+
const onToken = <span class="cstat-no" title="statement not covered" >isStreaming</span>
|
|
1665
|
+
? <span class="fstat-no" title="function not covered" >(c</span>hunk: string, isFirst: boolean, thoughtChunk?: string) => {
|
|
1666
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (isFirst) {</span>
|
|
1667
|
+
// BROADCAST: LLM Generation In Progress
|
|
1668
|
+
<span class="cstat-no" title="statement not covered" > this.eventsGateway.sendToAll('llm-generation-in-progress', {</span>
|
|
1669
|
+
sessionInputId: pendingInput.id,
|
|
1670
|
+
});
|
|
1671
|
+
}
|
|
1672
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (chunk) {</span>
|
|
1673
|
+
<span class="cstat-no" title="statement not covered" > this.eventsGateway.sendToAll('llm-stream-chunk', {</span>
|
|
1674
|
+
sessionInputId: pendingInput.id,
|
|
1675
|
+
chunk,
|
|
1676
|
+
isFirst,
|
|
1677
|
+
});
|
|
1678
|
+
}
|
|
1679
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (thoughtChunk) {</span>
|
|
1680
|
+
<span class="cstat-no" title="statement not covered" > this.eventsGateway.sendToAll('llm-thought-chunk', {</span>
|
|
1681
|
+
sessionInputId: pendingInput.id,
|
|
1682
|
+
chunk: thoughtChunk,
|
|
1683
|
+
isFirst,
|
|
1684
|
+
});
|
|
1685
|
+
}
|
|
1686
|
+
}
|
|
1687
|
+
: undefined;
|
|
1688
|
+
|
|
1689
|
+
const generationConfig: LlmGenerationConfig = <span class="cstat-no" title="statement not covered" >{};</span>
|
|
1690
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (session.reasoning_effort) {</span>
|
|
1691
|
+
<span class="cstat-no" title="statement not covered" > generationConfig.reasoning = { effort: session.reasoning_effort };</span>
|
|
1692
|
+
}
|
|
1693
|
+
|
|
1694
|
+
const llm_response = <span class="cstat-no" title="statement not covered" >await this.callWithRetry(</span>
|
|
1695
|
+
{
|
|
1696
|
+
prompt: message,
|
|
1697
|
+
systemInstruction: finalSystemInstruction,
|
|
1698
|
+
history: history,
|
|
1699
|
+
modelId: session.model_id,
|
|
1700
|
+
generationConfig,
|
|
1701
|
+
tools,
|
|
1702
|
+
onToken,
|
|
1703
|
+
abortController,
|
|
1704
|
+
},
|
|
1705
|
+
sessionId,
|
|
1706
|
+
pendingInput.id,
|
|
1707
|
+
);
|
|
1708
|
+
|
|
1709
|
+
// Save response to database
|
|
1710
|
+
<span class="cstat-no" title="statement not covered" > await this.llmResponsesService.finalizePendingAiInput(pendingInput.id, {</span>
|
|
1711
|
+
raw_llm_response: llm_response.text,
|
|
1712
|
+
execution_strategy: executionStrategy,
|
|
1713
|
+
input_token_count: llm_response.usage?.inputTokens,
|
|
1714
|
+
output_token_count: llm_response.usage?.outputTokens,
|
|
1715
|
+
cached_token_count: llm_response.usage?.cachedTokens,
|
|
1716
|
+
tool_calls: llm_response.tool_calls,
|
|
1717
|
+
thoughts: llm_response.thoughts,
|
|
1718
|
+
});
|
|
1719
|
+
|
|
1720
|
+
// BROADCAST: LLM Generation Ended (Success)
|
|
1721
|
+
<span class="cstat-no" title="statement not covered" > this.eventsGateway.sendToAll('llm-generation-ended', {</span>
|
|
1722
|
+
sessionInputId: pendingInput.id,
|
|
1723
|
+
sessionId: session.id,
|
|
1724
|
+
});
|
|
1725
|
+
|
|
1726
|
+
<span class="cstat-no" title="statement not covered" > this.eventsGateway.sendToAll('refresh-ui', { sessionId });</span>
|
|
1727
|
+
|
|
1728
|
+
// Cleanup state
|
|
1729
|
+
<span class="cstat-no" title="statement not covered" > this.activeRequests.delete(sessionId);</span>
|
|
1730
|
+
} catch (error) {
|
|
1731
|
+
// Store pendingInputId before deleting from active requests
|
|
1732
|
+
const pendingInputId =
|
|
1733
|
+
<span class="cstat-no" title="statement not covered" > this.activeRequests.get(sessionId)?.pendingInputId || 'unknown';</span>
|
|
1734
|
+
<span class="cstat-no" title="statement not covered" > this.activeRequests.delete(sessionId);</span>
|
|
1735
|
+
|
|
1736
|
+
// Check if this is an abort error (expected during cancellation)
|
|
1737
|
+
const isAbortError =
|
|
1738
|
+
<span class="cstat-no" title="statement not covered" > error.name === 'AbortError' ||</span>
|
|
1739
|
+
error.code === 'ABORT_ERR' ||
|
|
1740
|
+
error.message === 'This operation was aborted';
|
|
1741
|
+
|
|
1742
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (isAbortError) {</span>
|
|
1743
|
+
<span class="cstat-no" title="statement not covered" > this.logger.log(</span>
|
|
1744
|
+
`Request aborted for session ${sessionId} (expected operation)`,
|
|
1745
|
+
);
|
|
1746
|
+
// BROADCAST: LLM Generation Ended (Aborted - no error)
|
|
1747
|
+
<span class="cstat-no" title="statement not covered" > this.eventsGateway.sendToAll('llm-generation-ended', {</span>
|
|
1748
|
+
sessionInputId: pendingInputId,
|
|
1749
|
+
sessionId: sessionId,
|
|
1750
|
+
});
|
|
1751
|
+
// Don't throw - abort is expected behavior
|
|
1752
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
1753
|
+
}
|
|
1754
|
+
|
|
1755
|
+
// Persist error to database
|
|
1756
|
+
<span class="cstat-no" title="statement not covered" > await this.llmResponsesService.updatePendingAiInputWithError(</span>
|
|
1757
|
+
pendingInputId,
|
|
1758
|
+
error.message,
|
|
1759
|
+
);
|
|
1760
|
+
|
|
1761
|
+
// BROADCAST: LLM Generation Ended (Error)
|
|
1762
|
+
<span class="cstat-no" title="statement not covered" > this.eventsGateway.sendToAll('llm-generation-ended', {</span>
|
|
1763
|
+
sessionInputId: pendingInputId,
|
|
1764
|
+
sessionId: sessionId,
|
|
1765
|
+
error: error.message,
|
|
1766
|
+
});
|
|
1767
|
+
|
|
1768
|
+
<span class="cstat-no" title="statement not covered" > this.logger.error(</span>
|
|
1769
|
+
`Error in sendMessage for session ${sessionId}: ${error.message}`,
|
|
1770
|
+
error.stack,
|
|
1771
|
+
);
|
|
1772
|
+
|
|
1773
|
+
// Refresh UI to display persisted error
|
|
1774
|
+
<span class="cstat-no" title="statement not covered" > this.eventsGateway.sendToAll('refresh-ui', { sessionId });</span>
|
|
1775
|
+
|
|
1776
|
+
<span class="cstat-no" title="statement not covered" > throw error;</span>
|
|
1777
|
+
}
|
|
1778
|
+
}
|
|
1779
|
+
|
|
1780
|
+
public <span class="fstat-no" title="function not covered" >cancelRequest(</span>sessionId: string): boolean {
|
|
1781
|
+
const state = <span class="cstat-no" title="statement not covered" >this.activeRequests.get(sessionId);</span>
|
|
1782
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!state) {</span>
|
|
1783
|
+
<span class="cstat-no" title="statement not covered" > this.logger.warn(`No active request to cancel for session ${sessionId}`);</span>
|
|
1784
|
+
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
1785
|
+
}
|
|
1786
|
+
|
|
1787
|
+
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
1788
|
+
<span class="cstat-no" title="statement not covered" > state.abortController.abort();</span>
|
|
1789
|
+
<span class="cstat-no" title="statement not covered" > this.logger.log(`Request aborted for session ${sessionId}`);</span>
|
|
1790
|
+
<span class="cstat-no" title="statement not covered" > this.activeRequests.delete(sessionId);</span>
|
|
1791
|
+
<span class="cstat-no" title="statement not covered" > this.eventsGateway.sendToAll('refresh-ui', { sessionId });</span>
|
|
1792
|
+
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
1793
|
+
} catch (error) {
|
|
1794
|
+
<span class="cstat-no" title="statement not covered" > this.logger.error(</span>
|
|
1795
|
+
`Failed to cancel request for session ${sessionId}: ${error.message}`,
|
|
1796
|
+
);
|
|
1797
|
+
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
1798
|
+
}
|
|
1799
|
+
}
|
|
1800
|
+
|
|
1801
|
+
// Deprecated alias for backward compatibility
|
|
1802
|
+
public <span class="fstat-no" title="function not covered" >abortStreaming(</span>sessionId: string): boolean {
|
|
1803
|
+
<span class="cstat-no" title="statement not covered" > return this.cancelRequest(sessionId);</span>
|
|
1804
|
+
}
|
|
1805
|
+
}
|
|
1806
|
+
</pre></td></tr></table></pre>
|
|
1807
|
+
|
|
1808
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
1809
|
+
</div><!-- /wrapper -->
|
|
1810
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
1811
|
+
Code coverage generated by
|
|
1812
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1813
|
+
at 2026-05-09T01:03:45.353Z
|
|
1814
|
+
</div>
|
|
1815
|
+
<script src="../../prettify.js"></script>
|
|
1816
|
+
<script>
|
|
1817
|
+
window.onload = function () {
|
|
1818
|
+
prettyPrint();
|
|
1819
|
+
};
|
|
1820
|
+
</script>
|
|
1821
|
+
<script src="../../sorter.js"></script>
|
|
1822
|
+
<script src="../../block-navigation.js"></script>
|
|
1823
|
+
</body>
|
|
1824
|
+
</html>
|
|
1825
|
+
|