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
package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/patch.handler.ts.html
ADDED
|
@@ -0,0 +1,1702 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for src/llm-orchestration/action-handlers/patch.handler.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/llm-orchestration/action-handlers</a> patch.handler.ts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">75.24% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>76/101</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">51.85% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>14/27</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">81.81% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>9/11</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">74.74% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>74/99</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 medium'></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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">7x</span>
|
|
606
|
+
<span class="cline-any cline-neutral"> </span>
|
|
607
|
+
<span class="cline-any cline-neutral"> </span>
|
|
608
|
+
<span class="cline-any cline-neutral"> </span>
|
|
609
|
+
<span class="cline-any cline-neutral"> </span>
|
|
610
|
+
<span class="cline-any cline-neutral"> </span>
|
|
611
|
+
<span class="cline-any cline-yes">7x</span>
|
|
612
|
+
<span class="cline-any cline-yes">7x</span>
|
|
613
|
+
<span class="cline-any cline-yes">7x</span>
|
|
614
|
+
<span class="cline-any cline-yes">7x</span>
|
|
615
|
+
<span class="cline-any cline-yes">7x</span>
|
|
616
|
+
<span class="cline-any cline-neutral"> </span>
|
|
617
|
+
<span class="cline-any cline-neutral"> </span>
|
|
618
|
+
<span class="cline-any cline-neutral"> </span>
|
|
619
|
+
<span class="cline-any cline-neutral"> </span>
|
|
620
|
+
<span class="cline-any cline-neutral"> </span>
|
|
621
|
+
<span class="cline-any cline-neutral"> </span>
|
|
622
|
+
<span class="cline-any cline-neutral"> </span>
|
|
623
|
+
<span class="cline-any cline-yes">7x</span>
|
|
624
|
+
<span class="cline-any cline-yes">7x</span>
|
|
625
|
+
<span class="cline-any cline-yes">7x</span>
|
|
626
|
+
<span class="cline-any cline-yes">7x</span>
|
|
627
|
+
<span class="cline-any cline-neutral"> </span>
|
|
628
|
+
<span class="cline-any cline-neutral"> </span>
|
|
629
|
+
<span class="cline-any cline-neutral"> </span>
|
|
630
|
+
<span class="cline-any cline-yes">7x</span>
|
|
631
|
+
<span class="cline-any cline-yes">7x</span>
|
|
632
|
+
<span class="cline-any cline-neutral"> </span>
|
|
633
|
+
<span class="cline-any cline-yes">7x</span>
|
|
634
|
+
<span class="cline-any cline-neutral"> </span>
|
|
635
|
+
<span class="cline-any cline-neutral"> </span>
|
|
636
|
+
<span class="cline-any cline-yes">7x</span>
|
|
637
|
+
<span class="cline-any cline-neutral"> </span>
|
|
638
|
+
<span class="cline-any cline-neutral"> </span>
|
|
639
|
+
<span class="cline-any cline-neutral"> </span>
|
|
640
|
+
<span class="cline-any cline-neutral"> </span>
|
|
641
|
+
<span class="cline-any cline-neutral"> </span>
|
|
642
|
+
<span class="cline-any cline-neutral"> </span>
|
|
643
|
+
<span class="cline-any cline-neutral"> </span>
|
|
644
|
+
<span class="cline-any cline-neutral"> </span>
|
|
645
|
+
<span class="cline-any cline-neutral"> </span>
|
|
646
|
+
<span class="cline-any cline-neutral"> </span>
|
|
647
|
+
<span class="cline-any cline-neutral"> </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">7x</span>
|
|
654
|
+
<span class="cline-any cline-yes">10x</span>
|
|
655
|
+
<span class="cline-any cline-yes">10x</span>
|
|
656
|
+
<span class="cline-any cline-yes">10x</span>
|
|
657
|
+
<span class="cline-any cline-neutral"> </span>
|
|
658
|
+
<span class="cline-any cline-neutral"> </span>
|
|
659
|
+
<span class="cline-any cline-neutral"> </span>
|
|
660
|
+
<span class="cline-any cline-neutral"> </span>
|
|
661
|
+
<span class="cline-any cline-yes">10x</span>
|
|
662
|
+
<span class="cline-any cline-neutral"> </span>
|
|
663
|
+
<span class="cline-any cline-yes">10x</span>
|
|
664
|
+
<span class="cline-any cline-neutral"> </span>
|
|
665
|
+
<span class="cline-any cline-neutral"> </span>
|
|
666
|
+
<span class="cline-any cline-neutral"> </span>
|
|
667
|
+
<span class="cline-any cline-no"> </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-neutral"> </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-neutral"> </span>
|
|
680
|
+
<span class="cline-any cline-neutral"> </span>
|
|
681
|
+
<span class="cline-any cline-neutral"> </span>
|
|
682
|
+
<span class="cline-any cline-neutral"> </span>
|
|
683
|
+
<span class="cline-any cline-neutral"> </span>
|
|
684
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </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-neutral"> </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-yes">8x</span>
|
|
699
|
+
<span class="cline-any cline-neutral"> </span>
|
|
700
|
+
<span class="cline-any cline-neutral"> </span>
|
|
701
|
+
<span class="cline-any cline-neutral"> </span>
|
|
702
|
+
<span class="cline-any cline-neutral"> </span>
|
|
703
|
+
<span class="cline-any cline-neutral"> </span>
|
|
704
|
+
<span class="cline-any cline-yes">2x</span>
|
|
705
|
+
<span class="cline-any cline-neutral"> </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-yes">2x</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-neutral"> </span>
|
|
715
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
720
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
725
|
+
<span class="cline-any cline-neutral"> </span>
|
|
726
|
+
<span class="cline-any cline-neutral"> </span>
|
|
727
|
+
<span class="cline-any cline-neutral"> </span>
|
|
728
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
733
|
+
<span class="cline-any cline-neutral"> </span>
|
|
734
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
739
|
+
<span class="cline-any cline-neutral"> </span>
|
|
740
|
+
<span class="cline-any cline-neutral"> </span>
|
|
741
|
+
<span class="cline-any cline-neutral"> </span>
|
|
742
|
+
<span class="cline-any cline-neutral"> </span>
|
|
743
|
+
<span class="cline-any cline-neutral"> </span>
|
|
744
|
+
<span class="cline-any cline-neutral"> </span>
|
|
745
|
+
<span class="cline-any cline-yes">2x</span>
|
|
746
|
+
<span class="cline-any cline-neutral"> </span>
|
|
747
|
+
<span class="cline-any cline-neutral"> </span>
|
|
748
|
+
<span class="cline-any cline-neutral"> </span>
|
|
749
|
+
<span class="cline-any cline-neutral"> </span>
|
|
750
|
+
<span class="cline-any cline-neutral"> </span>
|
|
751
|
+
<span class="cline-any cline-neutral"> </span>
|
|
752
|
+
<span class="cline-any cline-neutral"> </span>
|
|
753
|
+
<span class="cline-any cline-neutral"> </span>
|
|
754
|
+
<span class="cline-any cline-neutral"> </span>
|
|
755
|
+
<span class="cline-any cline-neutral"> </span>
|
|
756
|
+
<span class="cline-any cline-neutral"> </span>
|
|
757
|
+
<span class="cline-any cline-neutral"> </span>
|
|
758
|
+
<span class="cline-any cline-yes">2x</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-yes">2x</span>
|
|
779
|
+
<span class="cline-any cline-neutral"> </span>
|
|
780
|
+
<span class="cline-any cline-neutral"> </span>
|
|
781
|
+
<span class="cline-any cline-neutral"> </span>
|
|
782
|
+
<span class="cline-any cline-neutral"> </span>
|
|
783
|
+
<span class="cline-any cline-neutral"> </span>
|
|
784
|
+
<span class="cline-any cline-neutral"> </span>
|
|
785
|
+
<span class="cline-any cline-neutral"> </span>
|
|
786
|
+
<span class="cline-any cline-neutral"> </span>
|
|
787
|
+
<span class="cline-any cline-neutral"> </span>
|
|
788
|
+
<span class="cline-any cline-neutral"> </span>
|
|
789
|
+
<span class="cline-any cline-neutral"> </span>
|
|
790
|
+
<span class="cline-any cline-neutral"> </span>
|
|
791
|
+
<span class="cline-any cline-neutral"> </span>
|
|
792
|
+
<span class="cline-any cline-neutral"> </span>
|
|
793
|
+
<span class="cline-any cline-neutral"> </span>
|
|
794
|
+
<span class="cline-any cline-neutral"> </span>
|
|
795
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
804
|
+
<span class="cline-any cline-yes">2x</span>
|
|
805
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </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-neutral"> </span>
|
|
814
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
819
|
+
<span class="cline-any cline-neutral"> </span>
|
|
820
|
+
<span class="cline-any cline-neutral"> </span>
|
|
821
|
+
<span class="cline-any cline-neutral"> </span>
|
|
822
|
+
<span class="cline-any cline-neutral"> </span>
|
|
823
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </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-neutral"> </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-neutral"> </span>
|
|
844
|
+
<span class="cline-any cline-neutral"> </span>
|
|
845
|
+
<span class="cline-any cline-neutral"> </span>
|
|
846
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
852
|
+
<span class="cline-any cline-neutral"> </span>
|
|
853
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
858
|
+
<span class="cline-any cline-neutral"> </span>
|
|
859
|
+
<span class="cline-any cline-neutral"> </span>
|
|
860
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
865
|
+
<span class="cline-any cline-neutral"> </span>
|
|
866
|
+
<span class="cline-any cline-neutral"> </span>
|
|
867
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
873
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
881
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
886
|
+
<span class="cline-any cline-neutral"> </span>
|
|
887
|
+
<span class="cline-any cline-neutral"> </span>
|
|
888
|
+
<span class="cline-any cline-neutral"> </span>
|
|
889
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
895
|
+
<span class="cline-any cline-neutral"> </span>
|
|
896
|
+
<span class="cline-any cline-neutral"> </span>
|
|
897
|
+
<span class="cline-any cline-neutral"> </span>
|
|
898
|
+
<span class="cline-any cline-neutral"> </span>
|
|
899
|
+
<span class="cline-any cline-neutral"> </span>
|
|
900
|
+
<span class="cline-any cline-neutral"> </span>
|
|
901
|
+
<span class="cline-any cline-neutral"> </span>
|
|
902
|
+
<span class="cline-any cline-neutral"> </span>
|
|
903
|
+
<span class="cline-any cline-neutral"> </span>
|
|
904
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
911
|
+
<span class="cline-any cline-neutral"> </span>
|
|
912
|
+
<span class="cline-any cline-neutral"> </span>
|
|
913
|
+
<span class="cline-any cline-neutral"> </span>
|
|
914
|
+
<span class="cline-any cline-neutral"> </span>
|
|
915
|
+
<span class="cline-any cline-neutral"> </span>
|
|
916
|
+
<span class="cline-any cline-neutral"> </span>
|
|
917
|
+
<span class="cline-any cline-neutral"> </span>
|
|
918
|
+
<span class="cline-any cline-neutral"> </span>
|
|
919
|
+
<span class="cline-any cline-neutral"> </span>
|
|
920
|
+
<span class="cline-any cline-yes">2x</span>
|
|
921
|
+
<span class="cline-any cline-neutral"> </span>
|
|
922
|
+
<span class="cline-any cline-neutral"> </span>
|
|
923
|
+
<span class="cline-any cline-yes">10x</span>
|
|
924
|
+
<span class="cline-any cline-neutral"> </span>
|
|
925
|
+
<span class="cline-any cline-yes">10x</span>
|
|
926
|
+
<span class="cline-any cline-yes">10x</span>
|
|
927
|
+
<span class="cline-any cline-no"> </span>
|
|
928
|
+
<span class="cline-any cline-neutral"> </span>
|
|
929
|
+
<span class="cline-any cline-neutral"> </span>
|
|
930
|
+
<span class="cline-any cline-neutral"> </span>
|
|
931
|
+
<span class="cline-any cline-yes">10x</span>
|
|
932
|
+
<span class="cline-any cline-yes">10x</span>
|
|
933
|
+
<span class="cline-any cline-yes">10x</span>
|
|
934
|
+
<span class="cline-any cline-neutral"> </span>
|
|
935
|
+
<span class="cline-any cline-neutral"> </span>
|
|
936
|
+
<span class="cline-any cline-neutral"> </span>
|
|
937
|
+
<span class="cline-any cline-neutral"> </span>
|
|
938
|
+
<span class="cline-any cline-no"> </span>
|
|
939
|
+
<span class="cline-any cline-neutral"> </span>
|
|
940
|
+
<span class="cline-any cline-neutral"> </span>
|
|
941
|
+
<span class="cline-any cline-no"> </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-yes">3x</span>
|
|
946
|
+
<span class="cline-any cline-yes">3x</span>
|
|
947
|
+
<span class="cline-any cline-no"> </span>
|
|
948
|
+
<span class="cline-any cline-neutral"> </span>
|
|
949
|
+
<span class="cline-any cline-neutral"> </span>
|
|
950
|
+
<span class="cline-any cline-neutral"> </span>
|
|
951
|
+
<span class="cline-any cline-yes">3x</span>
|
|
952
|
+
<span class="cline-any cline-yes">3x</span>
|
|
953
|
+
<span class="cline-any cline-no"> </span>
|
|
954
|
+
<span class="cline-any cline-neutral"> </span>
|
|
955
|
+
<span class="cline-any cline-neutral"> </span>
|
|
956
|
+
<span class="cline-any cline-neutral"> </span>
|
|
957
|
+
<span class="cline-any cline-yes">3x</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-yes">3x</span>
|
|
962
|
+
<span class="cline-any cline-neutral"> </span>
|
|
963
|
+
<span class="cline-any cline-neutral"> </span>
|
|
964
|
+
<span class="cline-any cline-yes">3x</span>
|
|
965
|
+
<span class="cline-any cline-neutral"> </span>
|
|
966
|
+
<span class="cline-any cline-neutral"> </span>
|
|
967
|
+
<span class="cline-any cline-yes">3x</span>
|
|
968
|
+
<span class="cline-any cline-neutral"> </span>
|
|
969
|
+
<span class="cline-any cline-neutral"> </span>
|
|
970
|
+
<span class="cline-any cline-neutral"> </span>
|
|
971
|
+
<span class="cline-any cline-neutral"> </span>
|
|
972
|
+
<span class="cline-any cline-neutral"> </span>
|
|
973
|
+
<span class="cline-any cline-neutral"> </span>
|
|
974
|
+
<span class="cline-any cline-neutral"> </span>
|
|
975
|
+
<span class="cline-any cline-neutral"> </span>
|
|
976
|
+
<span class="cline-any cline-neutral"> </span>
|
|
977
|
+
<span class="cline-any cline-yes">1x</span>
|
|
978
|
+
<span class="cline-any cline-neutral"> </span>
|
|
979
|
+
<span class="cline-any cline-neutral"> </span>
|
|
980
|
+
<span class="cline-any cline-neutral"> </span>
|
|
981
|
+
<span class="cline-any cline-yes">1x</span>
|
|
982
|
+
<span class="cline-any cline-neutral"> </span>
|
|
983
|
+
<span class="cline-any cline-neutral"> </span>
|
|
984
|
+
<span class="cline-any cline-yes">1x</span>
|
|
985
|
+
<span class="cline-any cline-neutral"> </span>
|
|
986
|
+
<span class="cline-any cline-neutral"> </span>
|
|
987
|
+
<span class="cline-any cline-neutral"> </span>
|
|
988
|
+
<span class="cline-any cline-yes">1x</span>
|
|
989
|
+
<span class="cline-any cline-neutral"> </span>
|
|
990
|
+
<span class="cline-any cline-neutral"> </span>
|
|
991
|
+
<span class="cline-any cline-neutral"> </span>
|
|
992
|
+
<span class="cline-any cline-neutral"> </span>
|
|
993
|
+
<span class="cline-any cline-yes">1x</span>
|
|
994
|
+
<span class="cline-any cline-neutral"> </span>
|
|
995
|
+
<span class="cline-any cline-yes">1x</span>
|
|
996
|
+
<span class="cline-any cline-neutral"> </span>
|
|
997
|
+
<span class="cline-any cline-neutral"> </span>
|
|
998
|
+
<span class="cline-any cline-neutral"> </span>
|
|
999
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1000
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1001
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1002
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1003
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1004
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1005
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
1011
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1012
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1013
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1014
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1015
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1016
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1017
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1018
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1019
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1020
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1021
|
+
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
1026
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1027
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1028
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1029
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1030
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1031
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1032
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1033
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1034
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1035
|
+
<span class="cline-any cline-no"> </span>
|
|
1036
|
+
<span class="cline-any cline-no"> </span>
|
|
1037
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1038
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1039
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1040
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1041
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1042
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1043
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1044
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1045
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1046
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1047
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1048
|
+
<span class="cline-any cline-no"> </span>
|
|
1049
|
+
<span class="cline-any cline-no"> </span>
|
|
1050
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1051
|
+
<span class="cline-any cline-no"> </span>
|
|
1052
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1053
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1054
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1055
|
+
<span class="cline-any cline-no"> </span>
|
|
1056
|
+
<span class="cline-any cline-no"> </span>
|
|
1057
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1058
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1059
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1060
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1061
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1062
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1063
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1064
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1065
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1066
|
+
<span class="cline-any cline-yes">1x</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-neutral"> </span>
|
|
1073
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1074
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1075
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1076
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1077
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1078
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1079
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1080
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1081
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1082
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1083
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1084
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1085
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1086
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1087
|
+
<span class="cline-any cline-no"> </span>
|
|
1088
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1089
|
+
<span class="cline-any cline-no"> </span>
|
|
1090
|
+
<span class="cline-any cline-no"> </span>
|
|
1091
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1092
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1093
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1094
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1095
|
+
<span class="cline-any cline-no"> </span>
|
|
1096
|
+
<span class="cline-any cline-no"> </span>
|
|
1097
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1098
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1099
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1100
|
+
<span class="cline-any cline-no"> </span>
|
|
1101
|
+
<span class="cline-any cline-no"> </span>
|
|
1102
|
+
<span class="cline-any cline-no"> </span>
|
|
1103
|
+
<span class="cline-any cline-no"> </span>
|
|
1104
|
+
<span class="cline-any cline-no"> </span>
|
|
1105
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1106
|
+
<span class="cline-any cline-no"> </span>
|
|
1107
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1108
|
+
<span class="cline-any cline-no"> </span>
|
|
1109
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1110
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1111
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1112
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1113
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1114
|
+
<span class="cline-any cline-neutral"> </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-yes">1x</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-yes">1x</span>
|
|
1131
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1132
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1133
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1134
|
+
<span class="cline-any cline-yes">1x</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-neutral"> </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></td><td class="text"><pre class="prettyprint lang-js">import {
|
|
1145
|
+
BadRequestException,
|
|
1146
|
+
Injectable,
|
|
1147
|
+
Logger,
|
|
1148
|
+
Optional,
|
|
1149
|
+
} from '@nestjs/common';
|
|
1150
|
+
import * as fs from 'fs/promises';
|
|
1151
|
+
import { existsSync } from 'fs';
|
|
1152
|
+
import * as path from 'path';
|
|
1153
|
+
import { plainToClass } from 'class-transformer';
|
|
1154
|
+
import { validate } from 'class-validator';
|
|
1155
|
+
import { ActionHandler } from './action-handler.interface';
|
|
1156
|
+
import {
|
|
1157
|
+
ActionExecutionResult,
|
|
1158
|
+
PlanExecutionContext,
|
|
1159
|
+
ToolMetadata,
|
|
1160
|
+
} from '../llm-orchestration.interfaces';
|
|
1161
|
+
|
|
1162
|
+
import { PatchArgsDto } from './dto/patch.args.dto';
|
|
1163
|
+
import { applySnippetPatch } from '../../../packages/tokenpatch';
|
|
1164
|
+
import { generateToolCall, generateToolCallJson } from '../../utils';
|
|
1165
|
+
import {
|
|
1166
|
+
SPECIAL_PATCH_BEGIN_FILE_MARKER,
|
|
1167
|
+
SPECIAL_PATCH_END_FILE_MARKER,
|
|
1168
|
+
} from '../parser/parsing.constants';
|
|
1169
|
+
import { SyntaxValidationService } from '../../syntax-validation/syntax-validation.service';
|
|
1170
|
+
import { ApplicationStateService } from '../../application-state/application-state.service';
|
|
1171
|
+
|
|
1172
|
+
const ENABLE_TREE_SITTER = false;
|
|
1173
|
+
|
|
1174
|
+
// Mapping file extensions to their Tree-sitter grammar WASM files.
|
|
1175
|
+
const grammarMap: Record<string, string> = {
|
|
1176
|
+
'.js': 'tree-sitter-javascript.wasm',
|
|
1177
|
+
'.jsx': 'tree-sitter-javascript.wasm',
|
|
1178
|
+
'.ts': 'tree-sitter-typescript.wasm',
|
|
1179
|
+
'.tsx': 'tree-sitter-tsx.wasm',
|
|
1180
|
+
'.json': 'tree-sitter-json.wasm',
|
|
1181
|
+
'.html': 'tree-sitter-html.wasm',
|
|
1182
|
+
'.css': 'tree-sitter-css.wasm',
|
|
1183
|
+
'.py': 'tree-sitter-python.wasm',
|
|
1184
|
+
'.rs': 'tree-sitter-rust.wasm',
|
|
1185
|
+
'.toml': 'tree-sitter-toml.wasm',
|
|
1186
|
+
'.yaml': 'tree-sitter-yaml.wasm',
|
|
1187
|
+
'.yml': 'tree-sitter-yaml.wasm',
|
|
1188
|
+
'.sh': 'tree-sitter-bash.wasm',
|
|
1189
|
+
};
|
|
1190
|
+
|
|
1191
|
+
@Injectable()
|
|
1192
|
+
export class PatchHandler implements ActionHandler {
|
|
1193
|
+
readonly toolName = 'patch';
|
|
1194
|
+
private readonly logger = new Logger(PatchHandler.name);
|
|
1195
|
+
private readonly projectRoot: string =
|
|
1196
|
+
process.env.REPOBURG_PROJECT_PATH || process.cwd();
|
|
1197
|
+
|
|
1198
|
+
constructor(
|
|
1199
|
+
@Optional()
|
|
1200
|
+
private readonly syntaxValidator?: SyntaxValidationService,
|
|
1201
|
+
@Optional()
|
|
1202
|
+
private readonly appStateService?: ApplicationStateService,
|
|
1203
|
+
) {}
|
|
1204
|
+
|
|
1205
|
+
<span class="fstat-no" title="function not covered" > getMetadata(</span>): ToolMetadata {
|
|
1206
|
+
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
1207
|
+
name: this.toolName,
|
|
1208
|
+
description: this.getDefinition(true),
|
|
1209
|
+
arguments: [
|
|
1210
|
+
{
|
|
1211
|
+
name: 'file_path',
|
|
1212
|
+
type: 'string',
|
|
1213
|
+
description: 'The relative path to the file to be patched.',
|
|
1214
|
+
required: true,
|
|
1215
|
+
},
|
|
1216
|
+
{
|
|
1217
|
+
name: 'patch_code',
|
|
1218
|
+
type: 'string',
|
|
1219
|
+
description:
|
|
1220
|
+
'A code snippet containing your changes, with enough surrounding context to serve as a unique anchor.',
|
|
1221
|
+
required: true,
|
|
1222
|
+
},
|
|
1223
|
+
],
|
|
1224
|
+
};
|
|
1225
|
+
}
|
|
1226
|
+
|
|
1227
|
+
/**
|
|
1228
|
+
* Generates a tool call example in specified format.
|
|
1229
|
+
* @param toolCall - The tool call object to format
|
|
1230
|
+
* @param useJson - If true, uses JSON format; otherwise uses XML-style format
|
|
1231
|
+
* @returns Formatted tool call string
|
|
1232
|
+
*/
|
|
1233
|
+
private generateExample(
|
|
1234
|
+
toolCall: Record<string, any>,
|
|
1235
|
+
useJson: boolean = <span class="branch-0 cbranch-no" title="branch not covered" >false,</span>
|
|
1236
|
+
): string {
|
|
1237
|
+
return useJson
|
|
1238
|
+
? <span class="branch-0 cbranch-no" title="branch not covered" >generateToolCallJson(toolCall)</span>
|
|
1239
|
+
: generateToolCall(toolCall);
|
|
1240
|
+
}
|
|
1241
|
+
|
|
1242
|
+
getDefinition(useJsonFormat: boolean = false): string {
|
|
1243
|
+
const genericExample = `\`\`\`typescript
|
|
1244
|
+
// ... 3-4 lines (or ~20+ tokens) of existing code (Unique Prefix Anchor) ...
|
|
1245
|
+
// ... THE CODE YOU WANT TO CHANGE OR INSERT ...
|
|
1246
|
+
// ... 3-4 lines (or ~20+ tokens) of existing code (Unique Suffix Anchor) ...
|
|
1247
|
+
\`\`\``;
|
|
1248
|
+
|
|
1249
|
+
const goodAnchorExample = this.generateExample(
|
|
1250
|
+
{
|
|
1251
|
+
tool_name: this.toolName,
|
|
1252
|
+
file_path: 'src/modules/auth/auth.service.ts',
|
|
1253
|
+
patch_code: `\`\`\`typescript
|
|
1254
|
+
async validateUser(username: string, pass: string): Promise<any> {
|
|
1255
|
+
const user = await this.usersService.findOne(username);
|
|
1256
|
+
if (user && user.password === pass) {
|
|
1257
|
+
const { password, ...result } = user;
|
|
1258
|
+
return result;
|
|
1259
|
+
}
|
|
1260
|
+
return null;
|
|
1261
|
+
}
|
|
1262
|
+
|
|
1263
|
+
async login(user: any) {
|
|
1264
|
+
// MODIFIED: Include roles in JWT payload
|
|
1265
|
+
const payload = {
|
|
1266
|
+
username: user.username,
|
|
1267
|
+
sub: user.userId,
|
|
1268
|
+
roles: user.roles || ['user']
|
|
1269
|
+
};
|
|
1270
|
+
|
|
1271
|
+
return {
|
|
1272
|
+
access_token: this.jwtService.sign(payload),
|
|
1273
|
+
};
|
|
1274
|
+
}
|
|
1275
|
+
|
|
1276
|
+
async register(user: CreateUserDto) {
|
|
1277
|
+
return this.usersService.create(user);
|
|
1278
|
+
}
|
|
1279
|
+
\`\`\``,
|
|
1280
|
+
},
|
|
1281
|
+
useJsonFormat,
|
|
1282
|
+
);
|
|
1283
|
+
|
|
1284
|
+
const badAnchorExample = this.generateExample(
|
|
1285
|
+
{
|
|
1286
|
+
tool_name: this.toolName,
|
|
1287
|
+
file_path: 'src/utils/formatting.ts',
|
|
1288
|
+
patch_code: `\`\`\`typescript
|
|
1289
|
+
// MODIFIED: Handle non-string inputs gracefully
|
|
1290
|
+
if (typeof str !== 'string') return String(str);
|
|
1291
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
1292
|
+
\`\`\``,
|
|
1293
|
+
},
|
|
1294
|
+
useJsonFormat,
|
|
1295
|
+
);
|
|
1296
|
+
|
|
1297
|
+
const appendExample = this.generateExample(
|
|
1298
|
+
{
|
|
1299
|
+
tool_name: this.toolName,
|
|
1300
|
+
file_path: 'src/services/auth.service.ts',
|
|
1301
|
+
patch_code: `\`\`\`typescript
|
|
1302
|
+
async validateSession(token: string): Promise<boolean> {
|
|
1303
|
+
return this.tokenService.verify(token);
|
|
1304
|
+
}
|
|
1305
|
+
}
|
|
1306
|
+
|
|
1307
|
+
// Helper for legacy clients
|
|
1308
|
+
export function isLegacyToken(token: string): boolean {
|
|
1309
|
+
return token.startsWith('leg_');
|
|
1310
|
+
}
|
|
1311
|
+
// ${SPECIAL_PATCH_END_FILE_MARKER}
|
|
1312
|
+
\`\`\``,
|
|
1313
|
+
},
|
|
1314
|
+
useJsonFormat,
|
|
1315
|
+
);
|
|
1316
|
+
|
|
1317
|
+
const prependExample = this.generateExample(
|
|
1318
|
+
{
|
|
1319
|
+
tool_name: this.toolName,
|
|
1320
|
+
file_path: 'src/main.ts',
|
|
1321
|
+
patch_code: `\`\`\`typescript
|
|
1322
|
+
// ${SPECIAL_PATCH_BEGIN_FILE_MARKER}
|
|
1323
|
+
import 'dotenv/config';
|
|
1324
|
+
import { NestFactory } from '@nestjs/core';
|
|
1325
|
+
import { ValidationPipe } from '@nestjs/common';
|
|
1326
|
+
import { AppModule } from './app.module';
|
|
1327
|
+
|
|
1328
|
+
// Global types
|
|
1329
|
+
declare global {
|
|
1330
|
+
namespace NodeJS {
|
|
1331
|
+
interface ProcessEnv {
|
|
1332
|
+
PORT?: string;
|
|
1333
|
+
}
|
|
1334
|
+
}
|
|
1335
|
+
}
|
|
1336
|
+
|
|
1337
|
+
async function bootstrap() {
|
|
1338
|
+
\`\`\``,
|
|
1339
|
+
},
|
|
1340
|
+
useJsonFormat,
|
|
1341
|
+
);
|
|
1342
|
+
|
|
1343
|
+
const definition = `
|
|
1344
|
+
-------------
|
|
1345
|
+
### ${this.toolName}
|
|
1346
|
+
Applies an intelligent, context-aware patch to a code file. This is the most robust and preferred method for modifying code.
|
|
1347
|
+
|
|
1348
|
+
The algorithm works by treating your 'patch_code' as a snippet of the file's **final desired state**. It finds a unique location in the original file that matches the prefix and suffix of your snippet and replaces the content between them.
|
|
1349
|
+
|
|
1350
|
+
#### Critical Rules
|
|
1351
|
+
1. **The 'patch_code' is a literal replacement**: The entire content of your 'patch_code' will replace the section of the original file that it matches. It is not a diff or a partial change.
|
|
1352
|
+
2. **Provide valid, parseable code**: The snippet in 'patch_code' must be syntactically correct. Do not provide incomplete lines or half-finished code blocks, as the parser will fail.
|
|
1353
|
+
3. **Include unique anchors**: Your 'patch_code' MUST include enough surrounding, unchanged context (a few lines before and after your change) to serve as a unique anchor. If the context is not unique, the patch will fail.
|
|
1354
|
+
4. **Small, atomic patches**: Prefer multiple small patches over one large patch. Large patches are harder to anchor uniquely. You can send multiple patch actions for the same file in a single turn.
|
|
1355
|
+
|
|
1356
|
+
#### Special Markers for Edge Cases
|
|
1357
|
+
Standard anchoring requires unique context both above and below the change. This is impossible at the very start or end of a file, OR when the surrounding code is too short (e.g., only a closing brace \`}\` follows your change).
|
|
1358
|
+
Use these markers to tell the patcher to skip the missing anchor:
|
|
1359
|
+
- \`// ${SPECIAL_PATCH_BEGIN_FILE_MARKER}\`: Use this as the first line of 'patch_code' when adding imports or top-level definitions to the START of a file.
|
|
1360
|
+
- \`// ${SPECIAL_PATCH_END_FILE_MARKER}\`: Use this as the last line of 'patch_code' when appending new functions or exports to the END of a file.
|
|
1361
|
+
|
|
1362
|
+
#### Absolutely Forbidden
|
|
1363
|
+
- Unified diff style (lines starting with + or -). Providing this will cause the patch to fail.
|
|
1364
|
+
- Ellipses (...) or comments like '// ... rest of code' in place of required syntax.
|
|
1365
|
+
|
|
1366
|
+
#### Parameters
|
|
1367
|
+
- "file_path": (string) The relative path to the file to be patched.
|
|
1368
|
+
- "patch_code": (string) A code snippet containing your changes, with enough surrounding context to serve as a unique anchor.
|
|
1369
|
+
|
|
1370
|
+
#### Conceptual Example
|
|
1371
|
+
Explanation: Your patch code must follow this structure. The context anchors are crucial for locating the correct insertion point.
|
|
1372
|
+
${genericExample}
|
|
1373
|
+
|
|
1374
|
+
#### Example: Good Anchoring
|
|
1375
|
+
Explanation: Notice how the patch includes the constructor and 'validateUser' method above, and the start of the 'register' method below as anchors. This guarantees the patch location is unique.
|
|
1376
|
+
Original File Content:
|
|
1377
|
+
\`\`\`typescript
|
|
1378
|
+
@Injectable()
|
|
1379
|
+
export class AuthService {
|
|
1380
|
+
constructor(
|
|
1381
|
+
private readonly usersService: UsersService,
|
|
1382
|
+
private readonly jwtService: JwtService,
|
|
1383
|
+
) {}
|
|
1384
|
+
|
|
1385
|
+
async validateUser(username: string, pass: string): Promise<any> {
|
|
1386
|
+
const user = await this.usersService.findOne(username);
|
|
1387
|
+
if (user && user.password === pass) {
|
|
1388
|
+
const { password, ...result } = user;
|
|
1389
|
+
return result;
|
|
1390
|
+
}
|
|
1391
|
+
return null;
|
|
1392
|
+
}
|
|
1393
|
+
|
|
1394
|
+
async login(user: any) {
|
|
1395
|
+
const payload = { username: user.username, sub: user.userId };
|
|
1396
|
+
return {
|
|
1397
|
+
access_token: this.jwtService.sign(payload),
|
|
1398
|
+
};
|
|
1399
|
+
}
|
|
1400
|
+
|
|
1401
|
+
async register(user: CreateUserDto) {
|
|
1402
|
+
return this.usersService.create(user);
|
|
1403
|
+
}
|
|
1404
|
+
|
|
1405
|
+
async forgotPassword(user: CreateUserDto) {
|
|
1406
|
+
return this.usersService.forgotPassword(user);
|
|
1407
|
+
}
|
|
1408
|
+
}
|
|
1409
|
+
\`\`\`
|
|
1410
|
+
${goodAnchorExample}
|
|
1411
|
+
|
|
1412
|
+
#### Example: Bad Anchoring
|
|
1413
|
+
Explanation: This is a **bad example**. The 'patch_code' contains NO surrounding context. The patcher has no way of knowing *where* in the file this code belongs, or what it is replacing. This will result in an error.
|
|
1414
|
+
Original File Content:
|
|
1415
|
+
\`\`\`typescript
|
|
1416
|
+
export function formatDate(date: Date): string {
|
|
1417
|
+
return date.toISOString();
|
|
1418
|
+
}
|
|
1419
|
+
|
|
1420
|
+
export function capitalize(str: string): string {
|
|
1421
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
1422
|
+
}
|
|
1423
|
+
|
|
1424
|
+
export function formatCurrency(amount: number): string {
|
|
1425
|
+
return '$' + amount.toFixed(2);
|
|
1426
|
+
}
|
|
1427
|
+
\`\`\`
|
|
1428
|
+
${badAnchorExample}
|
|
1429
|
+
|
|
1430
|
+
#### Example: Append
|
|
1431
|
+
Explanation: Use the '// ${SPECIAL_PATCH_END_FILE_MARKER}' marker to add content to the end of a file.
|
|
1432
|
+
Original File Content:
|
|
1433
|
+
\`\`\`typescript
|
|
1434
|
+
export class AuthService {
|
|
1435
|
+
// ... other methods ...
|
|
1436
|
+
async validateSession(token: string): Promise<boolean> {
|
|
1437
|
+
return this.tokenService.verify(token);
|
|
1438
|
+
}
|
|
1439
|
+
}
|
|
1440
|
+
\`\`\`
|
|
1441
|
+
${appendExample}
|
|
1442
|
+
|
|
1443
|
+
#### Example: Prepend
|
|
1444
|
+
Explanation: Use the '// ${SPECIAL_PATCH_BEGIN_FILE_MARKER}' marker to add content to the beginning of a file.
|
|
1445
|
+
Original File Content:
|
|
1446
|
+
\`\`\`typescript
|
|
1447
|
+
import { NestFactory } from '@nestjs/core';
|
|
1448
|
+
import { AppModule } from './app.module';
|
|
1449
|
+
|
|
1450
|
+
async function bootstrap() {
|
|
1451
|
+
const app = await NestFactory.create(AppModule);
|
|
1452
|
+
await app.listen(3000);
|
|
1453
|
+
}
|
|
1454
|
+
bootstrap();
|
|
1455
|
+
\`\`\`
|
|
1456
|
+
${prependExample}
|
|
1457
|
+
-------------
|
|
1458
|
+
`;
|
|
1459
|
+
return `\n${definition.trim()}\n`;
|
|
1460
|
+
}
|
|
1461
|
+
|
|
1462
|
+
private readonly grammarDir = (() => {
|
|
1463
|
+
// Path for production build (dist folder)
|
|
1464
|
+
const prodPath = path.resolve(__dirname, '../../../bin/grammar/');
|
|
1465
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (existsSync(prodPath)) {
|
|
1466
|
+
<span class="cstat-no" title="statement not covered" > return prodPath;</span>
|
|
1467
|
+
}
|
|
1468
|
+
|
|
1469
|
+
// Fallback path for development (src folder)
|
|
1470
|
+
const devPath = path.resolve(__dirname, '../../bin/grammar/');
|
|
1471
|
+
if (existsSync(devPath)) {
|
|
1472
|
+
return devPath;
|
|
1473
|
+
}
|
|
1474
|
+
|
|
1475
|
+
// If neither is found, log a warning and default to prod path.
|
|
1476
|
+
// Logger is not available here, so using console.
|
|
1477
|
+
<span class="cstat-no" title="statement not covered" > console.warn(</span>
|
|
1478
|
+
`[PatchHandler] Grammar directory not found. Looked for ${prodPath} and ${devPath}. The patch tool may not function correctly.`,
|
|
1479
|
+
);
|
|
1480
|
+
<span class="cstat-no" title="statement not covered" > return prodPath;</span>
|
|
1481
|
+
})();
|
|
1482
|
+
|
|
1483
|
+
private resolveAndValidatePath(unsafePath: string): string {
|
|
1484
|
+
const normalizedPath = path.normalize(unsafePath);
|
|
1485
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (path.isAbsolute(normalizedPath)) {
|
|
1486
|
+
<span class="cstat-no" title="statement not covered" > throw new BadRequestException(</span>
|
|
1487
|
+
`Absolute paths are not allowed: ${unsafePath}`,
|
|
1488
|
+
);
|
|
1489
|
+
}
|
|
1490
|
+
const resolvedPath = path.resolve(this.projectRoot, normalizedPath);
|
|
1491
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!resolvedPath.startsWith(this.projectRoot)) {
|
|
1492
|
+
<span class="cstat-no" title="statement not covered" > throw new BadRequestException(</span>
|
|
1493
|
+
`Path traversal is not allowed: ${unsafePath}`,
|
|
1494
|
+
);
|
|
1495
|
+
}
|
|
1496
|
+
return resolvedPath;
|
|
1497
|
+
}
|
|
1498
|
+
|
|
1499
|
+
private shouldUseFullReplacementStrategy(patchCode: string): boolean {
|
|
1500
|
+
const beginMarkerRegex = new RegExp(
|
|
1501
|
+
`//\\s*${SPECIAL_PATCH_BEGIN_FILE_MARKER}.*`,
|
|
1502
|
+
);
|
|
1503
|
+
const endMarkerRegex = new RegExp(
|
|
1504
|
+
`//\\s*${SPECIAL_PATCH_END_FILE_MARKER}.*`,
|
|
1505
|
+
);
|
|
1506
|
+
return beginMarkerRegex.test(patchCode) && endMarkerRegex.test(patchCode);
|
|
1507
|
+
}
|
|
1508
|
+
|
|
1509
|
+
private async handleFullFileReplacement(
|
|
1510
|
+
filePath: string,
|
|
1511
|
+
safePath: string,
|
|
1512
|
+
patchCode: string,
|
|
1513
|
+
originalContent: string,
|
|
1514
|
+
validatedArgs: PatchArgsDto,
|
|
1515
|
+
): Promise<ActionExecutionResult> {
|
|
1516
|
+
this.logger.log(
|
|
1517
|
+
`Both begin/end markers detected for ${filePath}. Executing full file replacement strategy.`,
|
|
1518
|
+
);
|
|
1519
|
+
|
|
1520
|
+
const beginMarkerRegex = new RegExp(
|
|
1521
|
+
`//\\s*${SPECIAL_PATCH_BEGIN_FILE_MARKER}.*`,
|
|
1522
|
+
);
|
|
1523
|
+
const endMarkerRegex = new RegExp(
|
|
1524
|
+
`//\\s*${SPECIAL_PATCH_END_FILE_MARKER}.*`,
|
|
1525
|
+
);
|
|
1526
|
+
|
|
1527
|
+
const newFileContent = patchCode
|
|
1528
|
+
.replace(beginMarkerRegex, '')
|
|
1529
|
+
.replace(endMarkerRegex, '')
|
|
1530
|
+
.trim();
|
|
1531
|
+
|
|
1532
|
+
await fs.writeFile(safePath, newFileContent, 'utf8');
|
|
1533
|
+
|
|
1534
|
+
return {
|
|
1535
|
+
status: 'SUCCESS',
|
|
1536
|
+
summary: `File "${filePath}" completely overwritten (detected both start/end markers).`,
|
|
1537
|
+
persisted_args: { ...validatedArgs, content: newFileContent },
|
|
1538
|
+
original_content_for_revert: originalContent,
|
|
1539
|
+
execution_log: {
|
|
1540
|
+
output: `${filePath} has been overwritten.`,
|
|
1541
|
+
error_message: '',
|
|
1542
|
+
},
|
|
1543
|
+
};
|
|
1544
|
+
}
|
|
1545
|
+
|
|
1546
|
+
async execute(
|
|
1547
|
+
args: { [key: string]: any },
|
|
1548
|
+
_context: PlanExecutionContext,
|
|
1549
|
+
): Promise<ActionExecutionResult> {
|
|
1550
|
+
const validatedArgs = plainToClass(PatchArgsDto, args);
|
|
1551
|
+
const errors = await validate(validatedArgs);
|
|
1552
|
+
if (errors.length > 0) {
|
|
1553
|
+
const errorMessages = errors
|
|
1554
|
+
.map((err) => Object.values(err.constraints || <span class="branch-1 cbranch-no" title="branch not covered" >{})</span>.join(', '))
|
|
1555
|
+
.join('; ');
|
|
1556
|
+
return {
|
|
1557
|
+
status: 'FAILURE',
|
|
1558
|
+
summary: `Invalid arguments for ${this.toolName}.`,
|
|
1559
|
+
error_message: errorMessages,
|
|
1560
|
+
persisted_args: args,
|
|
1561
|
+
execution_log: { output: '', error_message: errorMessages },
|
|
1562
|
+
};
|
|
1563
|
+
}
|
|
1564
|
+
|
|
1565
|
+
const { file_path, patch_code } = validatedArgs;
|
|
1566
|
+
const safePath = this.resolveAndValidatePath(file_path);
|
|
1567
|
+
|
|
1568
|
+
const fileExtension = path.extname(file_path);
|
|
1569
|
+
const grammarFile = grammarMap[fileExtension];
|
|
1570
|
+
|
|
1571
|
+
let applyPatchOptions: any = {};
|
|
1572
|
+
|
|
1573
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (grammarFile && ENABLE_TREE_SITTER) {
|
|
1574
|
+
const grammarPath = <span class="cstat-no" title="statement not covered" >path.join(this.grammarDir, grammarFile);</span>
|
|
1575
|
+
<span class="cstat-no" title="statement not covered" > applyPatchOptions = { grammarPath };</span>
|
|
1576
|
+
} else {
|
|
1577
|
+
// No grammar found, defaulting to Tiktoken as alternative strategy.
|
|
1578
|
+
this.logger.log(
|
|
1579
|
+
`No Tree-sitter grammar found for ${fileExtension}, using Tiktoken strategy.`,
|
|
1580
|
+
);
|
|
1581
|
+
applyPatchOptions = { useTiktoken: true };
|
|
1582
|
+
}
|
|
1583
|
+
|
|
1584
|
+
const originalContent = await fs
|
|
1585
|
+
.readFile(safePath, 'utf8')
|
|
1586
|
+
.catch(<span class="fstat-no" title="function not covered" >(e</span>rror) => {
|
|
1587
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (error.code === 'ENOENT') {</span>
|
|
1588
|
+
<span class="cstat-no" title="statement not covered" > return null;</span>
|
|
1589
|
+
}
|
|
1590
|
+
<span class="cstat-no" title="statement not covered" > throw error;</span>
|
|
1591
|
+
});
|
|
1592
|
+
|
|
1593
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (originalContent === null) {
|
|
1594
|
+
const errorMessage = <span class="cstat-no" title="statement not covered" >`File "${file_path}" not found.`;</span>
|
|
1595
|
+
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
1596
|
+
status: 'FAILURE',
|
|
1597
|
+
summary: `Patch on "${file_path}" failed: File not found.`,
|
|
1598
|
+
error_message: errorMessage,
|
|
1599
|
+
persisted_args: validatedArgs,
|
|
1600
|
+
execution_log: { output: '', error_message: errorMessage },
|
|
1601
|
+
};
|
|
1602
|
+
}
|
|
1603
|
+
|
|
1604
|
+
if (this.shouldUseFullReplacementStrategy(patch_code)) {
|
|
1605
|
+
return this.handleFullFileReplacement(
|
|
1606
|
+
file_path,
|
|
1607
|
+
safePath,
|
|
1608
|
+
patch_code,
|
|
1609
|
+
originalContent,
|
|
1610
|
+
validatedArgs,
|
|
1611
|
+
);
|
|
1612
|
+
}
|
|
1613
|
+
|
|
1614
|
+
try {
|
|
1615
|
+
const newFileContent = await applySnippetPatch(
|
|
1616
|
+
originalContent,
|
|
1617
|
+
patch_code,
|
|
1618
|
+
applyPatchOptions,
|
|
1619
|
+
);
|
|
1620
|
+
|
|
1621
|
+
await fs.writeFile(safePath, newFileContent, 'utf8');
|
|
1622
|
+
|
|
1623
|
+
// Syntax validation after patch
|
|
1624
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (this.syntaxValidator && <span class="branch-1 cbranch-no" title="branch not covered" >this.appStateService)</span> {
|
|
1625
|
+
const isValidationEnabled =
|
|
1626
|
+
<span class="cstat-no" title="statement not covered" > await this.appStateService.getSyntaxValidationEnabled();</span>
|
|
1627
|
+
|
|
1628
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (isValidationEnabled) {</span>
|
|
1629
|
+
const validationError = <span class="cstat-no" title="statement not covered" >await this.syntaxValidator.validate(</span>
|
|
1630
|
+
file_path,
|
|
1631
|
+
newFileContent,
|
|
1632
|
+
);
|
|
1633
|
+
|
|
1634
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (validationError) {</span>
|
|
1635
|
+
<span class="cstat-no" title="statement not covered" > this.logger.warn(</span>
|
|
1636
|
+
`Syntax validation failed for patched file "${file_path}"`,
|
|
1637
|
+
);
|
|
1638
|
+
let errorMessage =
|
|
1639
|
+
<span class="cstat-no" title="statement not covered" > this.syntaxValidator.formatErrors(validationError);</span>
|
|
1640
|
+
<span class="cstat-no" title="statement not covered" > errorMessage += `\n**CORRECTION:** Your \`patch\` introduced syntax errors. The original file has been restored. `;</span>
|
|
1641
|
+
<span class="cstat-no" title="statement not covered" > errorMessage += `Your \`patch_code\` must be syntactically correct and properly formatted. `;</span>
|
|
1642
|
+
<span class="cstat-no" title="statement not covered" > errorMessage += `Ensure you include sufficient context (unchanged lines before/after your changes) to anchor the patch uniquely. `;</span>
|
|
1643
|
+
<span class="cstat-no" title="statement not covered" > errorMessage += `Use \`request_context\` to get the current file state and try again with corrected \`patch_code\`.`;</span>
|
|
1644
|
+
// Restore original content to prevent corruption
|
|
1645
|
+
<span class="cstat-no" title="statement not covered" > await fs.writeFile(safePath, originalContent, 'utf8');</span>
|
|
1646
|
+
|
|
1647
|
+
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
1648
|
+
status: 'FAILURE',
|
|
1649
|
+
summary: `File "${file_path}" contains syntax errors after patch and was reverted.`,
|
|
1650
|
+
error_message: errorMessage,
|
|
1651
|
+
persisted_args: validatedArgs,
|
|
1652
|
+
execution_log: { output: '', error_message: errorMessage },
|
|
1653
|
+
};
|
|
1654
|
+
}
|
|
1655
|
+
}
|
|
1656
|
+
}
|
|
1657
|
+
|
|
1658
|
+
return {
|
|
1659
|
+
status: 'SUCCESS',
|
|
1660
|
+
summary: `File "${file_path}" successfully modified with patch.`,
|
|
1661
|
+
persisted_args: { ...validatedArgs, content: newFileContent },
|
|
1662
|
+
original_content_for_revert: originalContent,
|
|
1663
|
+
execution_log: {
|
|
1664
|
+
output: `${file_path} has been modified.`,
|
|
1665
|
+
error_message: '',
|
|
1666
|
+
},
|
|
1667
|
+
};
|
|
1668
|
+
} catch (error) {
|
|
1669
|
+
this.logger.error(
|
|
1670
|
+
`Failed to apply patch for ${file_path}: ${error.message}`,
|
|
1671
|
+
);
|
|
1672
|
+
const errorMessage = `Failed to apply patch for "${file_path}": ${error.message}\n\n**CORRECTION HINT:** The patch could not be applied. This is often because prefix or suffix anchors in patch code could not be uniquely located in the original file. Use \`request_context\` on \`'${file_path}'\` to get the latest version and try again with a more specific patch. If the patch continues to fail, consider using \`overwrite_file\` to replace the entire file content.`;
|
|
1673
|
+
return {
|
|
1674
|
+
status: 'FAILURE',
|
|
1675
|
+
summary: `Patch on "${file_path}" failed: ${error.message}`,
|
|
1676
|
+
error_message: errorMessage,
|
|
1677
|
+
persisted_args: validatedArgs,
|
|
1678
|
+
execution_log: { output: '', error_message: errorMessage },
|
|
1679
|
+
};
|
|
1680
|
+
}
|
|
1681
|
+
}
|
|
1682
|
+
}
|
|
1683
|
+
</pre></td></tr></table></pre>
|
|
1684
|
+
|
|
1685
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
1686
|
+
</div><!-- /wrapper -->
|
|
1687
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
1688
|
+
Code coverage generated by
|
|
1689
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1690
|
+
at 2026-05-09T01:03:45.353Z
|
|
1691
|
+
</div>
|
|
1692
|
+
<script src="../../../prettify.js"></script>
|
|
1693
|
+
<script>
|
|
1694
|
+
window.onload = function () {
|
|
1695
|
+
prettyPrint();
|
|
1696
|
+
};
|
|
1697
|
+
</script>
|
|
1698
|
+
<script src="../../../sorter.js"></script>
|
|
1699
|
+
<script src="../../../block-navigation.js"></script>
|
|
1700
|
+
</body>
|
|
1701
|
+
</html>
|
|
1702
|
+
|