From bd7977325510621abe4dad1673f747d162ee80d3 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Wed, 25 Feb 2026 23:53:11 -0800 Subject: [PATCH 1/4] Unify logging commands under csharp.collectLogs --- SUPPORT.md | 98 ++--- docs/images/captureLogsCommand.png | Bin 27930 -> 0 bytes docs/images/choose_additional_logs.png | Bin 0 -> 132650 bytes docs/images/collectDumpCommand.png | Bin 31527 -> 0 bytes docs/images/collect_logs.png | Bin 0 -> 31064 bytes docs/images/recordTraceCommand.png | Bin 8203 -> 0 bytes docs/images/selectDumpTypes.png | Bin 55995 -> 0 bytes docs/images/selectDumpsWithTrace.png | Bin 50564 -> 0 bytes l10n/bundle.l10n.json | 81 ++-- package.json | 16 +- package.nls.cs.json | 6 +- package.nls.de.json | 6 +- package.nls.es.json | 6 +- package.nls.fr.json | 6 +- package.nls.it.json | 6 +- package.nls.ja.json | 6 +- package.nls.json | 4 +- package.nls.ko.json | 6 +- package.nls.pl.json | 6 +- package.nls.pt-br.json | 6 +- package.nls.ru.json | 6 +- package.nls.tr.json | 6 +- package.nls.zh-cn.json | 6 +- package.nls.zh-tw.json | 6 +- src/csharpExtensionExports.ts | 8 +- src/lsptoolshost/commands.ts | 8 +- src/lsptoolshost/logging/captureLogs.ts | 128 ------ src/lsptoolshost/logging/collectLogs.ts | 505 +++++++++++++++++++++++ src/lsptoolshost/logging/dump.ts | 176 -------- src/lsptoolshost/logging/loggingUtils.ts | 44 +- src/lsptoolshost/logging/profiling.ts | 333 +-------------- 31 files changed, 632 insertions(+), 847 deletions(-) delete mode 100644 docs/images/captureLogsCommand.png create mode 100644 docs/images/choose_additional_logs.png delete mode 100644 docs/images/collectDumpCommand.png create mode 100644 docs/images/collect_logs.png delete mode 100644 docs/images/recordTraceCommand.png delete mode 100644 docs/images/selectDumpTypes.png delete mode 100644 docs/images/selectDumpsWithTrace.png delete mode 100644 src/lsptoolshost/logging/captureLogs.ts create mode 100644 src/lsptoolshost/logging/collectLogs.ts delete mode 100644 src/lsptoolshost/logging/dump.ts diff --git a/SUPPORT.md b/SUPPORT.md index 8a34736472..f5753dc903 100644 --- a/SUPPORT.md +++ b/SUPPORT.md @@ -18,23 +18,34 @@ We highly recommend using the C# extension's built-in command, `CSharp: Report a #### Capturing activity trace logging -When investigating issues, the C# extension provides a command to capture trace-level logs while you reproduce the issue. This is the recommended way to collect logs as it automatically captures all relevant log files in a single archive. +When investigating issues, the C# extension provides a command to collect logs, activity logs, traces, and dumps. This is the recommended way to collect diagnostic information as it automatically captures all relevant files in a single archive. -1. **Invoke the Capture Logs Command**: +1. **Invoke the Collect Logs Command**: - Open the Command Palette (`Ctrl+Shift+P` or `Cmd+Shift+P` on macOS). - - Search for and select `CSharp: Capture Logs` (`csharp.captureLogs`). -![alt text](docs/images/captureLogsCommand.png) -2. **Reproduce the Issue**: - - A notification will appear indicating that logs are being captured. + - Search for and select `CSharp: Collect C# Logs` (`csharp.collectLogs`). + + ![alt text](docs/images/collect_logs.png) +2. **Select Additional Logs to Collect**: + - You will be presented with a multi-select picker. Choose from: + - **Record Activity** - Capture live C#, LSP trace, and Razor log output + - **Performance Trace** - Record a dotnet-trace of the language server + - **Memory Dump** - Process memory dump using dotnet-dump + - **GC Dump** - Garbage collector heap dump using dotnet-gcdump + + ![alt text](docs/images/choose_additional_logs.png) +3. **Customize Arguments**: + - For each selected tool (dotnet-trace, dotnet-dump, dotnet-gcdump), you will be prompted to review and customize the arguments. +4. **Choose Where to Save**: + - You will be prompted to choose a save location for the log archive. Choose a location to save the `.zip` file. +4. **Reproduce the Issue**: + - If you selected Record Activity or Performance Trace, a notification will appear indicating that recording is in progress. - While the notification is visible, perform the actions that reproduce the issue. - The extension automatically sets the log level to `Trace` during capture to collect detailed information. - -3. **Stop Capturing and Save**: - - Click the `Cancel` button on the notification to stop capturing. - - You will be prompted to save the log archive. Choose a location to save the `.zip` file. - -4. **Share the Logs**: - - The saved archive contains: + - Click the `Cancel` button on the notification to stop recording. +5. **Zip File is Saved**: + - You will be notified that the archive has been saved and a button is provided to open the containing folder. +6. **Share the Logs**: + - The saved archive may contain (depending on selections): - `csharp.log` - The existing C# log file - `csharp-lsp-trace.log` - The existing LSP trace log file - `razor.log` - The existing Razor log file @@ -42,6 +53,9 @@ When investigating issues, the C# extension provides a command to capture trace- - `csharp-lsp-trace.activity.log` - Captured LSP trace activity during the recording session - `razor.activity.log` - Captured Razor log activity during the recording session - `csharp-settings.json` - Current C# extension settings + - `.nettrace` file from dotnet-trace (if Performance Trace selected) + - `.dmp` memory dump files (if Memory Dump selected) + - `.gcdump` GC dump files (if GC Dump selected) - Attach the archive to your GitHub issue or share it privately (see [Sharing information privately](#sharing-information-privately)). > [!WARNING] @@ -128,64 +142,6 @@ If the language server crashes, general logs are often helpful for diagnosing th > [!WARNING] > The dump will contain detailed information about the workspace. See [Sharing information privately](#sharing-information-privately) -### Recording a language server trace - -When investigating performance issues, we may request a performance trace of the language server to diagnose what is causing the problem. These are typically taken via [dotnet-trace](https://learn.microsoft.com/en-us/dotnet/core/diagnostics/dotnet-trace) (a cross platform tool to collect performance traces of .NET processes) - -The C# extension has a built in command, `csharp.recordLanguageServerTrace` to help with trace collection. This command will install `dotnet-trace` as a global tool, invoke it against the language server, and package the results along with logs into a `.zip` archive. - -1. Invoke the record language server trace command. -![alt text](docs/images/recordTraceCommand.png) -2. Accept the default trace arguments, or change them if requested. -![alt text](docs/images/dotnetTraceArguments.png) -3. Optionally select dump(s) to capture before and after the trace (Memory Dump and/or GC Dump). This is useful for comparing memory state before and after the trace. -![alt text](docs/images/selectDumpsWithTrace.png) -4. If any dumps are selected, you will be prompted to customize the dump arguments. -![alt text](docs/images/dotnetDumpArguments.png) -![alt text](docs/images/dotnetGcDumpArguments.png) -5. Choose a location to save the trace archive (`.zip` file). -6. A new terminal window will open to run the trace collection. While the trace is running, reproduce the performance issue. When done, hit or in the trace window to stop the trace, or click `Cancel` on the progress notification. -![alt text](docs/images/recordTraceTerminal.png) -7. The extension will automatically package the trace, logs, and any dumps into an archive. -8. Attach the archive to your GitHub issue or share it privately (see [Sharing information privately](#sharing-information-privately)). - -The saved archive contains: -- The `.nettrace` file from dotnet-trace -- `csharp.log` - The existing C# log file -- `csharp-lsp-trace.log` - The existing LSP trace log file -- `razor.log` - The existing Razor log file -- `csharp.activity.log` - Captured C# log activity during the trace session -- `csharp-lsp-trace.activity.log` - Captured LSP trace activity during the trace session -- `razor.activity.log` - Captured Razor log activity during the trace session -- `csharp-settings.json` - Current C# extension settings -- Any memory dumps (`.dmp`) or GC dumps (`.gcdump`) captured before/after the trace - -> [!WARNING] -> The trace and logs will contain detailed information about the workspace. See [Sharing information privately](#sharing-information-privately) - -### Collecting a dump - -When investigating memory issues or hangs, we may request a dump of the language server. There are two types of dumps available: - -- **Memory Dump**: A full process memory dump collected via [dotnet-dump](https://learn.microsoft.com/en-us/dotnet/core/diagnostics/dotnet-dump). Use this for investigating hangs or detailed memory analysis. -- **GC Dump**: A garbage collector heap dump collected via [dotnet-gcdump](https://learn.microsoft.com/en-us/dotnet/core/diagnostics/dotnet-gcdump). These are smaller than full memory dumps and focus on managed heap information. Use this for investigating memory leaks or object retention issues. - -The C# extension has a built in command, `csharp.collectDump` to help with dump collection. This command will install the necessary dotnet tools, invoke them against the language server, and package the result into a `.zip` archive. - -1. Invoke the collect dump command by opening the Command Palette (`Ctrl+Shift+P` or `Cmd+Shift+P` on macOS) and selecting `CSharp: Collect a dump of the C# Language Server`. -![alt text](docs/images/collectDumpCommand.png) -2. Select which dumps to collect (Memory Dump and/or GC Dump). The archive will also include current C# extension log files and settings. -![alt text](docs/images/selectDumpTypes.png) -3. You will be prompted to customize the dump arguments. -![alt text](docs/images/dotnetDumpArguments.png) -![alt text](docs/images/dotnetGcDumpArguments.png) -4. Choose a location to save the archive (`.zip` file). -5. The extension will collect the selected content and package it into an archive. -6. Attach the archive to your GitHub issue or share it privately (see [Sharing information privately](#sharing-information-privately)). - -> [!WARNING] -> Dumps will contain detailed information about the workspace, including file contents loaded in memory. See [Sharing information privately](#sharing-information-privately) - ### Sharing information privately Detailed logs, dumps, traces, and other information can sometimes contain private information that you do not wish to share publicly on GitHub (for example file paths and file contents). Instead, you can utilize the Developer Community page to share these privately to Microsoft. diff --git a/docs/images/captureLogsCommand.png b/docs/images/captureLogsCommand.png deleted file mode 100644 index 5a8f70e519ef30042ae08b213b949aa131bf87e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27930 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

IVdkPJp4e01cTAlm4&0P^F`)7b?(I zS63_GDP|34yL&RCj%EtJ_(kA#u{Woxye0VeT<~InDZ0xw2L9i{A5dE{-u1_cN1CY3 z%d;rtdowRZH}Ts5I$h!7Yas?*v1h_g>vFT#=CZ&;bol&pgR4={Fjv^)uO$me!`Zkk zMxD$OHx~ccY6ERlJkfMMTOqoT(v<zT zcd_Mkj|qGSz$tRwVyxKy>y!WIY4szW%XO>s7yRyhYJ6`!uhtVg zM;(C0(E+U^zaa=2l#^a(@Co*@eM?SD0~uO9Vwx2*HXoi6-t`Q+HivO8y# z*A$u@kBwILg1T`}kLwMqZuOLZck(;@{x?5e!$;#Zl=l$1zMDl1D?jG_R%@YABFB@7y_t+wdpjRPfz>f qS+U+NHrQs}rXmzRcg@~E2zu&ystsxn0XnWkRVDE@;Qs-*uF6yZ diff --git a/docs/images/choose_additional_logs.png b/docs/images/choose_additional_logs.png new file mode 100644 index 0000000000000000000000000000000000000000..95223f6f62a00ebad256c55051750fd25bc33187 GIT binary patch literal 132650 zcmaHS1zc3y+BYB}QUi!I3?QI%cQ?|4gmel5Lw89J4boi-C?(yXbPU~H(%lW;_TJ+; z_r3R=kKb%&_gd@8{}U6UtSF7~gy;zz92|zMjKpg=IK*~1IQYZI$iNxd)rxgEICMn| zadBl?adEJ+y^WcLl_?yYOh~*2il%DMvkdLmvX4Q~4{<}OU`px_aiF(wTauvoXvD|V zodH=!()f5f4NwC~4bi8%y6{?71%)LHq4QM?&(z|a$_z9X0^sU*=@(NEQu!b5HekXV zY5W%pgm46;2+0ii;|O4-6y_)lR0Aa$MZ?$(gr`GrgamN)A_dWQxw%wu4E}qIeW{jk zDpiT3Z{9xaK9ovoKUaSYFOox{i2pLc4fKErx4;nBa{>?U1>3L+>gTmuQcT2)qfnHn zFUxa6)R!GOo2P7W$@}~-Dd0>}M8JcHA{8jdy9kCfV}{?&eJj+S$B6A>mD%VmsA0FC zP*ewU*(wIT%8b2_P+VW+7!Bq?@`F(nMSgCHenkC5tHfaaAvy9v_t-w(-(l+etGLWt#KnDv|@=JPRXW;vs6~{;cN`=R3xBQ6fOQ2R`wtw&Mi&( zdDilbU%Qqu2=nRf(dxx8J`PjA@jpPp{(yo2PyE7A0Yz1mE4tE&+p&$`Nr?pn$J>o) zw8ZlrJyK@-Ag0xlh|-unzv(3)BHU!JCDXQ4xvMewMwlkO~nVA;~=aSzr$RQz&KQN8neZ!sNEh4mpv)Uz?fL0kv ztGSwY2=40J`B!wD-^4z03Mx%5RZ@?a4Rk1WNIao+(resSw{EC&yNCJgsxt z1**7uojv-ZI;A>%JMo-EP7QqXxIw zSCd>?4#O?&8fL%N%UZV`4}@zWLBBjFgu^v}w=xu9`cCTl$OnYjD)JPH(qq7ODuhXv`5BQ+;6CoQ08MJoh8|0whP(Z@$U!A~V|qK{=eK4E+k{ABz| z?vvsOe>w7W+^!fVO@8#}pOp55ZroQdu5hkcuc#!$j3ke8Bvd5glH>5=NaJXFkzUcR zQN2lhFMgKYsao*`tzd18Z`)$qdYc{t1H%DBDS`kaq|-CPKH`q(9p}D9WB%6Au7$u` zIt5v6#aT&y#Rgdq$^6mct^3ob?m}L?O+nrty%X;hW4~;D>Y03MF)&&*Ry5i8=_*as zP?NPbyeC{tif|RYijb=vmSbAnF^Xf}KmK)$ugFQaP$Tt=pcMZrekG6ObI6{j43wt#_=JQ_{ZOA{uOeS-`$=WQG(Ysahl>H5$09!|549;c3{I%ha% zW}9!eNr!g~3>hq+Wybft{lWLWzVn);)fLetz_on@+lh)P!nIKN^`gFhk$z5#(!a*(`+J!330jd%;iUu5}D4K#1da6(i?9X`*#fx&+?oH7Wx-XIaTanaOcgs z)^tD^A(``nb8Guf`?_QaWENz^f+Y@)yu)dxX%!iWgK&dx8T}atO><4hO_;8CYkQmN zt4*^vJv^y)D|Y;yf`_aZ*q2r(TZg7Mc~_9Ly+igB+{-st^A|OT_*Vy~KCr4)GlvV? zOcWlJ?njtNjcaa4>xYpjM!poj)V|iDe4?nLc%m-;{r>F!mi``Mb7E$JBv{k|LBS|1I4~hH|?)H?Q#@Tr{na6A{u6EweX64a}M*HHcZwksZmCxC5RBVo$xlz-TGtyC&JhP1+KI-{;Te% zolk$n`C9~3eyW_e$V61}qZ75^6ZSH8kBX+%VfLgs#xKTm3h`<$?1*CbWK(}9&~w_O z6FVKhmiQ)NoN-x}?m2V0ctwp#OMgi3bo^*yYFqYs~``PZ5d7X5ntTt;#8$|B~~}a@taEqFImIbiR&l zvYc_}%TD|be=k)pF}Ef}vu;^cQoUom_d~B2aRe9B{H1fO`RM2V`_!Fk0-Klf$A*O_ zI}z3tv)hG5g}v3dHTYIOl~i_J$>co3W4j!4TJF9eN$CY9Jan8JZzR@3P#9I; zLekT0k9)r)saof^DP`VKUna)Bt9=)le#SfNIj}Rgtk2uRmF6O>zqmc&zR6v)h*?!v zGp>JFJLEciVx)Rgd!Czk%amSA;(C=xe@nknDy3)Ll3=^nc{a8~$}Pd2F$Zh9TDkCB z6kbU2NwsbG899+&-XP^tc>nFjSU=dKE5^h3;_X4#e9M{0<N_WJf-3rn6A2;LVioZT@*CaptVh!xr;H%UchcQ^)4$mQ9bk-S{7cx~01M zHK$S+3tq7o>#MULU62pHE;=k^UPYfSA9ZbI%4GHm&w4?waqicg_4V{K<-z!;Hb^X4 zd^09+hxYhzrzUVohjTLN1w!QK_!3@ud(un7hG&H3E#K4SNaseo9NXsmo#4(7;Jy=W zv%iLi<~;%(pbnK82X8NFl|0OSp_6dsnj*U66=Wv8P0bOC^^9XQo!4`0cf83)8eE<532DV?%{QLXS#~?Tq;0OoUT(b~<-;LOw_2~CL{2_1+ zPE=J~Ru=eHHMTc3g*ceoIO4~=7y(Y8+RA7-z`;GE{pgG+u6)3*wW*^a*wxw!;=t!BNcpcj_<;Rirx4|BjiJ zmzS5Bg^ihwjS;wm(ZLPkXz0oaaiIG5OMbsc!qmao-on<=!Uh8V^ zzuo?1OR)#`IbxuTv4ZLS{r&%ECNFdlnnmI_8FDOc*J|Brn8xE)>o}YjP>q@i*48W1 zKbFmM^9|aUtZ$@S>dol?{WK)N9th1tab8UH7pEs-sV+Ng>GlD(&r7LJRx9B*k6D8YaCQNBXu!KO?9C^dTB2N8l0)kLmJPBu76rt`aC=5F#+ z&_PlL_%O>ouk1a%nVNJT-%BRWyK^g4&3_*KCmLn3pz`?AschxW&fDAB*%dI>ImzF- z9m`h^SUYrKAhFWQbSU5!=dy6VAA9_uLy^F!P4?KhuZX9!ImVZMzKj#^@3{AirM_&4 z(A22TfPFO`oqn}Kb*q|ORz|Jz=eKPy>0{v5Ilcy{Zcrr1oUTAW=cs?7N|w_oRA+3{ zKieL+&IbJe#(AH>q-&OVrt}Xa6+t`}&2o1NDBI5Fsdn6YU12^C)uEYF9? zN^5^LDsi%_Qv=ae%~wnxdSiXGLhTExj#FU!dyxYsT>wJhF&i(^YFm#utTOn4!0vN@ zYnx0sk&n|6>O5yBy>q>WX0Qt@zj5f3$8LK+S<-K{gk3FQtEx@n7=hjvJ$-ilPpktY z;E86{*1mYW_=f%TnRczMp_mE`zw?D$EeS1DGLWSv9Hidj?L{BQs9gpG z;jUeS4PQXEX)IJWGao}g{N3lfu*8S`Sf)yRJtM@Ks89n4uR18~i9s_2c;Okc!9kaSSCpEL%@(71Wu$3agmVurP5YR&|M{_RtkTsDrLX zr6P#FG?|gLWFdcN=o#O5v`=Y9`JY9M%UQD-8cn@=w z_=|c4nh5B0ye|85aef4!Uxn-Z%e)H5J_ zHa5C`HmP58@@7r{?)t1hJDBW!^_)GL_#B$6D$454`k?TG)q>lGF1y`Id!^z9uo@0x z$kdGI;SZjZPGXyY8xjW?Yo2Kz2JGg*$DlKkl(@2L&%ul!Wg%Eb8UCpM3;R6l-&j=5+9>SNcg-SFc9$r{qTRji^t2TsxZ3wn^?H z_o39nX|TRLG*nmfI2)gYu@4I1=C!P+EUV9XuElHgR}2dMn(ykd_BR7xLYAdgwVo>7 z-y9V|ythMe*hn~F3waSl5gq8GA_~L*aqEU^^l-`f2L2D7%MwFPb2DQe%~MD{BnW2` zv>185zRE1SdMm|o=Wk+WhGU*02Tn7HZ06e`nj$ShnIdN24@(u zo86K@btevv+ zo##+$iCm1oW)=4VvFw$*p&G*<;$9Gr7=%Im{{8q@(=aZlZ4P$F&7pt}fwM7HKUWRy znLTpv%j~*?<{R8RYOv6PsazrxXUqMyDB*jVxUrJKaq-e6YAZkHK+D~EYO;`5y>{`J-&RNjj|MDS^h94LJ>`#6KV#v3On6-ETUSV= z)t!#W#XiA;qHE~61)jYX+uR<_x2anpab5B?OVo9)77J>@9^UA{*XOWlzDj7B8Q7qN zlG=WU&$FD=?Q`6Et||fY`#}Y5*Q$Cy4ttq@%3?iRjnVW?W&;_!_H07C4{A&$rDHio zJCMMjWpsVMhhOt$j!!rW2|ME*4(vC%iV;)<&rp)Y^w#6pC*7tFjltAQmxg47*WJ+C1gI!LDGgzpV~-B zyjtWb9nL*KNA}`@VUk66@9YKOMsm+uRYYW?56FZOxSaIYB)Ofe*Nvxy{&tgUtOz*m zU#F19xBjreB9ho50-IB1x&7X^mq%u>q=wgIp)u%_nz=Cw_!uQVo7usLD{7OU+yrh9 zsn(k=7U*MXv_;WbtpL05A~vz*8vuHC-mFO#pVr*nEZ)KDcS?3j>DZ%KoHx>4QkYwA zdrMmO>#?hM%#$VPpUI>u3Y0nT%^({oDK+3z$&T!C#8ZHlUj}+T++A>$5E~6vP3pzI zpPbrD8{Df|Bx~r`PYwf5wD|b&AAZQp6viqwYzs=nrMH|cA=N1r4YEjMEqK&QAfMw$ zuwag_?-}z$l_kbbM?%sqoSO2}*&jNfJcaliig$jdx+VEngn%v8z!Pt3siXvRNvsxt=!i`HK|2Qf>0vr?_ zoE1zFHxzgRnDnX)N!@x!Ou_JVShBGs>j+QVqc6G*&d%6_JiR^5fF8tHEH*chN_>cD z-oRhcDt^n^zm=Z}K_WhGIO-&}CPTw#dLme}8;bbg34hRV(9HgDcc6g!nnqu@!c4*8 zXN*8UjeTFeK=1b#9H&|P=NTZa!=pBI@SjPKu zS=w1`1cPhpyH$;@^lU_ewJo{8rLg*vaovl@jvhVK_`!b9$O3gnk5+}*Q?1I&roC_W zia}Cu8R($Hrg0^?Q*(7Euz8n7>!u;D*`kPPKqOmlZg)ysxN7F?3l;MJf-P^t0Ne7_ zNzjSwH>nK~kumCF9FV!GbzzfkWp?YC%A%;iu8%u;&c8efU?pnh^==MYTBa>a1^4O; zT-3PyrZ^|jYv!M0OF%;wt(R=996IYF)d3(h+)BdfH!|rV2pb2Ls`w7=*wS&hk+&!ET$vHz^@m~`nJA{a@8%It4w5e~RLXd=m2OQ24H)F+tAPsjTbd(GJCAUj;7|L0x}eM(M+w4wQOLfR ztS7(A;4E#v{+fRAfStONWE@$oCkIGr$kmd+-SWB)Vj273uIWsrh4Bex^Ypt+uV?G2 zdoWqrbn~W}97?LA;p&<9^d}pcKFDRuOnp2zR)}SS=a(Aa&qX|nXfs^dp!gaKtDu8w zz`sxJ=R?(@8dKQPBoOBr3tE11+JbW5ALLW`HszawjsONhF6-c`yb(U1T3rX!@joHs zw`_9LH%>m1%WjHyV^`~-v|&FyMU!^p)cm#p0G^3ZbEJQ{YfIXwRh%)y9SNW!DL zg{D-M1g-Ua?wt5r+A#Swe}o1CFdSumTc~O$_o3ct$4p~5;!yaZu65uh=c%3yfQ2IW z6C8Q*MPb5&fI7YWg`1uWs`C+tq*hJ5wM+&Kd?#{*%Z-ln^yi?gYuAB!_Z@49)6A$9 zB5O;-b4n5;oiq$G&pJ}j_o$|IkH}x9&Dy1}){E3>g4 zW_=qCktT(F5#eu0=}RXHCyIWAMu8p+R;OkvR22II;~Xn}KOk}iY|X5u(lp6ukBiv7 zZtq=>HVi7b6 zo&FvhZNIRThG3r;Y3!oMTIwYV>BuecS3cENgw7<}{IPHmbl~b=7h*(6Bx% zP2Rt)X^K=vTr{b!Bh?H(Z$)EH0_=1TO`jU*WRxlk?Ak%7yZd;z8HjZqrcM2=a5mDP z(iXI@Ve2M_fvZmj_*2`kgkff~bLI4Oq2koB~grCt~7SWTCI-kNXVfQ%S7%8F~(}@N&r0lxQatWJCL^MDq*MHMFa&&q9bz{kv|u za&JgiNb#}(^OKqisqcY6080#J(6!o_cIl4JUh^xtIC!w}cfmfNGLAx`de&^bakWvu z%j$DBF5bJ>cWttcCj7}54xw>7CrDFPz9@owVG44+94z~zicpIt87)o8vq&XZDsWb( zM!B)*u)4Ri9J~EjaN@8W_-J?e@I%`pWu0+$p2a@q7Jm{)$?BX=10o;n}(~f4`{%Xa^4l)HOv=I=L3-SYju4@_^ z6*i7*hQXd=sc~qBQ|ZoZO_Y|;-PxXVdj|Icfu;Ao+pE@E3ogT-i%9rsHgBum11l16 zE04(MGVOg@aX!=UUkkB@?Kd1e)5FC9v;rod&c`_yOi24g=<4SKY^uz-&3aPbC%s8M zO7Pqjyxv4wGHB9?YV=snxT`tYaWd2Ux`#yuZXKn%tIcw**3P-I3xi8@(FzDJ%;udY ztF{dIT@QVFT^q5h^w&#~Dlq^m@U$D=cqk zVs8j+Hd-<~Zkj;u_EY6#zrobl`wAicpsC__9$}ySOvZQ(@Z5&ZGhgJAZ*$S~y|3cy z?#^d(3nQ4V;%5npL`;l-D$t(RasbI$E@@JyPui8L61fXaH*s2tR`A)F2b_zmFIC)+ z$pqaU>!$Q|D&&}(+V_LLodQApl$*fpp>3P}7SSdmYpP19&ts>@&I8vM2js3(@yOjS zJGU=4IIN})H4pgwmNVVAzf=>Kv|#Bv9yDDDRZQx6AXDxIts$0iS#xo|OS6+ozO=Z% zhtV1lD&(8~=^n$32=#p8@PeSU*~~ zpTcE#7`4h8O6|M3imnn$paaBgj1J9d#2NZE3+}(-NB6msp#4n5bJ_`l&KHS*afnbz zwW2QS&Nu5%S^KCGX))?up)0u2pQ-_Az+JCpY9^ShveY1cV5o1_L4K)@PRvyq9{jfa zXUpwz7@^Q@3JdC_-}eUq_P%UOKy)<+V6;~dQ&vxrRz($pQd7ct{fg*DNgys;E}79! z$r?R`8*a;qBA6XEx6i|!ivtj{y>QlK+nk~KgCC-#NXn(|mm;B#jscfF1fngtrjy>#Z(jH904e z0M?a=;yN>2cH_Ny>mF41RbI zFGKtCw|$EK2t*li(769Bv1FBF^E?3ferKZCx@;2%NZsiWzbkS-BNAn~e`biUSdHBk zX>k7^iFR8c2IR&0D-s5Pz*BVidIh#ursY473DWILK3oxB$PBTf`SRL1~N zLSaxvB<1hP0EseXctk$uUGte58yn*xijNe2!(R3ypJdn5T^1Awf{PGBa~S@7!4oJj zcZ7OPy03q&{!a|@Ye!@snAqBYGVlL6`#WC$HA~PhpyF7jruJKN{;S~OJBKO*>PyeI z|JyniaPkEh2>PFF8ht7F(`o+KP91JEIDub$?awUWf9)uX{EDE5I$o>%xv)P_#c!V2 z(}G1AT!MQ4OwRtk@EaU{cq{{=&kFmT^JgyNzZU#c5q#h`)fyOP&m8}cO9A;lp;T^g zW>i&EdwP$Dj~{$;f1LwliQ^H?a(wy{nVBmT{WOtuUz*bY2fzMvG12${Esp(ElK*S; zKM$Wi0mvO_|5;7(pUB+^0*Hkl-YfA}*7E-lBTM<$Qsd}9+yCQI0|B9EG*F}YFE;#n z7$^p4eYVcac-4Ox1I+wOYLIf-u>VUKejmPg`itjlufC-H`O^Q|aifT?23POb?c57dRNe%p zY3hn(S=vMXnu$Y<1W6C&Ad6{t(@-l^+^YPbehJKQ`-@g3+@ZX?{R#~k-Zp_9of!oq1!RD~^ zH3>Uyl2$3^0IEViV}0^UXR&>6?vS&d(2aD(Wgl%hT{U7E$2Z==Z#myTm(6Gx%MZ_G zj!wzR{-4+WsZd~6-;c;Usiu4NsUN}5Rhcr33S-}C#+g-T7~!<%Jg4ewM=zW`V{53s zmTsdClDsrm`8y#33c^q$IsWqsLKwM+TPJG=lu+Ga$GDtX1aHdW=pB|BiK@JxW+>W0 zW7{T;)?RS_>rWGAf5$L*?C$XIq7_tDBVbQwo=(57_@BvrfBz~Az?*r1dC7A>+s-Q}Fz5XI?K;g_ zRyIVd-tmj*2d!!=tyWz9a_u2;#&23!r0FaQb3rrw7m?acGsW7M=g{y0EkDgCIymjG z;YR+Kc)pdW;2=)(ArUdnnf9-WVgY4!4jVL2I{?jgE~bXAb(YR8;I#Kr3_tlFy8AMq zj+N>!juog-^)*##XX9#?n}j5D+vx3D$biB+KAyiqHL}Qk#hi^;cFOZI{(sgc@*W|A zi1VY1=6m@!Tu6FGK&>uBP#D#yOmjp}YsgQt$=ykz_-&QOX|Cc;S}YCvKIg24%WzKM z`a#PEtpah4ik~J4UNP=(YxAe)=?)TE?JT@7|1ix``2Gf#A;^Co_Z-?`B-{|tV+PzgtscjLpGiyZ{IA591Mq=?`28D8a#SNc2SK#g zAWOj428J18a_39|sA|rr_sjpFgMaG^SmBofBfbfYl?4?hg=yRR5zIeFrK_cjfOFn* z&MbN%8oumA=v+l<-LO~94wQm`qT@P{-6`o7$Man1=;$!J*{iA9V0Ak-VF!R=_&^AG z6_@qQl$X%WE<1l(NuNPQKi9vo*wt|#b3cIeHq`Sui?wS?rY-W*(eGf3ZX4-rS9$TG z)UPTB_;!+jo`M-1AO;;^&~Fwf9(hxBlVn)M@3Idx)j24f+}|9e60)0p>JSZ4XN1pq zmtpD6?CP9;BoCeDufXjekaCag5OJCCu8w|>>e$HBy zZLw)-+4@a=J;ihYvmfE~C4wg^EmZ#%a{y>~n!*{|0MzaZ0u>2eF8PPo+t)kDatWTm z*!R|fcsLoz>#%B#jC&JD%mHcfX?u|&cOXf|ZdBg!Ogl-}dAei&q~+mm5Qxvl2X3w? z-$#%M&iv{#*lPrC(;uyOvP``PfGulj)A`$(8};gdLtk9yE>f3I{n=mVyP&xMlTz0{ zOxXj``jp#Up$=js|31%byw49mB%p4=YPdY1@8jjLq_LqN!}f zR$gk#-NoXf_h$3M{mm$yx+#9U`))(TmXoctzd7E!utX;I+>ERCaQE}r+J3WLC)yMm zUoe+xXXg3`G;+GcJRVyd*X`b1`M!0_DeD8TvoK!cc89eQ)B2nxL{`L{4;^%z2z&WE z@iADU=vWj)-(7>Avk~bk2^>l2HDS=DMvJ7?0yansG1KSXO;7)4NNrxj0)C15XYfR} zILgk;(~Cu)u29>X-HNDb+cu0nzycH!wK5&}1F^@v-l!N(JCKaP5?@O!;of$;sBXx{-bu>{vRmhBmsn94MPsI?+Qzs+1h|4H_ux` zHbJ zf!I^+ZT{P2q%y<&1H+2p%LKt#-{`^&XbyAhHf%zy}C> zSLW!_DDf;K?yy2@mI_pId$Y529Fujbt&&YU<*Jnx$c#Q~U>c^mAS{%*2HgWXiex7{ ze}fn`k)PrI72KO9M}Z~_k~<^o3G_ez6Kiw}`^qDhp)ogpllK^5#vmV8;@{(-H@n)w z?O)Y(-m97<5=(ww&g-zA1mrFA_C#zDDKcjtVSP)@xPCE2hftdHJ=EVjRuIeF#+`JG)zOOR{_r8$L;qf2E;!l5Z|ac! zoW;XNgRXX2)Okn}EBGq0=Xn?s;1R^M@qkL%Q$dgON@|>4-(MM*k@U%pZ9k+sX#N{lnIb^ z`BHbY-+*B)DJDkZv0JvxB_?)zv-qGGuiLu!PziQEpMICxbUxF^mqOxoI*i(vT#E5V z5>%*HJQd!s_O$J3!|Ih%e|J|`hY{au7UnuEOOCqQaoWD3E!l;rUWE_nwmB2BM{zh_ z(4IA6e@L@A-+TC=RcW&34SBH22i(H*8ahN)f$wR3&zWMdgf0!Nwm=<vt4dA|7bhSX`qT~l>C#>tl0<|D-Xy6P1}DWYGPmX)AUEiC`vtm zCA0VENQUJ|%GJWW9T$I<%XZ08N6$dwKYx1ejD0bdrgtLK4l#mKGqi_dT)ppJaSG^T z-{=%P0z6I%wOqm{KF{R6wAmTUQfpl=+`7YrX~Pb&`pN7ZB-RY75{#0cX~KF*TSSww zp{TI?%hjlGqZhRvejZS-dBK?dGS$z0>-B09$#XZ)bwy!K#D|`1a>nH@Z|IQkodw?4 z4X9NfmdJ6_=;sZ}l#m&bL|vc{qFhj3nAFc>u?cp0Hc5L9q~QN{=LI|nTThH?7QGvO z*!e9`jw#$`NVElGVWFIDFElk22j|hT?hONwX!;QU5iKe<}_^cdb7a~n_g#+FZm{&0sZc|oex(*t{q-f( zXF#U|9IkE?z{q;>kxAkkU~m|a#CpmoRU1yH)E1H`TB%JM(jCTQ0wrr6MsnDlDl5yC zsYkY=6lF*im@gwVjZh)PrbrvUNIPx>im}dFa5aEJo(Gi@hcFB{FsZ!NTS83Hw=AyO zmFxbT+qVof!kFl}t;HX9{H(5fnS-Z0?z+soN_`F#I;P13)kM#hl_sV2yazzSJo6xU=-J5A~qUjlt47l?MC`-6x3 zL494bjCUVg^#nYce^t`Y>nS-7{V~PyQGR^(7rbd*XrTpp6Wo5V9H{z12ISXlf4<%q z)|q7$kg9t~Uvt+jXN=|dc6?$s7I_!bFdx8vK-y*c{3E40o0F6f*-Ct; zh}0PKYB=A^Y?HT@=7!>!DjPIh(?APOn>&}?FzC9#rs2Bo#`Ot(i{L=nmjl)%JSUcs zVTku}4=rvr`DT#pY&cuAu(jyS#?!p*?dkq4OfipIKh8_dm{gGU!YYc-2b%77 zD^gk>a>V-+h!cV;`EJX*U^Ol6QJ7n7wBUPojratI6(#n56@QIR_^>BN9*$E(IPLFg;%o_#WFNzFElo6=T)`B1|L>WJ-e=u_GLwx*_JuM}EvcIDGvBjz<4}BK`Q%Ze-v9q-k`F)d{EqBYUOyGJm z*BMdChd8Gr!()F7=*Ljulc6ro(3%7dA1F-0||c7}ca#$`|O=;dI)n;3Ei{pY8nc1lP7TiVr= z*_41Coxv159SRskUZa5%Xw@4#ToO3$ro!FtJ6j1R=W0&cI;J2a(~Am$wdCJ=_>s%g z;Sw!)JLVIz zQ+mj!{&T_}brAn%mOnbBHDwr^!&W(Om*XPUKEYp^JvB@Opk(TrvgmQpRQ-J;%^~vc zlAKY{8ck^Tb&J?jInx30aQA(n2Scx9Avi^ZD^4kDN+)o-b_ zvMMFtZaZZ`^U+zCuM!sPO2xBMTi=pcKL7#i$ zbecKVBtB*qpY+s?RW|@zqUnJ=s0aw{`wdLG;e4mB$7biYsM8}`s2*eE&5=8-GjcSf zxws@v;I}i?ITR6&K7dmr_v59}-C?&ZPR>bOne2dkeEKCHp<+}6ZcazvaAY#1SQc=$ z2r_s$U}@agdi<`MhgpQTpL&~kCC$``9sLT+EGt_}n>E28g8gU<#oXO@1 z5uT9pJx~wPo()6`f+{xi;Ni93?nkGwyRB~dc6addQ}m0W-e0Yt>;Mg--b=N492q^q zp4i7Mz|p5~CVolGBS)NmH&2+-nAciwP;>cTPPQJXZwKI~f-k$gkZ_v^4yzF1M|Gu} zpI=e6nRt*MGeU>0Ba`6vXDG^Tb$L+sQA<)iAdmGP0C8v-t%A96rGvVM#^;nAf2_Jg z>edptB4#P*pvy4wzh78eRB0&(<-z(Tdk>aj~#!*MUY^<9#w z1dq^|17;=n7j9#qT_AnW@P{X*Xt*=-R)O*BMB|KWCb4H!`XhL;^<=CgX)24f&4g0? z;lAAk4Y*X{!`xpir7mPAOg~-=uMq61Hnu`)myu_~eEF!wNH-+!$bJm*rY(W|WP-41 z%zt*rBoJC_6V%q5XL~@gg^Qf~x6LN>(c~x5_RBU>w-A|3oKVZSi5wR8rsuB zDdNTpbw|ev^ky7Z`g+)5Wf}s6d3_h*KprckgbwHr3lI8a>DsVz^zHBi#lRts%qarj z(uYT4gSkMkve;ayLngnK(oQZVO~g%e8@eFt=jUbMOb(Oa)qdUgYu zUmCmqt$}VDczq-<^e$Egw2Cy)Ou%f_OvY>2y5{vOLL`?-$lch}mnPa9h6Fa_XDt>p zC+zlNlqA#HzFRCC*T-#FfSio6lWIB{`Qe z)YK!=d1Fcc>jhLU|F3q(HE?t!IOv50f6%oU(7bAdCiLPke1*zd4HT--X!MyGQs+39 zeaRw!6A4KvNu`**vX$l*+iu1ZIQ-xSH1^FwoI^JVtQm#masAN&z+9JgUm3_NEZoVk z@#D%MATTR368n-|Z>;8v&9xLidJI-B({5|ubKLece8P=zxFFRJ>_S{4*0I;r^CG$j zWL<=`kw7gmU;u457<{$(a6ftc(ou9bRwaM>!?mjose2CuBf&pYz zBUsF_i^b0)$^hB$b!miT+_fC6aIH0#h#|2yYMH~1oQQ3nz&PdSDh=C4N-wuEWKY(Q zAc;QelePJq?fxxP(%68P zMxdryS*`xv7FOoYewa&A823^&Z7NMY=GC+ITKu}fkGdL*mZ2q?`}9$`vb;Xt?ddGb znfSsGXlN2M^lJX`)vG{hqcmR8K?NTArshkd*$V%tpi^&| z$x8z1rXrwrTHU{N5WMN%{d1e`lhcAq0Nt{2qm3u%ljqp*95iwaL-$s9JG!JM1b6U~ z0O)zpxS5`EYt=uDiM=!}xm#W-_)JV25&jX?Xd}a;WN$oLMxqgD?6r;})$Hy9hZSOued+&aj#&(CF(# znr)ukw5?!(NVnmJr~#U20oTTzq&kx?xG9D!L0qOcjH0*6%K)Z;~Mm z?Jt1hA@i=M3dsKpVn-s%2V@@IXcpRlIsi|$Cw?rktBpJUmL>FPhFeeQ#XeM@06zeq zBFKH;rL2rz1$HNn6%Kr_Gq1g=kM>&7lH6;20WgbL;Hrz;@UgX~O(8m=EsMAZ{ixyw$uR^L1Ve z^>K}^^JTnTc0wrT_j%Aex-iao*Bj#343_%*-RUmk zo_BhzNeS@T5A&eC^4*OdeBKT9LHtg0&&R^WsnXF>NqKBCYcF*B&Io&ecC9EBpw(hY zAZ#Evk*RUtg=5yik>NjUsv?FUz}4nLM7hP#yW)5pRxtLOfIc>1CfQymN8_KGuE!1b z!_Fc7iij(CqkK8 zQxY6^duXula_f%CAh2mKWCE;8Ro2bwThR+?#3E}YV$%fn*mfxC`PQD`qXQn}`^WWK z`|C~>r%0?D*b^Jwr2VoUi9z_;+UxsX`xqSIKf7e?FQ*iepBOc{$9JBuH-C!gAwSv2 z8tmpjATbU_Pzu3mHabzx8mJEn$8DWc^V8gQ3elCdwXdJK${oAHFl=EZPZfo|YV1zS zS||F}3{H^CXwLFQds!C1R;Gi*3XvijYb3zN!%1egzg!^s)la|7Jm85%tPeUFOfDs{ zqvHCQDQx?J+51~D0G=l`qe8Pt2Dz^%a9dDMnk>`6PtQnBE+oU(BtdxX<#m`pcPb>N z4t2}!R;4yp_l;ME>q14#cZg`A*JAib>9u+xFuPyBDZKn1L1goZ=frsM>Oz9gPcv_l zdXlXpUbuchHyAJ-`1KzJX}#0ROb{ygxh{zI4>V7O94&AZ9K59F?zh~bS7m27@jdzn z0?ZD)(utXftkPn?jl&Cc1Vz_Z>ThR4_x-t?M$Dm@=btsu$>%N!xQ*JOCexp*Frr>; zn0!FNCyz^?5=Smc-+CwIMGTM5%;|2c+@%CaiA|}58}_lEG0T%1#+o^!+1`Ozbh};) z(EZWsdMv6@K(T>AiG-;wl_Ji4n^TwLS|>KV9mD&9)KWnIRlG1+fJF6V#saFw-Js{W z`1CiH;S)27S5kTHonC_DX?&h*nsf@aTr^*Iq_I*i z7*e|zIVM(Mw-423cwZClfJEohHY&t}&((P(!MS&ujz5s_~^@i~F4We$I2=^NjI+ct1GC9(xS7|Cnp7 zx#qmC->S4Kho35`LNZF|3G?Qs4{Id5?o0)fKRGSc4j#6^QuwQGhu2se@}>vgac>~9 zXBig(8jX5IjGTBde6BHJCiJhPdB zz?njTEdO_1ml>&m9BNOc0L?8S_22VeBd2#JpZ%CG6;o?*yFczeYXsH(;j8bq68!sp zlbq+k&nO_hkD90U%%^ZP>OjU&PA|7H&F>{jDB$Na-iV4->1fP z?D>U1^Y8+cS2bT#r1?x&7;<_&b>`=SsItpDrJhM-yq>Wx&=uIt&0piB)=~G|nz*n= z#ww^ZJh#?P-5p(=E6TX))2Y_KN5t|7TOmBV88eoP;J}|g^|p2IX}%dRIHXa4q_eIm zI<^PXuZ{dHSDA!BvzKqDD?%69&RdQp>h;UmW{`}!Z(A-mwfDSVWvCfQxDb7MQ1@t; zSLQ8~CFe{}&>R^*=OG=E-yp3$#>AY8zcJT6 z|DM=qKue+;7-43+@@BEV^J9V6dxAgF+>Jq&NA#g=E*8AAt@Kh$U0z+P%j4A;z3uEK zV)*aaLeeT2L`HYN-TNEmc*|ctQ8^C|W91qBBqtDC)$*KxEjs|GQwPXAbs6Zhb;FyNqU)w8KcE?n0=GcAD7_gj<-?Mb&4@eu{N+$r#GI+`L z(1*WN?(4&$Gu_rI8--%kgWBtjYyEX`tc_;1fK+nZ{~EoZns+LhgLcrjTth&1&a_4P|eg<#mHUQvLHEO*dmWI>bSOv(&+iPtT;U$Ab}+O}ObZbr8vP8W2TGE1TP z%zFu#7R_;dvJgaIdFBAh$1@_&BOYTg)SJE8JIs4>Nc9|5WEF$h?ZS=O+zE)&-EVJ{ z?ufh&MXs02=e1m-5A>bjyKugZv^@GvPl(OjwzqgB`&S?o3~?&9k;b6VcIsvviLUqb zqlCp$WnKp0+;)cL#+O|NVA*^DJAL}<5+*P3ZCJ(ymi6=%F2%DiuowdMSdl;Z0g3eK z#Kr05?9C}GLfo#5B7fLkb~`jYzkJbcuzav)GR2|v*1Ii&7*=kM%6dTkIDU0F5d4x* zefKNl0lrwqfN^4FAWOeiuOUgYOrL{C11`%;G!;BBHJhs~fXLN{9FFNkRAt9il&&KP2V0T#34>y}%x@c32*k zAj{a${mZ*Jy#c-F^GNifc+ECcF{+-!X1?AIdq){bt!AxQr5?SD!cJu4^R*uEfvM3L z3mo;8HSW+gp|8Bo=u;&_XVFg}=Va@+`dru0SnAlCL-3@cuQ>1kIR9L-{L?Q|qDUm_ zqylEJER(KCE8{bjVjQ!yPHnop27cWB%>t+%#MQG4iX&x5jegZF?a_z;-EzI#$N}9%snk;h61{iq;cNU#pmlTMi^Z z@U;-PdJ&j3f-(*H{GpK}W0@6bq!d3S2nsr6zWl!qbxzQFh_T->?EKv9^L99Lyz!17 zz7|FGKSKTpOJ}MT2m2oP3kQD|Eompa0JV-}$g%6DYpO{m3gf7kj@XnCr-j#1;D!m2 zQQ5dWuh1R-pvJ>igxZDzH%sVjqpzDw|D)-nC-;`oP0gwP9hQ zJ?*wuxiLS!F_>4pp;?2Apr*)U)c4E)VYhpeqRU_6B_M{B_t^gv zbwG;koxlpp;AP`O&d6k$=YB4@;z6X05MaFDYI^Ybfu1;FqeZER+)`(Z|3L!80jR81+GJ4H{t|fNiKwPtN#$2WSK>Ts;x)F5?fOX zK0Xnd#@+YmG~mw9662Y-pFt;l)Q1-7fJ(s4OyI{5OCqTym^VS>EQz1wrITt`4BTJY zb5@`J>S?@K(_qdy*oqXs^s%Me(P6|9vY=rix+yC$zdqX^Hci%jMHGL-E%@h6q|3{V z(>e77WRX!^QcoS+Vy4Cl90jQ3Hl{qiak7m1ulV!DSslCX=Wtkcy+OLv+jQFu^)EIX zrIxr{TTWB8Un+nO62<9Sm^aU*tK;5F#h`05zIa8E$l8T=f9%;^f@enaa_o8Tzmb;v z?9S&CO8eH#I)lP+6I#@LA{{2aV&scN zaB~24gQw7usLcDwVknaT(L@k=se!auy5yJYVv8t6O%6akM{?o5>y!c?St> zW2&hl;AqC#b_oM1E$Ds_P|vYe+R{0mqi)yVyPvIePO(Iq`P+o!j3PfKpL!Ak4VoXs zfuXsHxA5=xrugdUFZ!3QerIWz!iD&65wV25!Rx(+d0uZEM{>u8UHjSek6wRx`u5#b8f{NVr=_hA3A|F*`xF%_jCh$UZU#B+ma_-vSw8w`x=CVCu#J*0PZW;F= z77%E3*~j~}GL0_aU&{c0p`?Bs)rc8@|3}b`d(D`(6Px%`zNBt6`fr8qHDgKvz6^V> z2@=l6Gy1;5uc42yvD@2x@9#t^{yaC#D%c{YZgE3W6}v5`Lo#CSRIysN=SxLPOa4_& z$i+e=5`bK>>2}q5y1;2XKshW<#7UQ`O4_1S6?AAKUNu9IvLe zDSo*GCa7-R1M~yevqbg9%p?v|Vz^rYx`;1jStSaJ;v-B6`vq zgMuGPW<=r|tV=d1#F#b0#W12s;%6v6(^4@Qu5Fb>3(2P9V&~*oFT1A?xJosn@uKv) z<%h6^G!&@7W+hoV;z;-y0bZ60TDfq3X3XZ*ep7vd&Nc!0HJs{-rrd4DwF+L&X*KjHToI3@Wq*t34+$ZO{bc1Who3 zy^1c;I`=k$JN|<^XmBeCrO%7xclQ4>TpW&KeHVu~7D_<#xSl(!2rBf32{T&rs?5r- zhjzj5zr}VT%k-v25lEnsqU#GWxm0>8SWo^Xm$JaPVlAJIxYGi@h*dBzUzY+8H_PRT zHE7RxL~&=5Yqk;)i^QIs&n@+zh1ukLW0>8WyuGbIt}&l&cbYaKoNSb6w|5VFSuc3y zl9tL_eVXq!FL=M+2;TP-b#bOyH=DFO=~UU6YclTu1!F9#QHm+E^XRb5CR z0@-6UGx6g35I!_>Jz=n|H57GnY7>78rMu+!L*m}U_r}R2k?e|is_~<$e{#d0rWSNC zlQA&svCR`EmeO#H?L(-gfRV~7N3@TOP$aUsp64h?_=){>RhErS2C@D0G8Q#7_IV5` z|IYV5+&lz*;luYL^_}&vP+15#p1=ih+)sN+zb;?S6o z7#zZr9;*=dXzl%AM?QLx-Mvh(H>4rGt#eFJJk_0 z*K=8T0^iG`ve0)!GKm(&=+Jt^zbv!fhk96ded6}>Xl($USEzR+eZ)SX5XN}`8${>P zgF-pnE|1oFtCu}rUD?Cjh(9t(UfzI;h}(=#vd+LdEZsb7SHabs?sWz{Fwtp9^?U%z zC6vjE=lO9R)zPl+IVB5G(AgLBTaWGvF#GsOuAWoq){Y|Se)ue`WV0kTbj}bNvD9}& zL;cwEG<99m3lxgFxL@A6GiUGfRM}RYBhCHG{FE3f3_N2Sv@LJq&>shrK{wWP)J=(I zo*C6FWza}oN7th7-#yq$!au7)$U}ZcFtwVGh7vLtm95BOCr#(KXKP4c05v7dhdC)4YN`)6bZ$5A0 zv$Xf_x?vv)GGEaw&3a4M!I3kMWM*Ghae!m5G7#k^I>Y0_X&N(_?7ZI3V=s6()J=mO z0LjA>#o9`wO_qz^n%Hz8)FHY|>x?mje^sw2)v|iC*8Z##J|D$#p6$1%gZJ&9Dbo;l z$)L4G35fhD#~@5FdAm5!M{_b$Khbpcwx{}eU9nUNeYq!Bd)PIL{^&Cy1s%RJF4)_t z{V_tWaVJ$Fa)KCFv{D*!ScG_Kp6SRLK|gi!xpWP|zsOI;IFHK&)L9znr$kABSHY-E z84P3VG@wQ6sf7g;MF9V{*cjHX!5pVAP&Zj~Y0*Pj8iP)5>^l(?efYUAShM9(D<=e- zUc!?rm6^MT;Z=@%rxEDRE`968-;(6A(0n4EBaFPP6lxHR0Uyzx+p6JDBBCzW$PX%2 z*$h}Hqwc3YXpAf9#r|6im+CcOLRCHGq4)i}G7AL!;y}pw?C8rz-4GD34^D0*p^FTq z8JN$VXAx-7onDkFCT5DG;Cbp4g(k7_?F8Jl9) zzS};j^zM%`FuvQ7<-`1iF&h z1Izx2bx-_-&v$p8K3X%N3W5@k87AC;Asi_L+DLJ&zR(Q`;hTClvnMgsP%pAI!mx7< zb~lf_(@PC~+`)vH6J?_RaZQOxkUReh%&MR9kM@Jab3N&_-`^3EvMEF~$doRY03tq9;0S~3Lr%NyDj9@oTg;DnemG4$zv%+8PF@mO=|u&=>ALhNTTw%#uqn5 zPR}Scj{fHKH;tE{Vu6gwYv{g{59I0#`?~Ck%D^$|o22w$m`?WiNQ+0NA!2*uMv`_{ z&Q&+WadZ>tS>JQcm>8?Pa8pWv822F?%KfEjN?A9;q&5TO2u*ir1LmZ6mD<-?`jC1j zOULx5JvH{;uU>1VxNynbLovI(@ctz*`j=if@lhVmzQt2VhbWlN$&b6lYVxKuNk_0?=M=brjvqPvaP-x`I7@OkTvPnKAb^S1qh#c z0gH2b>JBj)mxQD5=8Jz#%>Rl$;6C}t^_UXv7Z*_5v%SAVW!v3$WE-ffU*Rp<{MBbt zqo^v|d{K=!eB4%K>ZAp<;>#a?G$hk58mO!AZ*Zvme~{jD4su;2YYJ}2vu(9#v(E8I zxA1y~nXVB&H9$6^wW*%9w6)oBX&EYtOV)U%G0X6`66fE1F&O@1d<@f;chiHzol8{j zYuaRW93yOs>h0<4>b2yONAJcN?vBGsM^pne@TN0BTn3~T0jt6fXI8ZLZ~mt{>Yrcz znDNMHy2@oiUM90h(=+r^N+XlMr|J)?WAj7TfVN2fto}zzk+n5lqvEU4i|!Z0>0gAe zY3nWi-%9+4aU(^7l%ucQ7Oc5g+Okh&Q8$!f@VXu4z>$;6q*|DD+XGb;c3P#{k- zS8r%RER1XnY*j!???%be^TBrd=L@cd`IPp;@fREM8tm@0|WM=l?TA9zOUFJy^UlQqTVF z+rQ;{;7b~VhZW*t_4Dul`@%>br#@J`c-Zzy|F5?XZs2YE!^C~qqcZ+~`YOPv0m3E` z2FLfaV*i(&1dOE|KX8%s%MqXQ{x#A4`?EE9Ff(or)r9`vj~*%v2QE^r9a~Z2A1UJh zy5a8`z&SOPYJvWr9@OIp0+1h5RygB-xX+I~;8~}#P5zJd;h)#{*9QbSaFKBO{4f6p zmFnN-3=&81tXa*91pe*Y|2dhYJb3LAq1!0iFL4JqAB9 zq_rX1AmbS9f#j$7pt2<4bLs@j1Z%}p$a zw2Aw(JEdPZ4J^B#4&qA^>Yx7yciKy-oaHB#s@sH{6@#)vu^Jqc0B-h|=9p*?2s*#A z5_t@#eKqws<6i)Njrna8c*9O~*)|A+6+-#1IR1KH@I2%`Py*69e#+!w&u zwyEm2?`~l}MF87Zc@2r*14TkEV(-(+%hd>`Qen(=I}Tm7g zKSpj2Fpy@D{AzZu_I(07-A+X|a$Vq{!hx$+8>k|S*0t|R+yqKxg;W=3nU72&r9jub z3B2^rp8S{~l?GG@Z$|(op+|iH@Gyh-$^}g3!9d!PMdz9!63B=G9NsPu#{c25+^&Jb zeiMl=H_D0B@x~i`ui=eLzo|{O%i7dxHoMukR;&BK!969K0Ti>>5!iZe9Sl14V~FC!j&EekCHNmh2h46afHbY2d%tJugS<#+(MOhG9ULvj$oLrV}8L?kO4{ zI7M>Wo9-xWyL$>OJD;Xw;{bo7!oImM9Xo)nN zQ8$w6fEuJfnZ#vG1ToDxnult=8DOj&kNX$8HoQgweG8s*kXEHALsJDjYcqv_DpGDR>FeGNfQT6XCEXoSFY>)?RF4Lfg~@t*tdnjm z#T0$t*DZDCNU(ZiGd2LXJDGPJ-SC>F&UDHnl-mS|C=Ot{P?o&>+T!B)(4R_`jQYj= zvt&x6(l#tr$hY)CKopREtzPx9CpOCC123oDL*Dm%;k@Ja%-YE@QSSh7J8sRHy|0`cLB{-U z+wo_A*x%!i0?fG#Ea|M;RWG~Er!yP|KARpJ!NH>7;IHuUzT)V60ZlI|Ut8lnFcfh* ztfTp3PiUFiZO$T8%e{{c9-tCdEjk|iiEH19-AQ&4(1ZEFf25W>v@smb}k#yS>bSbtPfOAP{ZdsMDh8LA7#V!MWtc#^*N#5RX`!C202q{(!LL1WWFZ zr%nZ`j+<=0230Q;WTOrLY`4`gwTvy}j_T3PyULs!3|4IwRi6kpKFh-Yf(~o^1WRtA z4F6I9PG}+h(tceGE5N-~7q)x$+g@Bq(F-OJ!{ycw3+!U)!?ohO;zQp9g! zurRVU2EGG1K&(Yu#1p!|iMRxoCe%f%RE;K={eY7aOTk+wuR~Q&nN;2FiRmg+*)Cz^ z?sxe|p&Mcl^3imgtMcKPgJLhz(1*^R8Dq;SYm?wlp+@HM!-9wzfOJ94kD{s`pb%CX z8BiuV$bMi>g-4WVdb!E9o-ca-G7j~0jF;zRv7WObveKUU_U8c)WpN+oJ7*R6R*AQ` z%erpieb0_>9zg?9wd!M#if`z$`ra*dun7oEb*($!do9wx)~aC!_AVVB+cd`!o<5J? zf&fA2eiROfFl(8sNY;tMk@~Zs$_)1Fz#jTuf@Fznp_#&(<96 zp7l$&PNL$=sV11AxrPymBOPVp6ppCYvw%x8tN}QjpV-o&8&{PGg9 zt;KTIQlZYoYNCKRz~+bI4I6b`cnpBY@Y|i+WB?*0N%xYzUGrO?;fbayC zGuu>+_eff9`3t}n_g?@7owSe*4gSmnDR7Y2g*?IUTaj0_1+jU2j~RuobS1(&45R5 z^(*0%RE&yT#H(Em5g4%GFj9{+ure3oPaXxU zG#MUI&tz)92__iARDpvwV!zg#`n7g;0J4kHWxTOd5;}ePyKPcYXu)Z}u|#+Hn53w3>By?@)n~L*3JOvRlR+GVf@|> z7DZbJ#3vY!tn_Tm1$$z7;};THO}QZj!z^V>WqFF+5CgFwgAIbE#X zj2VM}^f#vKT2vwN(*Z(~D$xLqC(@KULlO{Kr#3JTOlH{kZi@)yx-hqovU--QcB+he z#!^5Nr5>UI>+655^u<>XW7R#1{te{eCWjRGoGT0KL1`_3k)J7)5|Eg`HvGYkiC#ep)UcY-M+wR-2KuZaS@L?%?9sdX98m7gi z#t*R1@Yjq$RY3ZP^a&+vP<0gN?01`y+K9DG*XY_TYet)C0O~VS;9hY{--1WyH^_3| zoSE)gdnu(ZE7YsaP6~h`*t%AM`fCg9ZigG=6f3NYgz!&w%#+c%m;Ks}H#GQ!9M+?9 zQ`|=dT=APXAoHLqQ(&j>`&6;>>d$U6#_8%Yc#!~m=w#ROyebq3La>dEi}!%HZWF9P zl@<_K)e&B9Ww3$YBmXgHfGVLl4G?b@rfJvnI+EDsFveE95o6z-cbBT(Op_0^)Ses4 z1u|Zvc$A(=&t>bZBRLKjcN2{eV;g*d^Pp5-{J=XK#VT zV#?$2uo;uv8w@qJj7b1HhPUla@3Mj*xKl6xg!a9#&!v)2BS<)}cG$u_c)3snA0vntpU%=vrUeRB)(llEpb71vh_68qub+pKG6dRt>KChDI$>AJMJE_t0e z|2EtdQUPnco?XnriweEbR{DqBky#Qyk9-tqv8`Kj?QZq506z(q`+_#)Pxpeu;OoHM zYQw`D4y5LdyQ-<+Ek3-^$$eQ~K`%Sqqu;k{F+z`-mSOu%fp!R&H4jutt4ayJ-SHuT zm_ClI2lA;JkKs?VKRYGmsSloA9|Q0Xd@lIgfSx}0`*t#xPqWYit#}d;zjI1pm~({5 zZVt_2tWl&%Be$YDEr2_>@M;Z6fxf{Q+vHL+u7P8cxH*67)Rl>A)DxR@nkxllg!tEs zYb{VI{H*QflFN!0e-zGfshfyzjW15Xb6JevpS8wl-qoJzV1zo#ECii%Is0+bGcwjr zMK2L8CPF`UGZyI80mIO=S)3;>?1x;WnFT14*PXuwx%b|m%guD#eZ4FsUqDK|5vaP9%)6QcXu~TQTXay0nuXKu@+r@EqBHz$_Y~*JFq2f46;{Q2~ri z{mdSmx_$W}Q@()vyD!yV4_EM<|4K#&9%UK%9n1gduRCuqpZHqO1aMNB@ zbuLDrlEvOalOl=eaK+#aIiq|Gk-#2n;&(vbqA0Fu!*#=FuX*Vxjzzbi(dKj8DZI&^ zQ(nI+REyEiNtXxW!)6SUZh`+B`mBr}=@nSg(fdn5E1#Zb3c#GKBtmnLIEm>x++tVc zLzFo2q}gfkxNJ-YB~6#=K=TI=3*c`*5BEkfge|X2W@KO>J-}PDd~x^`@w%C}aHZD5 ztK?G-6VW=O%>8JBc}AJ&!qTmjXWNN@8)hM7+8z-9X51x}obr2nkToa(RyQVBBmfPU z^@keWerLF^)9tEW`){oQ?|`0-WE=OLUtcW`>epO6i6K_EfDc{eeszDN#DGgdG7{0F zNX*p+Vkq@5q3pZThQ+W*&$w{=D7>G6CpWpMp%YJit_`Lpu78cfqvPSNBjJzekbkuC zcO&ZM7=w`8wEU@Mmc%*F!gAIXwAt~T&G6Wv?YN!o4!3r*kc`r>*e#tTGiSdwJ#n4O zv=fDxHJ_NfC1{1M2=>+cxLJ<5L94lQnHdRp-LlsByUph(Dtd8-0?l4Bsp9S9kZHan z$*Y`gI!EaEMK(u6AuW(J`Y+4mjv}E1Npu%hmP$982BqN%+~V>LnYz^I?d|eoF`9u#(RzpJrn*;&nZf zW6~R|DCQ84e!82sUG0>JKm!%`4`wp>^kCq?1*g!M%;S;P&9p?~pKfg#J|3e%u$Ip% zz8vRE_rj^o^X`;Q#DjYfO=&9Vks+j#dW7aW5MA)avvx+bQUyM=@{!}Iw52paU;BXY z)nuw;V?z;L;Ph?vQE#C$s;|IF#H-ge@TV8VE;L*lTP-8k0w26+eoq9)RM7jndi>!f zFP>wEQhggd@S(XiP|~u!de|`=;GcWm0P_}(xWN*DEE_N3f((EWGQD`pHFJr=$i4KO zj+GQizC)P$?wUSr`u=sa&1BVo*I`V=NE9GlGQrc0US5S+ouS!z%Y&XImI>iF{YCaK z+pL}?nP+bfr&G?p%iRTXASL&mnUk8g49k|<=Ldykuc!ltw9GsCHA}f}k9#UBi_7eW^OsI60+OrH^q+4G~%4)I%tf0G8 zzq8@>?J>d*ZR|qoMnH!5p{0TQUaw_@VXfgK-Fx*6KZ!-J+hBoBee@=>3n{VO-DgVM zfW?f`)JQcjx}W@oUo7-Fa#L{ck=+zsG8{2PNV{%v?3D%JCip|yCtot{)9U9eRErot zR)WAHLE&qPA5IoSM$)ZCE$4en9=u1v6R(>|{jdj6lO zrFNV9_4t_mWV_Wq@3WaL7u~XelwpbsDPuzP_>Do?QYnJnBO@m?TMhXv{{Ck*PQhQ_ zOKmb#Mpf3AA2RB5Stt6F^hRV!B9jp=1Yjt6?T+PoGmHLi+xr46eAJQuJ{`Vw@7Dhm;8KQxGNDI-K|n$jiEQO zV_~iz?^kQz=!3t%`BR=drYkBe5oETr&+ecyjGVYp7Y|m}gVpHWvn@^0VvTyc*gq5E z8m>mn7WH+$R~F$dz75!!ey`BZ^yzvJV+&~9UcG4vct3na4h^o=TUMI+u^7+3cz?Z= zUW!QWzJ?}A-uljswz7?bAFErD{ttwqYLUkYcHZ;&Z1{)TGo(UT1R#Q&_+q==j}^XL z)45HNRZ{b+$n%042R*Y37{9+=@_e9)p+z{g!(AgLme;zZhTIp(#9Lpw-+AX!&U`~> z(`H#4h_fR0%|UApnTM9nWLyJ6r)7&({)RAxDSmHL)Dpbe!&W4#jbSvEZLYP%ux2IX zYhd%vjETOl0L$rwX)qsC6Uzm*t5Bo0{UnfPlwy=N5W92wUT$nH3ueE%QLr@-@Nk!^ z$~ta}_3Xbd&W}d*QPiFlBMoxcHyF8HC{{9V%JS_m6H77g8EU)xHZd8`OV);nR1Ux~ z&m~lRx+J3-1xiamqE1?`RM#t;u959~KMY$it9=0|6g6AhC`N@n^p!1e7u??wbymRv zZUF)y@jDCrV8M$O^!>XWkYLwMZTt3m3{; zfi^+79nWM+>V90c+OX@XNODkiSNKf|i|ec;3Ks%P-Re+`sq;@&bp&0N)|!4VmawOz z@_N|J$>@ni_%<|Xzar0PmOJk4(>rO6=6;Vmxt3Z_nbJWkh0t7Vbi^Yk6?SnqqYzP} zXi#Gzm1A{-OvEN_a#aT)lSUC}x?$g+tK;&7>0WJI0PHiv zNhqp}-FH$%#H{u7*_yDjzy*+y!_NcfvGo*5MaNJZ@y(K8N+4AJ z_9Jw&I?heH=JkjMmX$L8&pr{l|LAy0upcXlM7r&C8+}rs7a1Z?{~DT-EV0L+A4%-- z+i;ia0Q2wc-rc@n}ay^s|iAu@bdF_oGf^3$$B22 zGh^<^1u@a^_dvxAz5CPk9)O%)>dCpRh5No+K2+!ek7#`Q>C3sN=tKlAVngpBb71EM zkFoczik8~r(g;^yQ<0~TJyV_lAW2E{+g6n9Kv{KRrv^Cni%lNC%Hr(i=|U=1Ttg>M z8h~OH>dG$q-UkZ5ZSE-B(yzLi&icZC*q;6|RAAN`Q&G4v%fa@~p1a2Y1}BeR#tK3h zHUg0r*E};Tqm07t&G;2`YNPeTbyQ(JqaQf<+WuSn?f~qSq@l8Er{l|R$Ol_s4R+Y_ z{!SV?jlmU$yryrKTw%FP2|cGk<7jJ&og>P84}kB9X{-i51f+{BZZ@kd{(S^StVyur z%@aMtN8zBzve=s=fcd_Mc&HP)u=-e3CW|v~TD8d9i6M&Y{ zbWqK-%ztzhP(kS?y?Im)aF*jnw)t2891co?bz-1oJmvg+*?syo!3T^-Ks9qk&pcC zf{s*w^;91tRF?3MvZUMf07m*S=u9Z$OcjCLScITv!e9c7ng^wCYhJR4t{2evZA`DO zYz%FQ8LxrOX?1#WDOU1p71_V$-+JmpOtE4SRL6XIWs4>2y0TgtpJpyKiouxu&jVs< zprSqJMm}`?Fh9%SWdQ4hv7_21f5csO%gLkayzjGi`6P55K_mf>jh=QuOHv*=sznw* z!Ge+%Ijc|Uo`Zi=kvusmx{gmMp~&xEbU&gJ7Dkn3_Ct=n-2KY;X=}c9feU@8ooAG7 z(z~SOOG#^4S=rT2hRS6e_l!*^TR@FJMfZ__7G+79)>67!tW7r*Lt*zr-l!;*?974Z zY8b7)KuTy%6lorHk=CwUS@IibkA=ubSA8=)da5n0HHm`=i}Z_Eq7llLjM4<&3<(hO z*TjB+pWonmVr<5FSvsmlouo^ofJv7dFGlXH+>UJ|a~V)>;tx_+74U)QBhMuAg>l z((Zr#C^=0olu>h+ltF>ZV=3r|1wQ8;+h~(e>rC$<8iE~Dsuss5P-@?{168Kpz?fDd zd+-n4iSJ73uxO&&xTOTCGJA3QXctjW2{u86Zl;+?+{s%bJo^H@%bLD={xu|)ZE`4a z-AB>-vpSjr^pfv2FsuEqW}{dcnnnZTcg|C)udQOuGK7UitaSjE?a z&j_i)Qm8h`(;)aPMkcH62`@J~0#%Aa3NeiOO>|+4En?N(qDU;DR*XWLc#I*>ANy1^ za*bGZk1z^q(8&w{n za@O|42_|{1W|AlDG3%aiGt9LFQu#iNrx(GpKDG8iDZeDc7G)eSc(@a@K7*WKUAI4$KH5O-JJ&^jai)XY^tVo zR>#}4n&51oPdyh$VX|A>D@=!Nq>D(B!=BH(xRPXs3_g~4BW;?E5CY$SR|K< zC#el8egqB4vtx+ax%IrzH!RLm?iFruJo0=BT1W;*=*MwK;u*M%m&h3P!l@CmEmbRp zgO~y_F5x@zv71j15O^gq70Q^9K#EJ()2s8%~OBL+#R1( zO;Qx~o|BthDy3q%nXpq#JYJ!+Ti55ZZ9{p49FTHOAx|wIqD9W&m@Rdllp-Qdj*3Zf z3?j>w>eZdd6#pWpG+F1^ccr@)B3ddHL*&!P{@L~&n_{PgSPa}6GW97cb<{@-oynkt zg8r?P2)_XdgZ*tznRZ0PfDoJ}mGFjjQ2bwWHJjY{o~U1TEUl+(%aVT6CvtfI{PEqf-F?J|%NUr-)ONOOGt1sABta9QtA-;z6JopL{v59pXl~lS%RXSW3gp`vB z`?S+%;hjo*;a{Vk6JBU1W}S)+PKi-?{i{FJcYc4N)&f&1$u5`fZ^@@f8zQl~oXF zleTQjfDF{adb$81<7|JfLDxg&08Ly)y{5s9I(}%T(0Aa>tK>tZ#rrqA4BB3#GpDYM z*rdN2PDVOL_*`A;22OWVnMjMS$#vf^^4(05Y2l9{u|&mX;y?Z?oPMxBVJGe7LWwf# zm9d%*6gop;yeL_s=tHVx#WZ3M07OQzPtV&5ZPD$YZ>|w+ZcV!3HGCBrrxOL-(;dy> zdZ*&qHNWiF;`V9L-vumQ6mtJmBa--%XG3e?wcb2V(r~MXn-NRuJUdq zs9@ddjgLvt`^!xK9%s5HL&E4rm!tZYjYZsX+l5*T_?UX}s7p2;Q{tpKaYLw%7#gKz z10j#h%W`5T3uUo|!niNjRakH0)(4o>-3t^_p09d7@33+h%h~m&W(NK6Ppnr=VQN2= z_`=^GKU#wXo%Gv#jY_k7JpPnB zUM6D>RL5qcQ?5E-Z*hm!<@}yeb_YotA4B0clnZf0BR$VxOH1jJYp7noN|{=^EU7#$ zw#TQFo0yWj`2TmBmI{+{Lu46jV4qJuHfgmq_z`aV4LUbaUv5={&e;1@Lv zJ4JYpfr0&LcH=Ox*avJ!zWFp8|APue^odD2P2WZ`ed#+Ji>7ldgWRI2UF-li~Do zSgUP+TBvBT0j8o*jC4y?VSH6LVQ|ib!XM|%P&E9VS5#D{6!I4Iu6EvrFE4+V>Hd^_ zo`PBR@pCZjo$aT~=b9O?>ipMZRFH*Qr`9~4Pu?4q6;CU%rQBlGzBkqHPPFFX>wk>) zk)8h_erw}EIL?ivDP7Mmv=D>Ac)TT)ud3D;gJQ}*@J(mQNXAx5tR2Gq1Qkv!=f#sC zi1x6x7nIogh>+7}p1WKp=qbPp0T zzzz@<-InnAyIZ|gnh-D%rM7jXLQrv6)xY1y4ESorhwGA&R(!m_*;>l|JU(4%8x$Qw zAMefzm3(a2(R~39F+utkdVEAGDY%**?szj6iOUu;`L-sT&_^Arm=x9A z;1B~Xr@Kqvqpg&DC)nabcE0Yf@+Auk`c1jFGad1XwmZJPxbPD<+{kc=1%^ox?W?^& z>5@CgQQ0!3+%+Eq*T|U9q_fecbGbnmvtH;*6)X;r8eiLjZcjmNhf-_2uXTXym3T4H z;f~yloybs}xVCt@0nq(W0wuv|=KdJ({0DkD+BI(|29a5KzAK97(xp}W!Y*{F(zwr0 z)#b^gBzt4cyRQTHE695Cn1xjD_Fky>$v>KO4ScamAtP2g;8ogr>FYTit5khz-2$sg zP`P~uYYTQsk`Jfsb^$chM-IsMQb2bT$Q78*<5)B|zvgRENAK$1-<(iO7Ch%TYGWf> z|CNihkLjf{M{3C-9>G{ zwyPd-+}Fu8k`7B0k00wBq!^GtAdO&M>x;|2MQmH4kg*_~shJA6*ObRS$=R(;-i%sr zbf&BiyRoj_9EEDyNxp8=e;cEIU|hv#ik9x~US{ng3*NrEO@2kHiZodu!C1N~N2SfX zl-x%&*JUQeBdUNg-RkZ6DYYiMP49bkaur2k?Af5BRD>+F#AsIm&bjRd2#!8QS$iS; z5Sn=um;=i4yn!UY3f6$J86(a6O-tNtextj4`)xf(;gRD|W>= z9K7Rqata%21$lAS3VedW)vt%l=4RiaGNb-JBg zvK08rPW|UHmp9wnRbSSsjqN};o5prRyd7YhiJ3*LeiT=>l?@vqeN^409BE*tYKH`& zj#w~3h{xQtK{<(d=XGzU< zj!?}}%(udjFh0V%wI()r!#7cm#@>1ZCQz4a0&{~cCR{Fc`9*}s-DU2bcfLLkkjiA} zSN?bprz9HbvQVb$X|v)Qw?5ZNK@@=W*j#=~oXGuRCG@swlqU$g0Ht#k!Q|yW)?>o2 zcsC>gy6+}~Z54se==M4q*_F}ok<(^sGm1ZT{rIzxCw>>bh`Huu4lVCQBdfB3go0E7 z92Dr%K0wh#q@w@S9Kt9~I;xkYt&A5%IU5gjRv+7>DxE+1Zp;O}z0(PzNb9hA7eLH% zwT7J;Mh_!~!KE)dftLDKFft=vr_nFkKW{$72r4D{iY|&HSBgF7;huJy9QGQ}tZuc# zvmp2OG#rmQqv5MpX4;`9^NzgPY}sgflo~N+TWu&a;rP+%YP#*-qO}E+Y9Hufx)Y^kT1jW=~McmPd#!CU((+iH=-+j6I=)|Y#8yoX&yde$_0ZrFcjzNVqp#aICE6V`w8m;GA#wJks_Ll<*rA z9m)NgW|{kl!@SS$sGsxgy(LVrk5)r9@q0zZ;d?oFsR`>hpxU7(*9Tcj*sFxra=}om zS(EsLB9Ydhl#fEFi(t!>S(KS`lH~X_&AgLjw0_}~WE|oJMZ;sKVV^nmkM%`mWU628 zj7(JDiX9eNm( z`vA*GbMOVERBlZCR3YJlc?X=jnO^Z#*}b7th`1qC&I_bU-%I7wIT!6~du60Q{}`rg zu0E~TrD>%kO#Yh%K#zh&1P0f4;h{P1QBHq)Gxr8;injfVr*$FIj=6uK8VWA=0;O*c{SNKQ0h*y zU3sa%AWPn*Xv)?>FtY^6;Gfq?p0nfsm6o+bXb|9#Saj;z{e?r2NvWh-r82-?l!P=S z(1S{#R4?1%%^Pj{0}&Qlqe685dEWh+JBx9R{r7fV;We++Wb{4vITXz+0|=-e&Y+s4 zn^`JH9dLeX3gMM|0pu6-9TrkGSU8X(#b4m;vO^1I%dqfYHv`|AD6!&CM(?YM-7KnN zUiOiW04zDy)28pfca9RXCd?lCK6RE;BbRTk)7uJ=i|gw#L)0dIs((_GI)djk5PpN= zw|l`G2sM$=Kw1Cs7pZPrbd?hD~`$E2hePcad@l3{Kc?4ZR)2OcHp=6~<;VpiS9$?uS#?<54MwmDc}7181*bI~ zaqg`VEZSV(eD?H>;;M7jY$T<{G4;`)s$PGLaiw)(_^CA4HC6yqI+nL}BLZ#KkMbP{ zhv&#O9}3S@PSfrP%^E%1;SlS$THI$Hlh|t-fYNKo!pDnT};8DGBNB?(Xhyu($hto^ze|?Cbky zuWRdcjk)F=`Mb*m-{A6lH$(DI_qKP+dHedkam@TPabk^1##^mO^R&O|2hS+b_n$OO zC9s(+$-T(f$Flltfxt^Yh{pMG_4-W<#6K)RUgVi4i@d#qdYy*FWM4Qp+RO*&*h|lc zEMT()V;Hf-w6;sGpzc(rE?*P%EoZWGM9Yt*f|w(!aB&EaI74qj95g9JF4kVwZE?<>fDJ{BcJMK&z=I zZ%g=b9Hk6hgfw4peFz36jqnhkw^LpadsS-$!aHs=gQdii zvK5P6B8o)_%qs@PQ+D(tQq9KeGhOmu5(x)fWw5s!JZ)jo);&V#LsgIOp)>1zN0P#R zH;4z3Kx(m$O@1t}hFxKTsNaJ=$<0g(rAHOmCr?(1XqAg$q67(jYx2_u%5w$?pAT*v z9hO||nXS?pE~XQ9C6BEeNJr3Y%756Y*k^-?5`X(B?`rRd19Sy0tx|&o6g_a1tMgpI z>hSaZ1_~jY>TD$U$zgZd{K9(=iuGH%Y`Ms%EFR~+Za>5L1_E{U;rw3>t&>{|Ucp_J z)Lehpr{;Bd{)W`(a>k3RH<9zargTx-PLTA9M3QT283Y#}(d$*VX(ZSg^|ZjemCNN^ ze$<`}k&^09;z}nDsr{r`+a|b_#6ADRr_njkN&dud=B352)J)W7tTLps7kh+HV?(MW zNSmBnVP2#oeFuc^zR2d*jQ0@6d6q-B<76Gw0;KI4>y1*d*b|R~1cATLt{%b=og069 zJR4bPD~apLn`*9#i2G&2R>!Y{kYA11aJ@rO^X}T3kjIs5-G=8Za9tjc+`1JDetI~3 z{CcKq9>XPE$T8m0rFDzw-!5sluc>;={++iKN@iGYh5l=KNh1y##s~u`(=!ZJCJ$L| zTjVpC>f_yCnR)ebtDKP6KKR@y-g1teQi}+xtkh+=`aeeoX`wG-WSVIQ{C<#Y!05YK zbBE|6O5Cq2JO4D2Q*)H#X^$6)R%|j>R~{IgP)%rgaj77frQ8{_=DMrp`^xTlQ^=>d z75k0SXzkTitvLH6C)4?@`d!7&X~geYFvr$**vzL+fMMT4ycAP_T)Ys?4UFmQvrhmi zH_kZWr>BU)DC1*~-20*^4z*|{*D~>G3~l2}Q-PS*NoCaR!i76w>c0QfJmEZmQ*n14 zDyDF7Z}HscWjO`UH?0H`{%>-#@+b|bbjd8r_?~~+r*|3kXZm7PJp{0Rsna$%;^jo@AG*I;Xv1bJb`VcM9q0N+A2u3fjYjjkcMm`&n$3^CX!Gt?zx0vz zF|*PBk^JmFwz@ko!8aRIk9{{l)e#gS9!^?aK9A~LmJyx_2R8;W-sL#VHr+hR3-`u* z(zY&bmnbjnJBma4devzmCKO7BxG)j_{#3Q7{k~(N+3Q!)G^M;bKZo%^)AcL03gb6I zZqlY^u0=Chns$IuHX( zL*$n*8-TddeG#&_(a3Rm@O1}ShgG_LybTH!nqZ1PP|K1`xTri{n{Vl!1KV_jm z)uI3X@E{2K0$$nKplb7f?&7~M`1_aU!+O*seFqt^M zxQ%1h2S?4PILRvJay7sy{0Ydj&11YfSp4M$(kMp8@>OeNp)f$mCteEprA~5ly1#r! zFC0u9Kc0hhOC4!w9 zJ~4D`XnX|myElSXZ!-YCM0Nn#GIx!ap>dK?PWU6J-=P5%YO9%u(;~?v8E2v}81fQQ zx=MCcMo^6hts-J0De(O3p1L96hVqeaUI-Vq$Q8Ov*P)2U8>4>umaZptFruWuE0;@a za;Q8)D(;UDt)iR0+srw~PzHyW1F-9X8`reyEu)j}JbxM~we=uN8T%aB`GNi03;Yc_ z{7hLYha$Fk7iJmRx+oNnEGd6;z`FMj1k%6k>_b0REwJ z>m%~kV2DP{uAAfY))>l=wi#zNx!ge7f-JQw&_dM-Gvir^xIb=?=B`|I;guzMtEpw; z_lUoMk=NJ{Q&vKXFoSUL^jMw}HP>?Ru-7}4_r0-854=e?5Th}HC6osEgidz^eeoIU zM&AQozz$+H-*~ZIFm$T`+cS2F33fDaq}?Z8dbs?_HSaV~D!#u}Mti_c*eyPODw%iOQ4}V07|>76I@(ep6e|8J{!1sFc5ezKsCwJvN2hy6#IroUJAAw zC>7v<&LqU0-tON z8W^bz4C+$4K3IBL^@%u9_A}XX+d7Lasr66a2<+myByw8r&C8|8C^ib+T_Ro%7GGqf zKAN6)yQWXg)J@Xc!lWwZlQKOY{0xL>$L0|Mko_5;K4ZO#H72-}a~~^IW6jCZV7yog zQhPEUd6%zNp3N`|NVJTNbQkYqttp5%B`(M<1qLo9?P3DXW`X2a2PA(BL0vMpL> zY+SDy(fvwV_T>TA+h9icu~ew<3MT`qEG>wlRqyAr?wI1T?tZa|;K988J=+Dv4jPHb zJg0Vb0AkTrW-X&L=5x@zux}~nn-#^b(tt+vhuca}{rtPVZrayj4S|OLB8B^rcE$ zZ(Rj%gBETPQqImJI}?crIkht4tmzy~j-ai%C&1-zCn?8rZCmi;!~mdEQD^Bk%Xoly*|I+$arL@_bIYB?`}-P0reqx9F^4Ecv9D?OO%C_8))ia z;R7Timan3f)oHoblgejBKTs;v&wdh#t|EmU7Qx_e4aYaXIn8%gu4%sOSpXRe{dk|( zgCa>(=YTY{nW1h63*6efDc8FTeJdvW9l~ay9aFR0{*B+S3l@Q|6&_6rY#_LI+uk%0 zA{Bmx6yONzrnLdxKTOVB*Jr_RUUMap;?xjObKQyi17@Bygs zuE|0^KZu@#lsgj1=k2F=@v}X_H^1K?H3miT=2-^}tNu$OLEWLtZtnBiwFI-(9Kol@ z7G2(Vb^B|)9gQMh4{FinSwp|Vhcdo>*>8h*ha6pzx!!ySqr;_nFW|GyzU;W=6k&9d zyzU56w!R60;NamDR$K!X0o#pZi=miHfoOFM44odq*}dht&P@9S)PAp$hN~9hyl5Htb8n}%uP&b+Zh99C3p<|W=c@7gs3-swg= zOk#~o!JHXe&t=~-4WE41DLvrd!FmE=(9pcz!9p{B>pC!?S!}csU6>qRtK2xLaGmp@ zfsWN!k)NY&hn>--SrSs`brg zyZa682W%zy+yTUrSp4#JfN8fu+z;d)J%2qR`1hX2gAem}B4qpgh96gE#*a{VXPx`l zbMTq=x+PRJj_4~y2AawU^$o>RP7evezfA9bbqLXPTi=lWeyw9Nn?ihtUZwyofP6^Wr= zN-G*EI^;b8Ft1JO1#5bzo3+G}TTzdL4TeZr)2f-W_iO=I?=ge%n4iaS9rEKob^kGK zQFr7(4HZ0GYV7BZI{jpJw2* zjfI9D*i1nlDfx(i7}Xw17(p==0|;>QI-su}4f-5JRD`)2doT|gdAb87?iJDu*it2O zm_%F<#a9@+>$No`g7};&(t-P&;{BcFT1dk{)X$Jr;%WC61;5<2c?b8 zhwL{666}MW@_s|e2FT0oBg6mIx(5dn#X7mU@+G&t7YuA)}GN|1r$wZRQ}ac-$Ma4K`lz$lMdpH9(HXx+ekFHISJe2&8Q z&%y1*!wBF#8@qqYrrwx`sprT+jQ@)25)%3G>WrTqg7qd+93lG++xWMI#e#zv5dyV^FgD11s7kAv4*U37c-AmC#@VNgG>vu50J^v`kmk3tt zmT1=moI$i142LOa^IJ;*oxtfCdf2y-IPWY{-)Ryt>wP9TRHdU@{HiY>*K-uYG%38+ zpSu3tH*FGl^JylUkXETE`{1Jnfr^9Ri1o+^{uUT3f2i>+Eb>vm22 z4Ib^ui!2gdA3b^7x^Zv3{wFNKz37lD-Yc}8Vvf1b*z*pE9C2r}pabgey%C0E<=aAb zl;lmDm%`MIph$-NazPUo`zsQkIkntvP0AQbmE0vkp z%Yd`Z`w)@PPJH?tZU1)KvT;|gZUZ~Fz@=p1w=>AuX`xGZ)qtLQlEA<{!X2#Y|{9!=d?h ziJwT&t-fD>uHI2gBaSrdr2Jj$*Z#3cse1PcxvS@0Xj1;K*k;%KwNeli_bj3NzroD8 zd>uAf-iWmK^IX84^lorI;0&#i_7|Wv_T)VqDvNv7*mk}ImcWz61PJ*T=Enq`I!K#c zo;atX8~Q+S?&RLrsCactQ+!giU(Y%xc#Ot5(?tJtkEEe{aNkDtOC0u0YyfNz;6&=&E=nt;5cxr>e)b;WboZjjJxRYz4XI~F2&i2yxLbh3dXvx zuZyHsu--i|x(_)>F-;#tWLA$4`1`>43W~TQ=Wjmr%~dS6yN_9zPQlg&Qx6paEX`BH zT6K>;-JZUK6=t(-HNt~EjMd72o=O9g%}dN{u`BZ{^XhvC35rZM!W%1sSDt&ncrZ-c)o(~3FBh%SgSp933ss?f|VI+GdV9^nyK1t*R)s7>AAbX zI9I5C+(RgMwLxCH68eJ(#QzP*eaf%+nYp_)>Lw*S3#NR$ocEOx)O;YK;E8)4jx5D~ zO$OEL3{iwb;J2c03E$xug(x=s5Yq-GiW0Oho3vird$WUIdRluBez@1V_(yNg8nCc` zoM5Ug65PUdy+t=ArM-B%bUWlpMQ&JGF*%qaaV^C@9*OuJhlBcxZb{OP;bdoWIFa9m zWR!1sw;;?ZOod}`SF15pJuxzXWejiBfKUqeKA`c=#SC(mUOYmI zh_DrwHCuY+I|GC}(T9qD8`mV1W=DgN<@Xu=LnwrNGP2o;sdCg7FJ{u)VZUiSrcE7NNMgy7X079C@QI5r zsT`Y1aT#7)yqb-)-n2|`YsAYzw8}+d229AVbOG6{5=!k|k;*7H?d7Xq81v3(Iy~K=pDASNPXX950?2|ubEl@TGhj2&*vj59W7}#boT+x(% z99C=3e(=#o#AawX8KP-)dVxvF56cLzZ1voV?OXE-YA+rIPtA~H+LI<}E{b2^=()p) zM#MFMG53`IsyE!m%l70zGcldHR73=J&`V5tKgHe6I8I#tM4ENVDBYEOoSQ{Rw}o=* zQ3A-M&5P8Yr6f83icW{b`1VBSg(*isJN~H{fF-d332ZFYECSlMPZ)mUEoOGL;)T6= z+GO1xygAp1xTwyiobY}%PtlV1JNFbM^S9Ts5%#Yx!k}^8y{6X{FUJRk zn_}@j@n`wZGyNHFW!~BL*ImDL!YU{qTtN^;Gw_uB zej0Wn1-4i0(6I~&3t zpAh!$!i^c-f&Vfzg8c^?b-Zl5+zCzW*wQdTepXCCeGu;9py*XW@sAf2PfqHTja{8y z$Z7sA1$9FM9EIvtns)r~caO4*LEZ8M`lcH0g?hUQ17Oicww;tG)Ht5cBF(9&RzNDc zS^J3=0$$ysD|b{wcD0$r*{mMURZf7|?8e<~7AqpXb%>1e#<==<0?qKgC{cjI4gdMh zT8~oo>d5sWwzlI{GHu2Dc+HkT|9s}rJjfoY=TMnR4-LubFKA%hyx8C}erf)bUA@8M zeA9p0+eOsH=i5)GUuc}ZQh}f&PSe>EsUn|A-8#@ZBE!Fd5rFGVE|nZFTZI?+4Y;zw z|8Qkjyg*g?GVQG>Q9RqabXO)JyJL@{XqSV%KDRV?b4iB+kRvG!HMXE8%9O(nx!TD&3(R|RYyL)0x2T#-D?YO9mX zuYA~q}(1=QZWhC8T<-U?8Yf_ z98{r*kF99+!#;g1oFu9o>zP!@clr3#gEh8&K(}{zRX3NvDr6M>`m?7Vk;v zT12I0pi5~gorm-t$znP3O$N)g<&_1ZnP_Bm*2y)&I0cJb1CrAYj^9u8NR|&~89Z)7 z+(EB*q@el59{^=tH?(qdK2&bM2@!IRKq$ zwUUNbUX&DX1pB%*jZ+tmZ#9 z4Fy2tABn91f5S-ZFPoylZ|tr9kmMQ3=kQf=`oVT}40`bD{>Cg4DSj!4#&X0*ZQKsO ze7_zw_{gVX$Qu-j4J8;)x}}fY@3#@r)3n!G=E^ zUm<^cC&C->n0m?@ydaIwV8w2ceNLUQ;IAotgFkvi{v6vxR<&(Lx_Y`Mc!??vt0c-H zlFz_1qmrM(lAGmm+oF3E#B8p<)?ufwG8gi!QE%|Q$muoMjoh%a8xJsv@G>Rr1Jj&c z&U3OGAbLK&gX3n*BFR+1n%z6CqY+iXi8K~4c3kY2QBe1h9rhMxBW`4W%;1fe-TV+c z7b?K17emx5!W0m}ehJZ&ay3+0m-tw>t4OFX>8=&RBGyfE+Y1+2MJ^DYKECRJ1yz=G zRouUH6zJCMSE0Ip6P(2-)sYdx!vg%>?AkxDc|R0;pJr+GPpC0JgSMZSMY$>y|3Ldd7%Mzg9u_D%{jKl6kZLXfuLX%@q3W`f2HWH_ zdNEsIuRjyUfbqx9@er+vb7LN?8^3e{HgayCfIA)!b&;nNF%RXk zdnq#vmE$tYegskQ6BZx3)CkzDJ!{5R;1hbC@KkIlGyJoYP9CSgLPCtDw<<>xJCusx zaReu{gh(80p4b0CWZr5%*UL$^M^50>?#J#^6Tr(P?*kW9pMn+36VlMuh=kT844uOq;TtE~;-6iIa%Zom;|NQhN zj<a-8~aNcbpgfr^p^injWa?s)RxZkn03(Dz*hnt6-(SWhUH4YksXbLU?Z#`$d zhSi5*197M~-Z@Ry{4>q+@b>_|`5|ki4^vDXFc*N+7zxC7w#HXs^=h@>tTs>P$PQM!&WN)$gY)pKsgH@Yweep8j>PXlCtxk=sipDz5#rBoYfm4$*LtD)% zZ=GeAD2Rigt=S5xBz#xKRJ6#CnLg>5!ou*!>+7{rAk(%_+9*yUjT69JrDW+u?7F?X zTT!IqEzEuP{D)>Ck>!s~s%Wa0xNa(f6)!TLd#lb+gw_lRpn#3C#txic#iXd&^=5zw z7BrjFm8LE4Zs>U{n-s}t1g54sHP`6)RLO}s-78VzWt7J$T`xgVV?;`JnXSrNo66jn zEFCkD4o$dlghgsHLt>U8fwTqDCEV{27x zJ#0M}o#?54WUF7U%SY5nJ}a9XqZh97ua3MHVeWK@tW)oL$qcPYfPX-XqTO%6Q2;N;}u&x$Nt-hTh*kDUI z3BVF>b7PdoM~Lxs1yj6qil0m)@0QynLhEinTzxX3N$1EGA_#(vWAP* z0TbXAb^a->z`<+>RG&eJxDx3p@CZX^`aaa6gK?btHh$QlvpaSJlay(NP=d;&TzUyq z?3_8x#zqqH`2gD=A3eOzZhMWbO_5jmD;_i7LzTPiw@ig0oamC%Hv9SJ5?fA%FKH%Z z&0%mBIllh;dwx%CR;!PxjPg!8QY2F|U*~^609vIVcv&3wh&WB~m-;Vrre6{D#U<$p zcyGLyc5IK6gbvnOYH6z*tDmO{+@z}fx3yHSL0y1KZp`YGYp}!b;uoBMXJSkWzw_05 zZls_+0-D`|0jG_dH0s9@5s(%3!27iguL7Ke>! zQ9=8RPIY5$y^htzE;*M?(k^jWH2(}X57fsV>-wCOw?13)wW+{hwj0xbBs@5v?l3#T zsU{e@b@LRc5ILJn1cNa20*fnI3T|kWFN|89zq!6vw8;EVKmJF8cxLBSqt}yFDYofs zY-YDTW@Gijg|I#A6)rwb&1`k*xj?ZCRrI}WstSPG3&B~;;NdLxgW>A^3rdB_M;<(` zN1Ywbto@mxG8wLlL{MLNMnYj=6{*q3x$a=_;m?w#gXj$){inij<{~vgDUw%p_vqQF zOf%fGMr9VH#6?+ZP(WJN=}WSlJsYCukB9bMT0Or9P^b^?z}69J5772**^fBSV~kWy z=%GlYSJ+u8iOwuY8{JU&qUvX9?FHCldZAEt6~;uy0BXK&%jasdx42TVjDucEbAJg| zo4=d_;MF>gd`Qy`Ja;#!CoVqgdCpXs2j;@u12mPAEui-qHGk;}iRY*v zsr*shU6y_{cl^*4PUbCGcaj@_NTo0}-H(V94#I~auLs`;3^<^xrnuUhj>{FZJZgKx zo4^bzP+Fe=66nXvBYr!N8-#Q&g+)~c&OvAn2{(P*p$KMEe1@L9yC>8RAD1G{JVPE4 zZ32#wZ)3K~8v7u&d57p4G02DFPYtQM2js$wfc%{Um99G4$SC0eid}LaBVT+}E?^AI zq~jT=mS#*d`0RH(mXtSMG_N!_f#1Zcm?oC-X57^OlDK07OSZ-VXO)7Pm}Ca8DFjR{K{1=`K-hNyt8_AmZvIoF5{-n>fP zO%X><0U+kG+-q+_0=N%l5ri{|JZ?$OzOMbK_k)LSLD7_-0p7|8vBS*bG>uikvBq!o zw)EB3p8$tlyz%01$$Qp-Nf-E=%i~o=zTN#RRa$UdzHM0OVy)ZCFQAq7#nET!yzb@9 z(p~lCfmH9;5ohMeUC*3j)RPA5LyDyGrx6qKjOPx6H7bl3r$b%LBvs^v3n#2}XeW%e z8-s2`au{2)E9R)>t_CWrwOvxZ$Eq!YbWjdyJnIm8>M@_X;}Hgi$_42E5mI{K5*8H|&OV(TsVWc$TcZ?Ijt0ECoJE&JCI_jrSV zzo6RFi8YPksDnf8@M(-Rtwe2`H&K9Qx|{vA?*K*%|pwfmXk7B zX4|yIj~rtDM9Q*~^2t-YUXNMohoAR46{{lbdp0`Y&7_g~5fpw8>Q)ZPO*y(Uv${In z#6AJs-FMT!-ylrt+f%Ac**md7S56sdL`Ako6uDE>>>>ppAyhm`KpOkq&;~g+Vg&^V zsLk;b+4Z6cNFxuRf>HoeE%dQitbQ<8d*dOInUS@5vjud+?Un#cw%4p$v_#~^P-@^= zs%8$o;Q7pPil+HsdKO9_MXP@|6*h#177Zdrd?6MHxC$>eX6ve{&C?C!>@fARqVn=j z;*Dyj@I}9b!GK)^%@YcUfp5yp*3e;*els-0cH}U9UDiJou$Wq10u*@H@#Paa=;>=O zl!iP8_hr7{7E)O>0D8x#Z$k4g?X(te{nLBt6_e+M5v}Ysaq&4m#!+{#a!Np>xI!63 zA-++<{^1P(UbH0`w+8Z(ue8rIRjULxs^{HK=W(vY;UXn}r)659h|(k&uBgd_<$C>? zK9msQX^?BxUEKseG89Ig~=Q=t?Rc-j$MN+_=T9;I%?cF zqUP%Nt12M${>I^}sXx^80we%nM5i6(vNx7-BT_wXMKZJqvrPD`e;Rd__ORrPctJ;au1j_cMAuH{&|1qAe@D7(d)eoeX`{Z`aBDSIE#=&R+92FZ z7XZsFnhZFDofGfI^q9iy%ZcOZmN{u7zZ4?kp<)p8(1jr(dOw?@s-T~uAtYrIKtgu-het zwilMIqr!OC8<0|_%#gRXXVwpXF>}u{6`5lq@cE$=Zyk=Ba4}Yr4Bo6%Tbu(jP}gUR zIOHL8(U-4>4)5GS_LbK3n+k{g;;hu7RTuo?MmL*z_q0=Lw-qPf1dl`SxD}Z1z8v)C z$Yt-?^x-0norms{itCT0JKJ}oG_vRuM~qC5&j55YKhE6qDj7$eDw^#q3XPKqKdK>2 z(zyBO#nPu7+Iq*_#{~`&bP}#)34`{*Zu?D_0FFiK^rvb69{t)Q?vZd{)>UYJ8%c%# zTK|3DwXvuO(+jx-HY9*Y?RPy%cnf^0wOmg}D{}uT`r@zj)NWc%SBcqF=ey_#n2yNE z6P|cgTpwoeH2Mt1IF@XjZ=6>eA2$PK-Nn8~LmxMlDTG3DsGVs_L1Sh~7JA#z7=BH? zZ^ePe%q+HgoyLh0&R0gfDTvO05;l(6qx#9 zTqE8QbVL+*tM$4{ufwBFC$-?7fl8q{_AW~)hxoSoP0QzY?Bu5}_YHuBstePUelUV4 z9!6OT8g%j$V4CPwob8e5vRFmS7(E}8B>{h)Cba6 zE=9IPsS7VxzAYcr$K8|w!c;@?3G=0ZS#tjnkCCSo@51FPg8_F6-B%hWvp*^s3EVbv zHIh(m3E!r*9dqoE z@8<$uAN$i)KJBSnH-Qha0{%um%DgBEwchJNc@(#t`Y~CP9nyal?1?9yB~o7;CZ{tP zzZ+s)<%M4&4%n`<;b*P;a|SBCA#XaLaMep1In?KO-4l8LXg-Z6(biadaJ9_FlhU0I z$t{JI5zqC|j)eFUuk($|*+tM<|38FoRbND%e6LO{Qf@Y6rc)ohVQV0c`YagWEyf9X zrS!1YoD4#{C$bbHEoFnDoMa(kxtnzubjOVes@W_mR<->MArOtdm*%+tL&E_4?lfO$ z7$~8f+KQ`!Ac@Y57)8-km(*KIh@omto07kXP?o;dXfgvafgLvXTU7*dQKhXE?exb zAmGD`vKKE6SjbzIe|K0!bNoXHLG>W;13*g%}xr=vhblyw|h7hNwvqt^-ct zLSKHhmmz=n$r6vsv&lpGSlD<&y?kcbfNvbssEdtvnZ@we1xi%1E9>)`M?GEpKhGOb z8;z{2x-pfpyWfU5711~Xj%_-hNkPt^F9IJU25`vFThAKSEStM5C|v_=NUjz|`r)*L zlL1j(&h3XX#~;!b#KV5K>ZERdQ35#v)tzT2Ex@uZ0GrzIbkl49QBpwl$H}4VQlSFW zMxl%E@yzotGM$)|=cyv!g0#WUT`@8f7&{{mG$qi*q`w+V0wKO3R)8P)h$Oxc<+N5#fi& zlB=B@t%5v7YV*4EEZf}kN5QB9dFvd3t-|Z`>b6P<{L8ZcJjnm^--G{a3iN!{>>bC| zufQ|K5cyJi`1`-K_?j0J0IT)_oG&Z?KZrXhKE?d2w!{8GW3cODp=|nZ8iVH# z4N5N1#s6D-yP^Qsn7W)P9Qi}_|6f1E9vTd9Qe*kI_ND>=R9AUitCsg~l9RxP2A_MB z8~m>g{rSU6Y_MH6UAHM$`~$!IU(fz8N!~+)VlYOX|El7k2348SzIDT_f9q2;SfIf` zxV{MdzgfutYkMQ|4@*#Tf3LLpKdQk0<+|4t50zY`B+7pk@gzUIXWrDr=&64uzyD3d zBl%D&#Nv`M{I~Z0|8}egagmVMsMpo03K}r{CLGCAqJRlEz{M3R{d~Bz0Jf@VZdaS@ zzu#S({9AL=n7Ps36AyZk!td<_LO|JAfP4Q??Y=qqh0**#n=U&4-t%u=Ach2{G6M2o z>s6498Y%IJmc#wd<(oT0>j4C*HdkNl}bfmdn7kL8snD;^G@d=oo$eix}kIeJ`dZA6$ zJ`XJ?aG0xeAY5GvND=M20}}D2`1xU<;C+8HAdWBhHv;;7MFsHAMt+Dh06Yb%IBpQj zR+)9HUpcCbQe3;XrPIqkj%xWp$a?bA`5ei8T54Bp;i&t5l{1;90{)j@D57`>k(x0} zkmdjW@JEp0Oo7@2WMh1Q+1Z)&!PFD+o!PZ-DoiaejME1xIF8ML;~U3nVJBL1(1PL# ztdw8$I01H6Gq@cu5Iw|#S{^wS)C9=os&5yy!A^Do7)Ua_D56xif=n1^eDw?==DoTz z8_9jcUbX~&p>`=aDZ?+fe?@5k`AGz7;xFIsO6UMjMED|&;W+tUj~>0;krEYpTa6Bk z>vt*&8&S2KHnSpLR)Rv<6QCo|J!pHz>g6zpuWjwtX82mE>&?eY`sDwfi=@C9i1C)C zsK*iB0b61Wn*vZz15sLDY(>N*Er43J>`;M9&X5%ej)J2Y3$?SrV_cUIk&bdEcFf$O z{t&+UvDnXw>7t4u>2IV0_OEZj-wzcZ>ra&GHY+LcCu26GKRMYN9sWsb*7~-tCHxgi zz2hOU_3;Fe3RF~mN2IpEh7=BHtV|BB_k%nE&$B^X`J&(buAFfkkXVT7!7pJi3s%mZ z`uYlZ|9gVGHSg$)%^aU*Kv~1OV>nv@%A8YP)BY5G-WotR59-Zcv1QL9qEu;R`R~z8 z<_YF0%vTX^Pi6dXfwHPuiaI$de3vTmBUX~bTrCv;6d1cAJkz?U4*on!d;oxBF6`T+29 zaT3~)@!bJC0~K)NjkV9kg4|F*fo>_KZM_+2(xb3LHO=#~A#cF1<9=L;_}_Ckjz9Qy zjxfp=K(zz*LN3R0&0uoaVWV@y046KA8U$=kc(#DFJ7bo<;DFkjBAofY&R(9?{B&W~ zf%?i>N*$mP^2r36wuAGOTxXKps!uEj^==og_uUWf`pIsP!_hb<$c!h;vQp`cduxqJ z0CnCC1V*ru?gO~~tJc})1%*AJH9%b|Hlq0S_%CtXq+z0yP0WK-fI)hUsjK4ds@Dt1 z+SpV}b%e%htTD^gQfAf7ig0C9__&)yIkdmI6(u8~pCI;{^xWEvH_7HDur z<>CZ`>Cw3kg8?M4>?!L($Zm@BP?y23&}rih57j|OkRL&DcLn3gPN4HBklcF$6tp!p z5^=KgwB4h>tVa$Z=Pmz|2*$&dP2yq>E`Od>=>Io0eR_JStq}nfi)UHfdtl*F52(I@ zZ+Z9W{uTr0JqhA>5Q){F)6uv(@m)Wt&rD3Z=6bL0382Go6u5wbCho}ks;LaSkAFVx zs%rRD^yuh+){z+W2OuKA#tx!40}T4_F&~6-4LE=|ZZTy*a>+pIb5 z=7Rr9mI|7pGS;pP=>Tj5sS3nV_{VRTG|U07MtODh%kOhey))&!(~-JZ?cwWBl<#jX z*UBS5cM#cB{L;CHyhQSAtvj1CsG0wO=7Cw7$ z9kc8|zT4Km$0`IIKa+mL!=<(dg%E)zaCF3$nvqYo|I}Zp5La!`Wz&YCFhoJRv|CsX z&qK;fD2e3`r$03gi-EH)C}%|FjmKLe0I-;=2*Gvk)K4&6nH6;VK*bi!)olaDi?~01 z|1NLp4`S=z&3zv~m#5)*0u`YPq>Agmht^xtzh0y{sAuJ*&IwL@h<)!u3j#I97JzC6 zP3C0ZU3-rmv*pY0PB6z4Az2Bj(-E8o4^M(~>e zOP1@*2W?;Xn`J#q4hqbJQG1Xsk{xblEf*3-{Y?9&|54;S%&*V{wW8#+HxZillZ{D} zy3uQp!vR|YwhgC}%J3-kqLRkj-RBZrS&>#(b56a@q{!-Uoe3|u` z*n{49b$P<2$eS;$PQp1(*9B8kzpYk{D(`xsFw~HlsUue2UpLBl0xhh!8VBHx)-3u8 zsWH2OTrz#BLZ(PQd238P1CLr9^)E6pH;Yp@?D)09?R%xa&iX7h$T>~4cGzEPA_Q&G$H<1*tWpa&VGNIXD-tcFblOJ87*QplX^?) z_I@gk2{oN_CP zzvttVRV`yf-0Cxp3-N(xfwo&CosG|ciZYwCpg31`sj*gbeb()C zG~co|GhDyHT*}OlAE@Tghm+rHOf|U0hD;$;||Dti?aYwm3pysg|i)P zJCFSiWWm9^lko`5(L8d6LU&2-Z-jjwKSYGyibj6tixh<~Bs3ps/_SblsDrB8_5 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

x6z|_PVrlPgL9JdJC+S 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

XWq_sXtjGf!gYoQX@lO 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

S=UEFrEasMTsnH>;TAK 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�O?){@jrUV{$<(HLf3bIXf;!;p+2c35@K2n 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 S<^cXz2nugiWvZpjg8vsX-~kT+ diff --git a/docs/images/collect_logs.png b/docs/images/collect_logs.png new file mode 100644 index 0000000000000000000000000000000000000000..60e73470c5ca56811b18bf5677812ee0ec977d08 GIT binary patch literal 31064 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 D)?1VD literal 0 HcmV?d00001 diff --git a/docs/images/recordTraceCommand.png b/docs/images/recordTraceCommand.png deleted file mode 100644 index 51c1e8b6fd48a07c51293322de2f3ec16c715b8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8203 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 diff --git a/docs/images/selectDumpsWithTrace.png b/docs/images/selectDumpsWithTrace.png deleted file mode 100644 index 82eba7f0c17b85c4b5d2c68b873609b2b6ff09d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50564 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%0A#dpNj3MfJ5Pnrcy#U5`vVYae`6ki!1GZZ3zS^>t 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 diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index f0e2bc952d..ecdd104beb 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -171,33 +171,6 @@ "Failed to change context for {0}: {1}": "Failed to change context for {0}: {1}", "Select project context": "Select project context", "C# configuration has changed. Would you like to reload the window to apply your changes?": "C# configuration has changed. Would you like to reload the window to apply your changes?", - "Language server process not found, ensure the server is running.": "Language server process not found, ensure the server is running.", - "Capture Dumps With Trace": "Capture Dumps With Trace", - "Optionally select dump(s) to capture before and after the trace": "Optionally select dump(s) to capture before and after the trace", - "Save Trace and Logs": "Save Trace and Logs", - "Folder for trace file {0} does not exist/{0} is the folder path": { - "message": "Folder for trace file {0} does not exist", - "comment": [ - "{0} is the folder path" - ] - }, - "Failed to execute dotnet-trace command: {0}/dotnet-trace is a command name and should not be localized": { - "message": "Failed to execute dotnet-trace command: {0}", - "comment": [ - "dotnet-trace is a command name and should not be localized" - ] - }, - "Open Folder": "Open Folder", - "C# logs saved successfully.": "C# logs saved successfully.", - "Verifying dotnet-trace.../dotnet-trace is a command name and should not be localized": { - "message": "Verifying dotnet-trace...", - "comment": [ - "dotnet-trace is a command name and should not be localized" - ] - }, - "Required dump tools could not be installed.": "Required dump tools could not be installed.", - "Recording logs... Click Cancel to stop and save.": "Recording logs... Click Cancel to stop and save.", - "Creating archive...": "Creating archive...", "Collecting memory dump...": "Collecting memory dump...", "Collecting GC dump...": "Collecting GC dump...", "Memory Dump": "Memory Dump", @@ -237,32 +210,54 @@ "{0} is the tool name and should not be localized" ] }, - "Select Dump Type": "Select Dump Type", - "Choose dump type(s) to collect": "Choose dump type(s) to collect", - "Save Dump": "Save Dump", - "Folder for dump file {0} does not exist/{0} is the folder path": { - "message": "Folder for dump file {0} does not exist", + "Language server process not found, ensure the server is running.": "Language server process not found, ensure the server is running.", + "Failed to collect logs: {0}/{0} is the error message": { + "message": "Failed to collect logs: {0}", "comment": [ - "{0} is the folder path" + "{0} is the error message" ] }, - "Collect Dump": "Collect Dump", - "Failed to collect dump: {0}/{0} is the error message": { - "message": "Failed to collect dump: {0}", + "Open Folder": "Open Folder", + "C# logs saved successfully.": "C# logs saved successfully.", + "Record Activity": "Record Activity", + "Capture live C#, LSP trace, and Razor log output": "Capture live C#, LSP trace, and Razor log output", + "Records verbose extension logging and stops when canceled.": "Records verbose extension logging and stops when canceled.", + "Performance Trace": "Performance Trace", + "Record a dotnet-trace of the language server": "Record a dotnet-trace of the language server", + "Captures runtime events from the language server process until canceled.": "Captures runtime events from the language server process until canceled.", + "Creates a full process dump for troubleshooting and analysis.": "Creates a full process dump for troubleshooting and analysis.", + "Captures managed heap information for investigating memory issues.": "Captures managed heap information for investigating memory issues.", + "Collect C# Logs": "Collect C# Logs", + "Select additional logging to collect": "Select additional logging to collect", + "Verifying dotnet-trace.../dotnet-trace is a command name and should not be localized": { + "message": "Verifying dotnet-trace...", "comment": [ - "{0} is the error message" + "dotnet-trace is a command name and should not be localized" + ] + }, + "Verifying dotnet-dump.../dotnet-dump is a command name and should not be localized": { + "message": "Verifying dotnet-dump...", + "comment": [ + "dotnet-dump is a command name and should not be localized" + ] + }, + "Verifying dotnet-gcdump.../dotnet-gcdump is a command name and should not be localized": { + "message": "Verifying dotnet-gcdump...", + "comment": [ + "dotnet-gcdump is a command name and should not be localized" ] }, - "Dump saved successfully.": "Dump saved successfully.", - "Verifying tools...": "Verifying tools...", - "Capturing C# Logs": "Capturing C# Logs", "Save Logs": "Save Logs", - "Failed to save C# logs: {0}/{0} is the error message": { - "message": "Failed to save C# logs: {0}", + "Output folder {0} does not exist/{0} is the folder path": { + "message": "Output folder {0} does not exist", "comment": [ - "{0} is the error message" + "{0} is the folder path" ] }, + "Creating archive...": "Creating archive...", + "Recording trace... Click Cancel to stop and save.": "Recording trace... Click Cancel to stop and save.", + "Recording logs... Click Cancel to stop and save.": "Recording logs... Click Cancel to stop and save.", + "Collecting C# Logs": "Collecting C# Logs", "Generated document not found": "Generated document not found", "Nested Code Action": "Nested Code Action", "Fix All: ": "Fix All: ", diff --git a/package.json b/package.json index 64a6ad5a0a..a78903bf01 100644 --- a/package.json +++ b/package.json @@ -1952,20 +1952,8 @@ "enablement": "isWorkspaceTrusted && dotnet.server.activationContext == 'OmniSharp'" }, { - "command": "csharp.recordLanguageServerTrace", - "title": "%command.csharp.recordLanguageServerTrace%", - "category": "CSharp", - "enablement": "isWorkspaceTrusted && (dotnet.server.activationContext == 'Roslyn' || dotnet.server.activationContext == 'RoslynDevKit')" - }, - { - "command": "csharp.captureLogs", - "title": "%command.csharp.captureLogs%", - "category": "CSharp", - "enablement": "isWorkspaceTrusted && (dotnet.server.activationContext == 'Roslyn' || dotnet.server.activationContext == 'RoslynDevKit')" - }, - { - "command": "csharp.collectDump", - "title": "%command.csharp.collectDump%", + "command": "csharp.collectLogs", + "title": "%command.csharp.collectLogs%", "category": "CSharp", "enablement": "isWorkspaceTrusted && (dotnet.server.activationContext == 'Roslyn' || dotnet.server.activationContext == 'RoslynDevKit')" }, diff --git a/package.nls.cs.json b/package.nls.cs.json index 0b771db689..a4b3ee6d77 100644 --- a/package.nls.cs.json +++ b/package.nls.cs.json @@ -1,15 +1,13 @@ { "command.csharp.attachToProcess": "Připojení k procesu .NET 5+ nebo .NET Core", - "command.csharp.captureLogs": "Zachytávat výstup protokolu", + "command.csharp.collectLogs": "Collect C# Logs", "command.csharp.changeProjectContext": "Změna kontextu projektu aktivního dokumentu", "command.csharp.changeProjectContextEditor": "Vybrat kontext projektu", "command.csharp.changeProjectContextFileExplorer": "Vybrat kontext projektu", - "command.csharp.collectDump": "Shromáždit výpis paměti jazykového serveru C#", "command.csharp.downloadDebugger": "Stáhnout ladicí program .NET Core", "command.csharp.listProcess": "Vypsat proces pro připojení", "command.csharp.listRemoteDockerProcess": "Výpis procesů v připojení Dockeru", "command.csharp.listRemoteProcess": "Vypsat procesy pro připojení na vzdáleném připojení", - "command.csharp.recordLanguageServerTrace": "Záznam trasování výkonu jazykového serveru C#", "command.csharp.reportIssue": "Nahlásit problém", "command.csharp.rerunSourceGenerators": "Znovu spustit zdrojové generátory", "command.csharp.showDecompilationTerms": "Zobrazit smlouvu o podmínkách dekompilátoru", @@ -267,4 +265,4 @@ "generateOptionsSchema.targetOutputLogPath.description": "Při nastavení této možnosti se text, který cílová aplikace zapisuje do stdout a stderr (např. Console.WriteLine), uloží do zadaného souboru. Tato možnost se bude ignorovat, pokud je konzola nastavená na jinou hodnotu než internalConsole. Příklad: ${workspaceFolder}/out.txt", "generateOptionsSchema.type.markdownDescription": "Typ kódu, který se má ladit. Může to být buď coreclr pro ladění .NET Core, nebo cclr pro Desktop .NET Framework. clr funguje pouze v systému Windows, protože Desktop Framework je určen pouze pro Windows.", "viewsWelcome.debug.contents": "[Generování prostředků jazyka C# pro sestavení a ladění](command:dotnet.generateAssets)\r\n\r\nDalší informace o souboru launch.json najdete v tématu [Konfigurace souboru launch.json pro ladění v jazyce C#](https://aka.ms/VSCode-CS-LaunchJson)." -} \ No newline at end of file +} diff --git a/package.nls.de.json b/package.nls.de.json index a71067de5c..5201bd889d 100644 --- a/package.nls.de.json +++ b/package.nls.de.json @@ -1,15 +1,13 @@ { "command.csharp.attachToProcess": "An einen .NET 5+ oder .NET Core-Prozess anfügen", - "command.csharp.captureLogs": "Protokollausgabe erfassen", + "command.csharp.collectLogs": "Collect C# Logs", "command.csharp.changeProjectContext": "Projektkontext des aktiven Dokuments ändern", "command.csharp.changeProjectContextEditor": "Projektkontext auswählen", "command.csharp.changeProjectContextFileExplorer": "Projektkontext auswählen", - "command.csharp.collectDump": "Speicherabbild des C#-Computersprachservers erfassen", "command.csharp.downloadDebugger": ".NET Core-Debugger herunterladen", "command.csharp.listProcess": "Prozess zum Anfügen auflisten", "command.csharp.listRemoteDockerProcess": "Prozesse für Docker-Verbindung auflisten", "command.csharp.listRemoteProcess": "Prozesse für Remoteverbindung zum Anfügen auflisten", - "command.csharp.recordLanguageServerTrace": "Leistungsablaufverfolgung des C#-Sprachservers aufzeichnen", "command.csharp.reportIssue": "Ein Problem melden", "command.csharp.rerunSourceGenerators": "Quellgeneratoren erneut ausführen", "command.csharp.showDecompilationTerms": "Vereinbarung zu den Decompilerbedingungen anzeigen", @@ -267,4 +265,4 @@ "generateOptionsSchema.targetOutputLogPath.description": "Bei Festlegung wird Text, den die Zielanwendung in \"stdout\" und \"stderr\" (z. B. Console.WriteLine) schreibt, in der angegebenen Datei gespeichert. Diese Option wird ignoriert, wenn die Konsole auf einen anderen Wert als internalConsole festgelegt ist. Beispiel: \"${workspaceFolder}/out.txt\"", "generateOptionsSchema.type.markdownDescription": "Geben Sie den Typ des zu debuggenden Codes ein. Dies kann `coreclr` für das .NET Core-Debugging oder `clr` für Desktop .NET Framework sein. `clr` funktioniert nur für Windows, da das Desktopframework nur Windows ist.", "viewsWelcome.debug.contents": "[C#-Objekte für Build und Debuggen generieren](command:dotnet.generateAssets)\r\n\r\nWeitere Informationen zu launch.json finden Sie unter [Konfigurieren von launch.json für das C#-Debuggen](https://aka.ms/VSCode-CS-LaunchJson)." -} \ No newline at end of file +} diff --git a/package.nls.es.json b/package.nls.es.json index 8f647b3432..0d02f4fcf8 100644 --- a/package.nls.es.json +++ b/package.nls.es.json @@ -1,15 +1,13 @@ { "command.csharp.attachToProcess": "Adjuntar a un proceso de .NET 5 (o posterior) o .NET Core", - "command.csharp.captureLogs": "Capturar salida de registro", + "command.csharp.collectLogs": "Collect C# Logs", "command.csharp.changeProjectContext": "Cambiar el contexto del proyecto del documento activo", "command.csharp.changeProjectContextEditor": "Seleccionar contexto de proyecto", "command.csharp.changeProjectContextFileExplorer": "Seleccionar contexto de proyecto", - "command.csharp.collectDump": "Recopilación de un volcado del servidor de lenguaje C#", "command.csharp.downloadDebugger": "Descargar depurador de .NET Core", "command.csharp.listProcess": "Enumerar proceso que se va a adjuntar", "command.csharp.listRemoteDockerProcess": "Enumerar procesos en conexión de Docker", "command.csharp.listRemoteProcess": "Enumerar procesos en conexión remota para adjuntar", - "command.csharp.recordLanguageServerTrace": "Registro del seguimiento del rendimiento del servidor de Lenguaje C#", "command.csharp.reportIssue": "Informar de un problema", "command.csharp.rerunSourceGenerators": "Volver a ejecutar los generadores de origen", "command.csharp.showDecompilationTerms": "Mostrar el contrato de términos del descompilador", @@ -267,4 +265,4 @@ "generateOptionsSchema.targetOutputLogPath.description": "Cuando se establece, el texto que la aplicación de destino escribe en stdout y stderr (por ejemplo, Console.WriteLine) se guardará en el archivo especificado. Esta opción se omite si la consola se establece en un valor distinto de internalConsole. Por ejemplo, \"${workspaceFolder}/out.txt\"", "generateOptionsSchema.type.markdownDescription": "Escriba el tipo de código que se va a depurar. Puede ser \"coreclr\" para la depuración de .NET Core o \"clr\" para desktop .NET Framework. \"clr\" solo funciona en Windows, ya que el marco de trabajo de escritorio es solo de Windows.", "viewsWelcome.debug.contents": "[Generar recursos de C# para compilación y depuración](command:dotnet.generateAssets)\r\n\r\nPara obtener más información sobre launch.json, consulte [Configuración de launch.json para la depuración de C#](https://aka.ms/VSCode-CS-LaunchJson)." -} \ No newline at end of file +} diff --git a/package.nls.fr.json b/package.nls.fr.json index a8e18c135c..cce21f9859 100644 --- a/package.nls.fr.json +++ b/package.nls.fr.json @@ -1,15 +1,13 @@ { "command.csharp.attachToProcess": "Attacher à un processus .NET 5+ ou .NET Core", - "command.csharp.captureLogs": "Capturer la sortie des journaux", + "command.csharp.collectLogs": "Collect C# Logs", "command.csharp.changeProjectContext": "Modifier le contexte du projet du document actif", "command.csharp.changeProjectContextEditor": "Sélectionner le contexte du projet", "command.csharp.changeProjectContextFileExplorer": "Sélectionner le contexte du projet", - "command.csharp.collectDump": "Collecter un vidage du serveur de langage C#", "command.csharp.downloadDebugger": "Télécharger le débogueur .NET Core", "command.csharp.listProcess": "Processus de liste pour la pièce jointe", "command.csharp.listRemoteDockerProcess": "Répertorier les processus sur la connexion Docker", "command.csharp.listRemoteProcess": "Répertorier les processus sur la connexion à distance pour la pièce jointe", - "command.csharp.recordLanguageServerTrace": "Enregistrer une trace de performance du serveur de langage C#", "command.csharp.reportIssue": "Signaler un problème", "command.csharp.rerunSourceGenerators": "Réexécuter les générateurs sources", "command.csharp.showDecompilationTerms": "Afficher l'accord sur les termes du décompilateur", @@ -267,4 +265,4 @@ "generateOptionsSchema.targetOutputLogPath.description": "Lorsqu’il est défini, le texte écrit par l’application cible dans stdout et stderr (par exemple, Console.WriteLine) est enregistré dans le fichier spécifié. Cette option est ignorée si la console a une valeur autre que internalConsole. Exemple : « ${workspaceFolder}/out.txt »", "generateOptionsSchema.type.markdownDescription": "Type de code à déboguer. Peut être soit « coreclr » pour le débogage .NET Core, soit « clr » pour Desktop .NET Framework. `clr` ne fonctionne que sous Windows car le framework Desktop est uniquement Windows.", "viewsWelcome.debug.contents": "[Générer des ressources C# pour la génération et le débogage](command:dotnet.generateAssets)\r\n\r\nPour en savoir plus sur launch.json, consultez [Configuration de launch.json pour le débogage C#](https://aka.ms/VSCode-CS-LaunchJson)." -} \ No newline at end of file +} diff --git a/package.nls.it.json b/package.nls.it.json index fad63fda7a..8d68aa2f73 100644 --- a/package.nls.it.json +++ b/package.nls.it.json @@ -1,15 +1,13 @@ { "command.csharp.attachToProcess": "Allega a un processo .NET 5+ o .NET Core", - "command.csharp.captureLogs": "Acquisisci output log", + "command.csharp.collectLogs": "Collect C# Logs", "command.csharp.changeProjectContext": "Modifica il contesto del progetto del documento attivo", "command.csharp.changeProjectContextEditor": "Selezionare contesto progetto", "command.csharp.changeProjectContextFileExplorer": "Selezionare contesto progetto", - "command.csharp.collectDump": "Raccogliere un dump del server di linguaggio C#", "command.csharp.downloadDebugger": "Scarica il debugger di .NET Core", "command.csharp.listProcess": "Elenca i processi per il collegamento", "command.csharp.listRemoteDockerProcess": "Elenca i processi nella connessione Docker", "command.csharp.listRemoteProcess": "Elenca i processi nella connessione remota per il collegamento", - "command.csharp.recordLanguageServerTrace": "Registra una traccia delle prestazioni del server di linguaggio C#", "command.csharp.reportIssue": "Segnala un problema", "command.csharp.rerunSourceGenerators": "Esegui di nuovo generatori di codice sorgente", "command.csharp.showDecompilationTerms": "Mostra il contratto per i termini del decompilatore", @@ -267,4 +265,4 @@ "generateOptionsSchema.targetOutputLogPath.description": "Quando questa opzione è impostata, il testo che l'applicazione di destinazione scrive in stdout e stderr, ad esempio Console.WriteLine, verrà salvato nel file specificato. Questa opzione viene ignorata se la console è impostata su un valore diverso da internalConsole. Ad esempio '${workspaceFolder}/out.txt'.", "generateOptionsSchema.type.markdownDescription": "Digitare il tipo di codice di cui eseguire il debug. Può essere `coreclr` per il debug di .NET Core o `clr` per .NET Framework desktop. `clr` funziona solo su Windows poiché il framework desktop è solo per Windows.", "viewsWelcome.debug.contents": "[Genera risorse C# per compilazione e debug](command:dotnet.generateAssets)\r\n\r\nPer altre informazioni su launch.json, vedere [Configurazione di launch.json per il debug di C#](https://aka.ms/VSCode-CS-LaunchJson)." -} \ No newline at end of file +} diff --git a/package.nls.ja.json b/package.nls.ja.json index 4f88f72082..baf217a4c3 100644 --- a/package.nls.ja.json +++ b/package.nls.ja.json @@ -1,15 +1,13 @@ { "command.csharp.attachToProcess": ".NET 5 以降または .NET Core プロセスにアタッチする", - "command.csharp.captureLogs": "ログ出力のキャプチャ", + "command.csharp.collectLogs": "Collect C# Logs", "command.csharp.changeProjectContext": "アクティブなドキュメントのプロジェクト コンテキストを変更する", "command.csharp.changeProjectContextEditor": "プロジェクト コンテキストの選択", "command.csharp.changeProjectContextFileExplorer": "プロジェクト コンテキストの選択", - "command.csharp.collectDump": "C# 言語サーバーのダンプを収集する", "command.csharp.downloadDebugger": ".NET Core デバッガーをダウンロードする", "command.csharp.listProcess": "アタッチのプロセスをリスト表示する", "command.csharp.listRemoteDockerProcess": "Docker 接続のプロセスをリスト表示する", "command.csharp.listRemoteProcess": "アタッチ用のリモート接続のプロセスをリスト表示する", - "command.csharp.recordLanguageServerTrace": "C# 言語サーバーのパフォーマンス トレースを記録する", "command.csharp.reportIssue": "問題の報告", "command.csharp.rerunSourceGenerators": "ソース ジェネレーターの再実行", "command.csharp.showDecompilationTerms": "逆コンパイラの使用契約条件を表示する", @@ -267,4 +265,4 @@ "generateOptionsSchema.targetOutputLogPath.description": "設定すると、ターゲット アプリケーションが StdOut および stderr (例: Console.WriteLine) に書き込むテキストが指定したファイルに保存されます。コンソールが internalConsole 以外に設定されている場合、このオプションは無視されます。例: '${workspaceFolder}/out.txt'", "generateOptionsSchema.type.markdownDescription": "デバッグするコードの種類を入力します。.NET Core デバッグの場合は `coreclr`、デスクトップ .NET Framework の場合は `clr` のいずれかを指定できます。デスクトップ フレームワークは Windows 専用であるため、`clr` は Windows でのみ動作します。", "viewsWelcome.debug.contents": "[ビルドおよびデバッグ用の C# 資産の生成](command:dotnet.generateAssets)\r\n\r\nlaunch.json の詳細については、[C# デバッグ用の launch.json の構成](https://aka.ms/VSCode-CS-LaunchJson). を参照してください。" -} \ No newline at end of file +} diff --git a/package.nls.json b/package.nls.json index 177c894aef..5828561c92 100644 --- a/package.nls.json +++ b/package.nls.json @@ -21,9 +21,7 @@ "command.csharp.reportIssue": "Report an issue", "command.csharp.rerunSourceGenerators": "Rerun Source Generators", "command.csharp.showDecompilationTerms": "Show the decompiler terms agreement", - "command.csharp.recordLanguageServerTrace": "Record a performance trace of the C# Language Server", - "command.csharp.captureLogs": "Capture Log Output", - "command.csharp.collectDump": "Collect a dump of the C# Language Server", + "command.csharp.collectLogs": "Collect C# Logs", "command.extension.showRazorCSharpWindow": "Show Razor CSharp", "command.extension.showRazorHtmlWindow": "Show Razor Html", "command.razor.reportIssue": "Report a Razor issue", diff --git a/package.nls.ko.json b/package.nls.ko.json index 5e1490b7a6..dde4bd139a 100644 --- a/package.nls.ko.json +++ b/package.nls.ko.json @@ -1,15 +1,13 @@ { "command.csharp.attachToProcess": ".NET 5+ 또는 .NET Core 프로세스에 연결", - "command.csharp.captureLogs": "로그 출력 캡처", + "command.csharp.collectLogs": "Collect C# Logs", "command.csharp.changeProjectContext": "활성 문서의 프로젝트 컨텍스트 변경", "command.csharp.changeProjectContextEditor": "프로젝트 컨텍스트 선택", "command.csharp.changeProjectContextFileExplorer": "프로젝트 컨텍스트 선택", - "command.csharp.collectDump": "C# 언어 서버의 덤프 수집", "command.csharp.downloadDebugger": ".NET Core 디버거 다운로드", "command.csharp.listProcess": "연결 프로세스 나열", "command.csharp.listRemoteDockerProcess": "Docker 연결에 프로세스 나열", "command.csharp.listRemoteProcess": "첨부할 원격 연결의 프로세스 나열", - "command.csharp.recordLanguageServerTrace": "C# 언어 서버의 성능 추적 기록", "command.csharp.reportIssue": "문제 신고", "command.csharp.rerunSourceGenerators": "원본 생성기 다시 실행", "command.csharp.showDecompilationTerms": "디컴파일러 계약 표시", @@ -267,4 +265,4 @@ "generateOptionsSchema.targetOutputLogPath.description": "설정하면 대상 애플리케이션이 stdout 및 stderr(예: Console.WriteLine)에 쓰는 텍스트가 지정된 파일에 저장됩니다. 콘솔이 internalConsole 이외의 것으로 설정된 경우 이 옵션은 무시됩니다(예: '${workspaceFolder}/out.txt')", "generateOptionsSchema.type.markdownDescription": "디버깅할 코드 형식입니다. .NET Core 디버깅의 경우 `coreclr`, 데스크톱 .NET Framework의 경우 `clr`일 수 있습니다. 데스크톱 프레임워크는 Windows 전용이므로 `clr`은 Windows에서만 작동합니다.", "viewsWelcome.debug.contents": "[빌드와 디버그를 위한 C# 자산 생성](command:dotnet.generateAssets)\r\n\r\nlaunch.json에 관해 자세히 알아보려면 [C# 디버깅을 위한 launch.json 구성](https://aka.ms/VSCode-CS-LaunchJson)을 참조하세요." -} \ No newline at end of file +} diff --git a/package.nls.pl.json b/package.nls.pl.json index 7a8b648f7f..97805eec29 100644 --- a/package.nls.pl.json +++ b/package.nls.pl.json @@ -1,15 +1,13 @@ { "command.csharp.attachToProcess": "Dołączanie do procesu platformy .NET 5 lub .NET Core", - "command.csharp.captureLogs": "Przechwyć dane wyjściowe dziennika", + "command.csharp.collectLogs": "Collect C# Logs", "command.csharp.changeProjectContext": "Zmień kontekst projektu dokumentu aktywnego", "command.csharp.changeProjectContextEditor": "Wybierz kontekst projektu", "command.csharp.changeProjectContextFileExplorer": "Wybierz kontekst projektu", - "command.csharp.collectDump": "Zbierz zrzut serwera języka C#", "command.csharp.downloadDebugger": "Pobierz debuger platformy .NET Core", "command.csharp.listProcess": "Wyświetl proces do dołączenia", "command.csharp.listRemoteDockerProcess": "Wyświetl listę procesów w połączeniu platformy Docker", "command.csharp.listRemoteProcess": "Wyświetl listę procesów w połączeniu zdalnym do dołączenia", - "command.csharp.recordLanguageServerTrace": "Rejestrowanie śledzenia wydajności serwera języka C#", "command.csharp.reportIssue": "Zgłoś problem", "command.csharp.rerunSourceGenerators": "Ponownie uruchom generatory źródeł", "command.csharp.showDecompilationTerms": "Pokaż umowę warunków dekompilowania", @@ -267,4 +265,4 @@ "generateOptionsSchema.targetOutputLogPath.description": "Po ustawieniu tekst, który aplikacja docelowa zapisuje w stdout i stderr (np. Console.WriteLine), zostanie zapisany w określonym pliku. Ta opcja jest ignorowana, jeśli konsola jest ustawiona na wartość inną niż internalConsole, np. \"${workspaceFolder}/out.txt\"", "generateOptionsSchema.type.markdownDescription": "Wpisz typ kodu do debugowania. Może to być „coreclr” na potrzeby debugowania platformy .NET Core lub „clr” dla platformy klasycznej .NET Framework. Element „clr” działa tylko w systemie Windows, ponieważ platforma klasyczna działa tylko w systemie Windows.", "viewsWelcome.debug.contents": "[Generuj zasoby języka C# na potrzeby kompilacji i debugowania](polecenie:dotnet.generateAssets)\r\n\r\nAby dowiedzieć się więcej o uruchamianiu pliku launch.json, zobacz [Konfigurowanie pliku launch.json na potrzeby debugowania w języku C#](https://aka.ms/VSCode-CS-LaunchJson)." -} \ No newline at end of file +} diff --git a/package.nls.pt-br.json b/package.nls.pt-br.json index 8b217f97f0..e73a284125 100644 --- a/package.nls.pt-br.json +++ b/package.nls.pt-br.json @@ -1,15 +1,13 @@ { "command.csharp.attachToProcess": "Anexar a um processo .NET 5+ ou .NET Core", - "command.csharp.captureLogs": "Capturar Resultado do Log", + "command.csharp.collectLogs": "Collect C# Logs", "command.csharp.changeProjectContext": "Alterar o contexto do projeto do documento ativo", "command.csharp.changeProjectContextEditor": "Selecionar Contexto do Projeto", "command.csharp.changeProjectContextFileExplorer": "Selecionar Contexto do Projeto", - "command.csharp.collectDump": "Recolher um despejo do Servidor de Linguagem C#", "command.csharp.downloadDebugger": "Baixar o Depurador .NET Core", "command.csharp.listProcess": "Listar processo para anexar", "command.csharp.listRemoteDockerProcess": "Listar processos na conexão Docker", "command.csharp.listRemoteProcess": "Listar processos em conexão remota para anexar", - "command.csharp.recordLanguageServerTrace": "Gravar um rastreamento de desempenho do Servidor de Linguagem C#", "command.csharp.reportIssue": "Relatar um problema", "command.csharp.rerunSourceGenerators": "Executar novamente geradores de origem", "command.csharp.showDecompilationTerms": "Mostrar o contrato de termos do descompilador", @@ -267,4 +265,4 @@ "generateOptionsSchema.targetOutputLogPath.description": "Quando definido, o texto que o aplicativo de destino grava em stdout e stderr (ex: Console.WriteLine) será salvo no arquivo especificado. Essa opção será ignorada se o console for definido como algo diferente de internalConsole. Por exemplo. '${workspaceFolder}/out.txt'", "generateOptionsSchema.type.markdownDescription": "Tipo de código a ser depurado. Pode ser \"coreclr\" para a depuração do .NET Core ou \"clr\" para o .NET Framework para desktop. O \"clr\" só funciona no Windows, pois o Desktop Framework é exclusivo do Windows.", "viewsWelcome.debug.contents": "[Gerar ativos C# para Build e Depuração](command:dotnet.generateAssets)\r\n\r\nPara saber mais sobre launch.json, consulte [Como configurar launch.json para depuração C#](https://aka.ms/VSCode-CS-LaunchJson)." -} \ No newline at end of file +} diff --git a/package.nls.ru.json b/package.nls.ru.json index 563449ac9a..cdc65497b6 100644 --- a/package.nls.ru.json +++ b/package.nls.ru.json @@ -1,15 +1,13 @@ { "command.csharp.attachToProcess": "Присоединение к процессу .NET 5+ или .NET Core.", - "command.csharp.captureLogs": "Сбор выходных данных журнала", + "command.csharp.collectLogs": "Collect C# Logs", "command.csharp.changeProjectContext": "Изменить контекст проекта активного документа", "command.csharp.changeProjectContextEditor": "Выбор контекста проекта", "command.csharp.changeProjectContextFileExplorer": "Выбор контекста проекта", - "command.csharp.collectDump": "Сбор дампа языкового сервера C#", "command.csharp.downloadDebugger": "Скачать отладчик .NET Core", "command.csharp.listProcess": "Перечислить процесс для вложения", "command.csharp.listRemoteDockerProcess": "Список процессов подключения к Docker", "command.csharp.listRemoteProcess": "Список процессов при удаленном подключении для вложения", - "command.csharp.recordLanguageServerTrace": "Записать трассировку производительности языкового сервера C#", "command.csharp.reportIssue": "Сообщить о проблеме", "command.csharp.rerunSourceGenerators": "Повторный запуск исходных генераторов", "command.csharp.showDecompilationTerms": "Показать соглашение об условиях декомпиляции", @@ -267,4 +265,4 @@ "generateOptionsSchema.targetOutputLogPath.description": "Если этот параметр настроен, текст, который целевое приложение записывает в stdout и stderr (например, Console.WriteLine), будет сохранен в указанном файле. Этот параметр игнорируется, если для консоли настроено значение, отличное от internalConsole. Например, \"${workspaceFolder}/out.txt\"", "generateOptionsSchema.type.markdownDescription": "Введите тип кода для отладки. Может быть либо \"coreclr\" для отладки .NET Core, либо \"clr\" для классической .NET Framework. \"clr\" работает только в Windows, так как классическая платформа предназначена только для Windows.", "viewsWelcome.debug.contents": "[Создание ресурсов C# для сборки и отладки](command:dotnet.generateAssets)\r\n\r\nДополнительные сведения о launch.json см. в разделе [Настройка launch.json для отладки C#](https://aka.ms/VSCode-CS-LaunchJson)." -} \ No newline at end of file +} diff --git a/package.nls.tr.json b/package.nls.tr.json index edc845ae57..5c736f9c5d 100644 --- a/package.nls.tr.json +++ b/package.nls.tr.json @@ -1,15 +1,13 @@ { "command.csharp.attachToProcess": ".NET 5+ veya .NET Core işlemine ekleme", - "command.csharp.captureLogs": "Günlük Çıkışını Yakala", + "command.csharp.collectLogs": "Collect C# Logs", "command.csharp.changeProjectContext": "Etkin belgenin proje bağlamını değiştirin", "command.csharp.changeProjectContextEditor": "Proje Bağlamı Seç", "command.csharp.changeProjectContextFileExplorer": "Proje Bağlamı Seç", - "command.csharp.collectDump": "C# Dil Sunucusunun dökümünü topla", "command.csharp.downloadDebugger": ".NET Core Hata Ayıklayıcısını İndirin", "command.csharp.listProcess": "Ekleme işlemini listele", "command.csharp.listRemoteDockerProcess": "Docker bağlantısındaki işlemleri listeleme", "command.csharp.listRemoteProcess": "Eklemek için uzak bağlantıdaki işlemleri listeleyin", - "command.csharp.recordLanguageServerTrace": "C# Dil Sunucusunun performans izlemesini kaydet", "command.csharp.reportIssue": "Bir sorun bildirin", "command.csharp.rerunSourceGenerators": "Kaynak Oluşturucuları Yeniden Çalıştır", "command.csharp.showDecompilationTerms": "Derleyici koşulları sözleşmesini göster", @@ -267,4 +265,4 @@ "generateOptionsSchema.targetOutputLogPath.description": "Ayarlandığında hedef uygulamanın stdout ve stderr'a (ör. Console.WriteLine) yazdığı metin belirtilen dosyaya kaydedilir. Konsol, internalConsole dışında bir değere ayarlanmışsa bu seçenek yoksayılır. Ör. '${workspaceFolder}/out.txt'", "generateOptionsSchema.type.markdownDescription": "Hata ayıklamak için kodun türünü yazın. NET Core hata ayıklama için `coreclr` veya Masaüstü .NET Framework için `clr` olabilir. Masaüstü çerçevesi yalnızca Windows'a özel olduğundan `clr` yalnızca Windows'ta çalışır.", "viewsWelcome.debug.contents": "[Derleme ve Hata Ayıklama için C# Varlıkları Oluşturma](command:dotnet.generateAssets)\r\n\r\nlaunch.json hakkında daha fazla bilgi edinmek için bkz. [C# hata ayıklaması için launch.json yapılandırma](https://aka.ms/VSCode-CS-LaunchJson)." -} \ No newline at end of file +} diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json index 695afd1dec..4467dd952a 100644 --- a/package.nls.zh-cn.json +++ b/package.nls.zh-cn.json @@ -1,15 +1,13 @@ { "command.csharp.attachToProcess": "附加到 .NET 5+ 或 .NET Core 进程", - "command.csharp.captureLogs": "捕获日志输出", + "command.csharp.collectLogs": "Collect C# Logs", "command.csharp.changeProjectContext": "更改活动文档的项目上下文", "command.csharp.changeProjectContextEditor": "选择项目上下文", "command.csharp.changeProjectContextFileExplorer": "选择项目上下文", - "command.csharp.collectDump": "收集 C# 语言服务器的转储", "command.csharp.downloadDebugger": "下载 .NET Core 调试程序", "command.csharp.listProcess": "列出要附加的进程", "command.csharp.listRemoteDockerProcess": "列出 Docker 连接上的进程", "command.csharp.listRemoteProcess": "列出远程连接上要附加的进程", - "command.csharp.recordLanguageServerTrace": "记录 C# 语言服务器的性能跟踪", "command.csharp.reportIssue": "报告问题", "command.csharp.rerunSourceGenerators": "重新运行源生成器", "command.csharp.showDecompilationTerms": "显示反编译程序条款协议", @@ -267,4 +265,4 @@ "generateOptionsSchema.targetOutputLogPath.description": "设置后,目标应用程序写入 stdout 和 stderr (例如 Console.WriteLine) 的文本将保存到指定的文件。如果控制台设置为 internalConsole 以外的其他内容,则忽略此选项。例如 \"${workspaceFolder}/out.txt\"", "generateOptionsSchema.type.markdownDescription": "键入要调试的代码类型。可以是用于 .NET Core 调试的“coreclr”,也可以是用于桌面 .NET Framework 的“clr”。由于桌面框架仅适用于 Windows,因此“clr”仅适用于 Windows。", "viewsWelcome.debug.contents": "[为版本和调试生成 C# 资产](command:dotnet.generateAssets)\r\n\r\n若要了解有关 launch.json 的详细信息,请参阅 [为 C# 调试配置 launch.json](https://aka.ms/VSCode-CS-LaunchJson)。" -} \ No newline at end of file +} diff --git a/package.nls.zh-tw.json b/package.nls.zh-tw.json index 120eacbcdb..7404cb87f4 100644 --- a/package.nls.zh-tw.json +++ b/package.nls.zh-tw.json @@ -1,15 +1,13 @@ { "command.csharp.attachToProcess": "連結至 .NET 5+ 或 .NET Core 程序", - "command.csharp.captureLogs": "擷取記錄輸出", + "command.csharp.collectLogs": "Collect C# Logs", "command.csharp.changeProjectContext": "變更使用中文件的專案内容", "command.csharp.changeProjectContextEditor": "選取專案内容", "command.csharp.changeProjectContextFileExplorer": "選取專案内容", - "command.csharp.collectDump": "收集 C# 語言伺服器的傾印", "command.csharp.downloadDebugger": "下載 .NET Core 偵錯工具", "command.csharp.listProcess": "列出連結的程序", "command.csharp.listRemoteDockerProcess": "列出 Docker 連線上的程序", "command.csharp.listRemoteProcess": "列出遠端連線上連結的程序", - "command.csharp.recordLanguageServerTrace": "記錄 C# 語言伺服器的效能追蹤", "command.csharp.reportIssue": "回報問題", "command.csharp.rerunSourceGenerators": "重新執行來源產生器", "command.csharp.showDecompilationTerms": "顯示解編程式條款合約", @@ -267,4 +265,4 @@ "generateOptionsSchema.targetOutputLogPath.description": "設定時,目標應用程式寫入 stdout 和 stderr 的文字 (例如: Console.WriteLine) 將會儲存到指定的檔案。如果主控台設定為 internalConsole 以外的項目,則會略過此選項。例如 '${workspaceFolder}/out.txt'", "generateOptionsSchema.type.markdownDescription": "輸入要進行偵錯的程式碼類型。可以是 `coreclr` 表示 .NET Core 偵錯,或 `clr` 表示桌面 .NET Framework。`clr` 僅在 Windows 上運作,因為桌面 Framework 僅限 Windows。", "viewsWelcome.debug.contents": "[為組建和偵錯產生 C# 資產](command:dotnet.generateAssets)\r\n\r\n若要深入了解 launch.json,請參閱[為 C# 偵錯設定 launch.json](https://aka.ms/VSCode-CS-LaunchJson)(英文)。" -} \ No newline at end of file +} diff --git a/src/csharpExtensionExports.ts b/src/csharpExtensionExports.ts index 0c389ed8c3..93c5bb69ed 100644 --- a/src/csharpExtensionExports.ts +++ b/src/csharpExtensionExports.ts @@ -25,7 +25,13 @@ export interface OmnisharpExtensionExports { } export interface ActivityLogCapture extends vscode.Disposable { - getActivityLogs(): { csharpLog: string; lspTraceLog: string; razorLog: string }; + getActivityLogs(): ActivityLogResult; +} + +export interface ActivityLogResult { + csharpLog: string; + lspTraceLog: string; + razorLog: string; } export interface CSharpExtensionExports { diff --git a/src/lsptoolshost/commands.ts b/src/lsptoolshost/commands.ts index 6e3b7c821a..4bb3b5dd21 100644 --- a/src/lsptoolshost/commands.ts +++ b/src/lsptoolshost/commands.ts @@ -19,9 +19,7 @@ import { } from './projectContext/projectContextCommands'; import TelemetryReporter from '@vscode/extension-telemetry'; import { TelemetryEventNames } from '../shared/telemetryEventNames'; -import { registerCaptureLogsCommand } from './logging/captureLogs'; -import { registerTraceCommand } from './logging/profiling'; -import { registerDumpCommand } from './logging/dump'; +import { registerCollectLogsCommand } from './logging/collectLogs'; import { ObservableLogOutputChannel } from './logging/observableLogOutputChannel'; import { RazorLogger } from '../razor/src/razorLogger'; @@ -94,7 +92,5 @@ function registerExtensionCommands( context.subscriptions.push( vscode.commands.registerCommand('csharp.showOutputWindow', async () => outputChannel.show()) ); - registerCaptureLogsCommand(context, languageServer, outputChannel, csharpTraceChannel, razorLogger); - registerTraceCommand(context, languageServer, outputChannel, csharpTraceChannel, razorLogger); - registerDumpCommand(context, languageServer, outputChannel, csharpTraceChannel, razorLogger); + registerCollectLogsCommand(context, languageServer, outputChannel, csharpTraceChannel, razorLogger); } diff --git a/src/lsptoolshost/logging/captureLogs.ts b/src/lsptoolshost/logging/captureLogs.ts deleted file mode 100644 index e67a92c3a2..0000000000 --- a/src/lsptoolshost/logging/captureLogs.ts +++ /dev/null @@ -1,128 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import * as vscode from 'vscode'; -import { RoslynLanguageServer } from '../server/roslynLanguageServer'; -import { ObservableLogOutputChannel } from './observableLogOutputChannel'; -import { createActivityLogCapture, createZipWithLogs, getDefaultSaveUri } from './loggingUtils'; -import { RazorLogger } from '../../razor/src/razorLogger'; - -/** - * Registers the command to capture log output. - */ -export function registerCaptureLogsCommand( - context: vscode.ExtensionContext, - languageServer: RoslynLanguageServer, - outputChannel: ObservableLogOutputChannel, - traceChannel: ObservableLogOutputChannel, - razorLogger: RazorLogger -): void { - context.subscriptions.push( - vscode.commands.registerCommand('csharp.captureLogs', async () => { - await captureLogsToZip(context, languageServer, outputChannel, traceChannel, razorLogger); - }) - ); -} - -async function captureLogsToZip( - context: vscode.ExtensionContext, - languageServer: RoslynLanguageServer, - outputChannel: ObservableLogOutputChannel, - traceChannel: ObservableLogOutputChannel, - razorLogger: RazorLogger -): Promise { - const capture = await createActivityLogCapture(languageServer, outputChannel, traceChannel, razorLogger); - - try { - await vscode.window.withProgress( - { - location: vscode.ProgressLocation.Notification, - title: vscode.l10n.t('Capturing C# Logs'), - cancellable: true, - }, - async (progress, token) => { - progress.report({ - message: vscode.l10n.t('Recording logs... Click Cancel to stop and save.'), - }); - - // Wait for the user to cancel the progress - await waitForCancellation(token); - - progress.report({ - message: vscode.l10n.t('Creating archive...'), - }); - - // Get formatted log content from the capture - const { csharpLog, lspTraceLog, razorLog } = capture.getActivityLogs(); - - // Prompt user for save location - const saveUri = await vscode.window.showSaveDialog({ - defaultUri: getDefaultSaveUri(), - filters: { - // eslint-disable-next-line @typescript-eslint/naming-convention - 'Zip files': ['zip'], - }, - saveLabel: vscode.l10n.t('Save Logs'), - title: vscode.l10n.t('Save Logs'), - }); - - if (!saveUri) { - // User cancelled the save dialog - return; - } - - try { - await createZipWithLogs( - context, - outputChannel, - traceChannel, - razorLogger, - csharpLog, - lspTraceLog, - razorLog, - saveUri.fsPath - ); - const openFolder = vscode.l10n.t('Open Folder'); - const result = await vscode.window.showInformationMessage( - vscode.l10n.t('C# logs saved successfully.'), - openFolder - ); - if (result === openFolder) { - await vscode.commands.executeCommand('revealFileInOS', saveUri); - } - } catch (error) { - const errorMessage = error instanceof Error ? error.message : String(error); - await vscode.window.showErrorMessage( - vscode.l10n.t({ - message: 'Failed to save C# logs: {0}', - args: [errorMessage], - comment: ['{0} is the error message'], - }) - ); - } - } - ); - } finally { - // Always clean up observers and restore log levels - await capture.dispose(); - } -} - -/** - * Waits for the cancellation token to be triggered. - */ -export async function waitForCancellation(token: vscode.CancellationToken): Promise { - return new Promise((resolve) => { - if (token.isCancellationRequested) { - resolve(); - return; - } - - const disposable = token.onCancellationRequested(() => { - disposable.dispose(); - resolve(); - }); - }); -} diff --git a/src/lsptoolshost/logging/collectLogs.ts b/src/lsptoolshost/logging/collectLogs.ts new file mode 100644 index 0000000000..9abe01b283 --- /dev/null +++ b/src/lsptoolshost/logging/collectLogs.ts @@ -0,0 +1,505 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as fs from 'fs'; +import * as path from 'path'; +import * as vscode from 'vscode'; +import { RoslynLanguageServer } from '../server/roslynLanguageServer'; +import { showErrorMessageWithOptions } from '../../shared/observers/utils/showMessage'; +import { ObservableLogOutputChannel } from './observableLogOutputChannel'; +import { + DumpRequest, + collectDumps, + createZipWithLogs, + getDefaultSaveUri, + getDumpConfig, + promptForToolArguments, + verifyOrAcquireDotnetTool, + DumpType, + createActivityLogCapture, +} from './loggingUtils'; +import { runDotnetTraceInTerminal } from './profiling'; +import { RazorLogger } from '../../razor/src/razorLogger'; + +/** Represents the types of data the user can choose to collect */ +type CollectOption = 'activityLogs' | 'performanceTrace' | 'memoryDump' | 'gcDump'; + +interface CollectOptionQuickPickItem extends vscode.QuickPickItem { + option: CollectOption; +} + +interface LogsToCollect { + activityLogs: boolean; + performanceTrace: boolean; + memoryDump: boolean; + gcDump: boolean; +} + +/** + * Registers the unified collect logs command. + */ +export function registerCollectLogsCommand( + context: vscode.ExtensionContext, + languageServer: RoslynLanguageServer, + outputChannel: ObservableLogOutputChannel, + traceChannel: ObservableLogOutputChannel, + razorLogger: RazorLogger +): void { + context.subscriptions.push( + vscode.commands.registerCommand('csharp.collectLogs', async () => { + await collectLogs(context, languageServer, outputChannel, traceChannel, razorLogger); + }) + ); +} + +async function collectLogs( + context: vscode.ExtensionContext, + languageServer: RoslynLanguageServer, + outputChannel: ObservableLogOutputChannel, + traceChannel: ObservableLogOutputChannel, + razorLogger: RazorLogger +): Promise { + // Step 1: Let the user select which additional logs or dumps to collect. + const selectedLogs = await selectAdditionalLogs(); + if (!selectedLogs) { + return; + } + + const dumpSelected = selectedLogs.memoryDump || selectedLogs.gcDump; + + // processId is only required if the user is collecting a performance trace or memory dumps. + const processId = RoslynLanguageServer.processId ?? -1; + if (selectedLogs.performanceTrace || dumpSelected) { + // Validate process ID is available if trace or dumps are needed + if (processId === -1) { + showErrorMessageWithOptions( + vscode, + vscode.l10n.t('Language server process not found, ensure the server is running.'), + { modal: true } + ); + return; + } + } + + // Step 2: Verify tools and let the user customize arguments for each selected tool + const defaultSaveUri = getDefaultSaveUri('csharp-logs'); + const toolFolder = path.dirname(defaultSaveUri.fsPath); + + const toolConfigs = await prepareTools( + processId, + toolFolder, + outputChannel, + selectedLogs.performanceTrace, + selectedLogs.memoryDump, + selectedLogs.gcDump + ); + if (!toolConfigs) { + return; + } + + // Step 3: Prompt for save location + const zipFile = await chooseSaveLocation(defaultSaveUri); + if (!zipFile) { + return; + } + + // Step 4: Execute the collection + const archiveResult = + selectedLogs.activityLogs || selectedLogs.performanceTrace + ? await archiveActivity( + context, + languageServer, + outputChannel, + traceChannel, + razorLogger, + selectedLogs, + dumpSelected, + toolConfigs.dumpConfigs, + zipFile.parentFolder, + zipFile.uri, + toolConfigs.traceArgs + ) + : await archiveDumps( + context, + outputChannel, + traceChannel, + razorLogger, + toolConfigs.dumpConfigs, + zipFile.parentFolder, + zipFile.uri + ); + + // Show result message + if (archiveResult.errorMessage) { + showErrorMessageWithOptions( + vscode, + vscode.l10n.t({ + message: 'Failed to collect logs: {0}', + args: [archiveResult.errorMessage], + comment: ['{0} is the error message'], + }), + { modal: true } + ); + } else if (archiveResult.uri) { + const openFolder = vscode.l10n.t('Open Folder'); + const result = await vscode.window.showInformationMessage( + vscode.l10n.t('C# logs saved successfully.'), + openFolder + ); + if (result === openFolder) { + await vscode.commands.executeCommand('revealFileInOS', archiveResult.uri); + } + } +} + +async function selectAdditionalLogs(): Promise { + const items: CollectOptionQuickPickItem[] = [ + { + label: vscode.l10n.t('Record Activity'), + description: vscode.l10n.t('Capture live C#, LSP trace, and Razor log output'), + detail: vscode.l10n.t('Records verbose extension logging and stops when canceled.'), + option: 'activityLogs', + }, + { + label: vscode.l10n.t('Performance Trace'), + description: vscode.l10n.t('Record a dotnet-trace of the language server'), + detail: vscode.l10n.t('Captures runtime events from the language server process until canceled.'), + option: 'performanceTrace', + }, + { + label: vscode.l10n.t('Memory Dump'), + description: vscode.l10n.t('Process memory dump using dotnet-dump'), + detail: vscode.l10n.t('Creates a full process dump for troubleshooting and analysis.'), + option: 'memoryDump', + }, + { + label: vscode.l10n.t('GC Dump'), + description: vscode.l10n.t('Garbage collector heap dump using dotnet-gcdump'), + detail: vscode.l10n.t('Captures managed heap information for investigating memory issues.'), + option: 'gcDump', + }, + ]; + + const selected = await vscode.window.showQuickPick(items, { + title: vscode.l10n.t('Collect C# Logs'), + placeHolder: vscode.l10n.t('Select additional logging to collect'), + canPickMany: true, + }); + + if (!selected || selected.length === 0) { + return undefined; + } + + const selectedOptions = new Set(selected.map((s) => s.option)); + return { + activityLogs: selectedOptions.has('activityLogs'), + performanceTrace: selectedOptions.has('performanceTrace'), + memoryDump: selectedOptions.has('memoryDump'), + gcDump: selectedOptions.has('gcDump'), + }; +} + +async function prepareTools( + processId: number, + toolFolder: string, + outputChannel: ObservableLogOutputChannel, + performanceTrace: boolean, + memoryDump: boolean, + gcDump: boolean +): Promise< + | { + traceArgs: string | undefined; + dumpConfigs: DumpRequest[]; + } + | undefined +> { + let toolsReady = true; + let traceArgs: string | undefined; + const dumpConfigs: DumpRequest[] = []; + + await collectingWithProgress(/* cancellable */ false, async (progress) => { + if (performanceTrace) { + progress.report({ + message: vscode.l10n.t({ + message: 'Verifying dotnet-trace...', + comment: 'dotnet-trace is a command name and should not be localized', + }), + }); + + const installed = await verifyOrAcquireDotnetTool('dotnet-trace', toolFolder, progress, outputChannel); + if (!installed) { + toolsReady = false; + return; + } + + const defaultTraceArgs = `--process-id ${processId} --clreventlevel informational --providers "Microsoft-DotNETCore-SampleProfiler,Microsoft-Windows-DotNETRuntime,Microsoft-CodeAnalysis-General:0xFFFFFFFF:5,Microsoft-CodeAnalysis-Workspaces:0xFFFFFFFF:5,RoslynEventSource:0xFFFFFFFF:5"`; + traceArgs = await promptForToolArguments('dotnet-trace', defaultTraceArgs); + if (traceArgs === undefined) { + toolsReady = false; + return; + } + } + + if (memoryDump) { + progress.report({ + message: vscode.l10n.t({ + message: 'Verifying dotnet-dump...', + comment: 'dotnet-dump is a command name and should not be localized', + }), + }); + const installed = await verifyOrAcquireDotnetTool('dotnet-dump', toolFolder, progress, outputChannel); + if (!installed) { + toolsReady = false; + return; + } + + const config = getDumpConfig('memory'); + const defaultArgs = config.defaultArgs.replace('{processId}', processId.toString()); + const args = await promptForToolArguments(config.toolName, defaultArgs); + if (args === undefined) { + toolsReady = false; + return; + } + dumpConfigs.push({ type: 'memory' as DumpType, args }); + } + + if (gcDump) { + progress.report({ + message: vscode.l10n.t({ + message: 'Verifying dotnet-gcdump...', + comment: 'dotnet-gcdump is a command name and should not be localized', + }), + }); + const installed = await verifyOrAcquireDotnetTool('dotnet-gcdump', toolFolder, progress, outputChannel); + if (!installed) { + toolsReady = false; + return; + } + + const config = getDumpConfig('gc'); + const defaultArgs = config.defaultArgs.replace('{processId}', processId.toString()); + const args = await promptForToolArguments(config.toolName, defaultArgs); + if (args === undefined) { + toolsReady = false; + return; + } + dumpConfigs.push({ type: 'gc' as DumpType, args }); + } + }); + + if (!toolsReady) { + return undefined; + } + + return { + traceArgs, + dumpConfigs, + }; +} + +async function chooseSaveLocation( + defaultSaveUri: vscode.Uri +): Promise<{ uri: vscode.Uri; parentFolder: string } | undefined> { + const uri = await vscode.window.showSaveDialog({ + defaultUri: defaultSaveUri, + filters: { + // eslint-disable-next-line @typescript-eslint/naming-convention + 'Zip files': ['zip'], + }, + saveLabel: vscode.l10n.t('Save Logs'), + title: vscode.l10n.t('Save Logs'), + }); + if (!uri) { + return undefined; + } + + const parentFolder = path.dirname(uri.fsPath); + if (!fs.existsSync(parentFolder)) { + showErrorMessageWithOptions( + vscode, + vscode.l10n.t({ + message: 'Output folder {0} does not exist', + args: [parentFolder], + comment: ['{0} is the folder path'], + }), + { modal: true } + ); + return undefined; + } + + return { + uri, + parentFolder, + }; +} + +async function archiveDumps( + context: vscode.ExtensionContext, + outputChannel: ObservableLogOutputChannel, + traceChannel: ObservableLogOutputChannel, + razorLogger: RazorLogger, + dumpConfigs: DumpRequest[], + outputFolder: string, + saveUri: vscode.Uri +): Promise<{ uri: vscode.Uri | undefined; errorMessage: string | undefined }> { + let errorMessage: string | undefined; + let uri: vscode.Uri | undefined; + + await collectingWithProgress(/* cancellable */ false, async (progress) => { + try { + const collectedDumps = await collectDumps(dumpConfigs, outputFolder, progress, outputChannel); + + progress.report({ message: vscode.l10n.t('Creating archive...') }); + await createZipWithLogs( + context, + outputChannel, + traceChannel, + razorLogger, + /* activityLogs */ undefined, + saveUri.fsPath, + undefined, + collectedDumps + ); + + uri = saveUri; + } catch (error) { + errorMessage = error instanceof Error ? error.message : String(error); + } + }); + + return { + uri, + errorMessage, + }; +} + +async function archiveActivity( + context: vscode.ExtensionContext, + languageServer: RoslynLanguageServer, + outputChannel: ObservableLogOutputChannel, + traceChannel: ObservableLogOutputChannel, + razorLogger: RazorLogger, + selectedLogs: LogsToCollect, + dumpSelected: boolean, + dumpConfigs: DumpRequest[], + outputFolder: string, + saveUri: vscode.Uri, + traceArgs: string | undefined +): Promise<{ uri: vscode.Uri | undefined; errorMessage: string | undefined }> { + let errorMessage: string | undefined; + let uri: vscode.Uri | undefined; + + const capture = await createActivityLogCapture(languageServer, outputChannel, traceChannel, razorLogger); + + try { + let traceFilePath: string | undefined; + const dumpFiles: string[] = []; + + if (dumpSelected) { + await collectingWithProgress(/* cancellable */ false, async (progress) => { + const startDumps = await collectDumps(dumpConfigs, outputFolder, progress, outputChannel, 'before'); + dumpFiles.push(...startDumps); + }); + } + + const message = selectedLogs.performanceTrace + ? vscode.l10n.t('Recording trace... Click Cancel to stop and save.') + : vscode.l10n.t('Recording logs... Click Cancel to stop and save.'); + const collectTask = selectedLogs.performanceTrace + ? async (token: vscode.CancellationToken) => + runDotnetTraceInTerminal(traceArgs!.split(' '), outputFolder, outputChannel, token) + : async (token: vscode.CancellationToken) => await waitForCancellation(token); + + await collectingWithProgress(/* cancellable */ true, async (progress, token) => { + try { + progress.report({ message }); + traceFilePath = await collectTask(token); + } catch (error) { + errorMessage = error instanceof Error ? error.message : String(error); + } + }); + + if (errorMessage) { + return { + uri, + errorMessage, + }; + } + + const activityLogs = selectedLogs.activityLogs ? capture.getActivityLogs() : undefined; + + await collectingWithProgress(/* cancellable */ false, async (progress) => { + try { + if (dumpSelected) { + const afterDumps = await collectDumps(dumpConfigs, outputFolder, progress, outputChannel, 'after'); + dumpFiles.push(...afterDumps); + } + + progress.report({ + message: vscode.l10n.t('Creating archive...'), + }); + + await createZipWithLogs( + context, + outputChannel, + traceChannel, + razorLogger, + activityLogs, + saveUri.fsPath, + traceFilePath, + dumpFiles + ); + + uri = saveUri; + } catch (error) { + errorMessage = error instanceof Error ? error.message : String(error); + } + }); + } finally { + capture.dispose(); + } + + return { + uri, + errorMessage, + }; +} + +async function collectingWithProgress( + cancellable: boolean, + task: ( + progress: vscode.Progress<{ + message?: string; + increment?: number; + }>, + token: vscode.CancellationToken + ) => Promise +) { + return vscode.window.withProgress( + { + location: vscode.ProgressLocation.Notification, + title: vscode.l10n.t('Collecting C# Logs'), + cancellable: cancellable, + }, + task + ); +} + +/** + * Waits for the cancellation token to be triggered. + */ +async function waitForCancellation(token: vscode.CancellationToken): Promise { + return new Promise((resolve) => { + if (token.isCancellationRequested) { + resolve(undefined); + return; + } + + const disposable = token.onCancellationRequested(() => { + disposable.dispose(); + resolve(undefined); + }); + }); +} diff --git a/src/lsptoolshost/logging/dump.ts b/src/lsptoolshost/logging/dump.ts deleted file mode 100644 index 67e82b049e..0000000000 --- a/src/lsptoolshost/logging/dump.ts +++ /dev/null @@ -1,176 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import * as fs from 'fs'; -import * as path from 'path'; -import * as vscode from 'vscode'; -import { RoslynLanguageServer } from '../server/roslynLanguageServer'; -import { ObservableLogOutputChannel } from './observableLogOutputChannel'; -import { - DumpRequest, - collectDumps, - createZipWithLogs, - getDefaultSaveUri, - selectDumpsWithArguments, - verifyDumpTools, -} from './loggingUtils'; -import { showErrorMessageWithOptions } from '../../shared/observers/utils/showMessage'; -import { RazorLogger } from '../../razor/src/razorLogger'; - -export function registerDumpCommand( - context: vscode.ExtensionContext, - languageServer: RoslynLanguageServer, - outputChannel: ObservableLogOutputChannel, - traceChannel: ObservableLogOutputChannel, - razorLogger: RazorLogger -): void { - context.subscriptions.push( - vscode.commands.registerCommand('csharp.collectDump', async () => { - const processId = RoslynLanguageServer.processId; - if (!processId) { - showErrorMessageWithOptions( - vscode, - vscode.l10n.t('Language server process not found, ensure the server is running.'), - { modal: true } - ); - return; - } - - // Step 1: Let the user select dump type(s) and provide arguments - const dumpRequests = await selectDumpsWithArguments({ - title: vscode.l10n.t('Select Dump Type'), - placeHolder: vscode.l10n.t('Choose dump type(s) to collect'), - processId, - }); - if (!dumpRequests || dumpRequests.length === 0) { - return; // User cancelled - } - - // Step 2: Prompt the user for save location - const saveUri = await vscode.window.showSaveDialog({ - defaultUri: getDefaultSaveUri('csharp-dump'), - filters: { - // eslint-disable-next-line @typescript-eslint/naming-convention - 'Zip files': ['zip'], - }, - saveLabel: vscode.l10n.t('Save Dump'), - title: vscode.l10n.t('Save Dump'), - }); - if (!saveUri) { - return; // User cancelled - } - - const dumpFolder = path.dirname(saveUri.fsPath); - if (!fs.existsSync(dumpFolder)) { - showErrorMessageWithOptions( - vscode, - vscode.l10n.t({ - message: 'Folder for dump file {0} does not exist', - args: [dumpFolder], - comment: ['{0} is the folder path'], - }), - { modal: true } - ); - return; - } - - // Step 3: Collect dumps and create archive with progress - let errorMessage: string | undefined; - - await vscode.window.withProgress( - { - location: vscode.ProgressLocation.Notification, - title: vscode.l10n.t('Collect Dump'), - cancellable: false, - }, - async (progress) => { - try { - await executeDumpCollection( - context, - dumpRequests, - dumpFolder, - saveUri, - progress, - outputChannel, - traceChannel, - razorLogger - ); - } catch (error) { - errorMessage = error instanceof Error ? error.message : String(error); - } - } - ); - - // Show messages after progress is dismissed - if (errorMessage) { - showErrorMessageWithOptions( - vscode, - vscode.l10n.t({ - message: 'Failed to collect dump: {0}', - args: [errorMessage], - comment: ['{0} is the error message'], - }), - { modal: true } - ); - } else { - const openFolder = vscode.l10n.t('Open Folder'); - const result = await vscode.window.showInformationMessage( - vscode.l10n.t('Dump saved successfully.'), - openFolder - ); - if (result === openFolder) { - await vscode.commands.executeCommand('revealFileInOS', saveUri); - } - } - }) - ); -} - -/** - * Executes the dump collection and archiving. - */ -async function executeDumpCollection( - context: vscode.ExtensionContext, - dumpRequests: DumpRequest[], - dumpFolder: string, - saveUri: vscode.Uri, - progress: vscode.Progress<{ message?: string; increment?: number }>, - outputChannel: ObservableLogOutputChannel, - traceChannel: ObservableLogOutputChannel, - razorLogger: RazorLogger -): Promise { - // Verify tools are installed - progress.report({ - message: vscode.l10n.t('Verifying tools...'), - }); - - const toolsVerified = await verifyDumpTools(dumpRequests, dumpFolder, progress, outputChannel); - if (!toolsVerified) { - throw new Error(vscode.l10n.t('Required dump tools could not be installed.')); - } - - // Collect all dumps - const collectedDumps = await collectDumps(dumpRequests, dumpFolder, progress, outputChannel); - - // Collect logs and create archive - progress.report({ - message: vscode.l10n.t('Creating archive...'), - }); - - // Use createZipWithLogs which handles log files, settings, and additional files - // Pass empty strings for activity logs since we're not capturing activity during this command - await createZipWithLogs( - context, - outputChannel, - traceChannel, - razorLogger, - '', // No activity log content for dump command - '', // No activity log content for dump command - '', // No activity log content for dump command - saveUri.fsPath, - undefined, // No trace file - collectedDumps // Dump files as additional files (will be cleaned up) - ); -} diff --git a/src/lsptoolshost/logging/loggingUtils.ts b/src/lsptoolshost/logging/loggingUtils.ts index c910a05882..ca588bd7b6 100644 --- a/src/lsptoolshost/logging/loggingUtils.ts +++ b/src/lsptoolshost/logging/loggingUtils.ts @@ -10,7 +10,7 @@ import archiver from 'archiver'; import { execChildProcess } from '../../common'; import { Message, ObservableLogOutputChannel } from './observableLogOutputChannel'; import { RazorLogger } from '../../razor/src/razorLogger'; -import { ActivityLogCapture } from '../../csharpExtensionExports'; +import { ActivityLogCapture, ActivityLogResult } from '../../csharpExtensionExports'; import { RoslynLanguageServer } from '../server/roslynLanguageServer'; /** @@ -170,32 +170,6 @@ export async function selectDumpsWithArguments(options: SelectDumpsOptions): Pro return dumpRequests; } -/** - * Verifies that all dump tools are installed for the given requests. - * @param dumpRequests The dump requests to verify tools for - * @param folder The folder to run tool verification in - * @param progress Progress reporter - * @param outputChannel Output channel for logging - * @returns True if all tools are installed, false if cancelled or failed - */ -export async function verifyDumpTools( - dumpRequests: DumpRequest[], - folder: string, - progress: vscode.Progress<{ message?: string; increment?: number }>, - outputChannel: ObservableLogOutputChannel -): Promise { - // Get unique tool names to avoid verifying the same tool twice - const toolNames = new Set(dumpRequests.map((r) => getDumpConfig(r.type).toolName)); - - for (const toolName of toolNames) { - const toolInstalled = await verifyOrAcquireDotnetTool(toolName, folder, progress, outputChannel); - if (!toolInstalled) { - return false; - } - } - return true; -} - /** * Prompts the user for tool arguments with customizable defaults. * @param toolName The name of the tool (displayed in the input box title) @@ -336,9 +310,7 @@ export async function createZipWithLogs( outputChannel: ObservableLogOutputChannel, traceChannel: ObservableLogOutputChannel, razorLogger: RazorLogger, - csharpActivityLogContent: string, - traceActivityLogContent: string, - razorActivityLogContent: string, + activityLogs: ActivityLogResult | undefined, outputPath: string, traceFilePath?: string, additionalFiles?: string[] @@ -414,14 +386,10 @@ export async function createZipWithLogs( } // Add captured activity logs to the archive - if (csharpActivityLogContent !== '') { - archive.append(csharpActivityLogContent, { name: 'csharp.activity.log' }); - } - if (traceActivityLogContent !== '') { - archive.append(traceActivityLogContent, { name: 'csharp-lsp-trace.activity.log' }); - } - if (razorActivityLogContent !== '') { - archive.append(razorActivityLogContent, { name: 'razor.activity.log' }); + if (activityLogs) { + archive.append(activityLogs.csharpLog, { name: 'csharp.activity.log' }); + archive.append(activityLogs.lspTraceLog, { name: 'csharp-lsp-trace.activity.log' }); + archive.append(activityLogs.razorLog, { name: 'razor.activity.log' }); } // Add current settings to the archive diff --git a/src/lsptoolshost/logging/profiling.ts b/src/lsptoolshost/logging/profiling.ts index 849bdd5b66..ab632b15e7 100644 --- a/src/lsptoolshost/logging/profiling.ts +++ b/src/lsptoolshost/logging/profiling.ts @@ -7,21 +7,7 @@ import * as fs from 'fs'; import * as path from 'path'; import * as vscode from 'vscode'; import { EOL } from 'os'; -import { RoslynLanguageServer } from '../server/roslynLanguageServer'; -import { showErrorMessageWithOptions } from '../../shared/observers/utils/showMessage'; import { ObservableLogOutputChannel } from './observableLogOutputChannel'; -import { - verifyOrAcquireDotnetTool, - collectDumps, - createZipWithLogs, - getDefaultSaveUri, - selectDumpsWithArguments, - verifyDumpTools, - promptForToolArguments, - DumpRequest, - RazorLogObserver, -} from './loggingUtils'; -import { RazorLogger } from '../../razor/src/razorLogger'; const TraceTerminalName = 'dotnet-trace'; @@ -44,319 +30,46 @@ export function getProfilingEnvVars(outputChannel: vscode.LogOutputChannel): Nod return profilingEnvVars; } -interface TraceResults { - traceFilePath: string; - dumpFiles: string[]; - csharpLog: string; - lspLog: string; - razorLog: string; -} - -export function registerTraceCommand( - context: vscode.ExtensionContext, - languageServer: RoslynLanguageServer, - outputChannel: ObservableLogOutputChannel, - traceChannel: ObservableLogOutputChannel, - razorLogger: RazorLogger -): void { - context.subscriptions.push( - vscode.commands.registerCommand('csharp.recordLanguageServerTrace', async () => { - const processId = RoslynLanguageServer.processId; - if (!processId) { - showErrorMessageWithOptions( - vscode, - vscode.l10n.t('Language server process not found, ensure the server is running.'), - { modal: true } - ); - return; - } - - // Step 1: Get trace arguments - const dotnetTraceArgs = `--process-id ${processId} --clreventlevel informational --providers "Microsoft-DotNETCore-SampleProfiler,Microsoft-Windows-DotNETRuntime,Microsoft-CodeAnalysis-General:0xFFFFFFFF:5,Microsoft-CodeAnalysis-Workspaces:0xFFFFFFFF:5,RoslynEventSource:0xFFFFFFFF:5"`; - const userArgs = await promptForToolArguments('dotnet-trace', dotnetTraceArgs); - if (userArgs === undefined) { - return; // User cancelled - } - - // Step 2: Ask about optional dumps and get arguments - const dumpRequests = await selectDumpsWithArguments({ - title: vscode.l10n.t('Capture Dumps With Trace'), - placeHolder: vscode.l10n.t('Optionally select dump(s) to capture before and after the trace'), - processId, - allowEmpty: true, - }); - if (dumpRequests === undefined) { - return; // User cancelled - } - - // Step 3: Ask for save location - const saveUri = await vscode.window.showSaveDialog({ - defaultUri: getDefaultSaveUri('csharp-trace'), - filters: { - // eslint-disable-next-line @typescript-eslint/naming-convention - 'Zip files': ['zip'], - }, - saveLabel: vscode.l10n.t('Save Trace and Logs'), - title: vscode.l10n.t('Save Trace and Logs'), - }); - if (!saveUri) { - return; // User cancelled - } - - const traceFolder = path.dirname(saveUri.fsPath); - if (!fs.existsSync(traceFolder)) { - showErrorMessageWithOptions( - vscode, - vscode.l10n.t({ - message: 'Folder for trace file {0} does not exist', - args: [traceFolder], - comment: ['{0} is the folder path'], - }), - { modal: true } - ); - return; - } - - // Step 4: Execute the trace with progress - let traceResults: TraceResults | undefined; - let resultUri: vscode.Uri | undefined; - let errorMessage: string | undefined; - - await vscode.window.withProgress( - { - location: vscode.ProgressLocation.Notification, - title: 'dotnet-trace', - cancellable: true, - }, - async (progress, token) => { - try { - traceResults = await executeTraceCollection( - languageServer, - userArgs, - dumpRequests, - traceFolder, - progress, - outputChannel, - traceChannel, - razorLogger, - token - ); - } catch (error) { - errorMessage = error instanceof Error ? error.message : String(error); - } - } - ); - - if (errorMessage) { - showErrorMessageWithOptions( - vscode, - vscode.l10n.t({ - message: 'Failed to execute dotnet-trace command: {0}', - args: [errorMessage], - comment: 'dotnet-trace is a command name and should not be localized', - }), - { modal: true } - ); - return; - } - - if (!traceResults) { - return; - } - - // After the trace is stopped (via cancellation or natural completion), we need a new progress - // notification since the original one may have been dismissed by cancellation. - await vscode.window.withProgress( - { - location: vscode.ProgressLocation.Notification, - title: 'dotnet-trace', - cancellable: false, - }, - async (progress) => { - try { - resultUri = await saveTraceResults( - traceResults!, - context, - dumpRequests, - traceFolder, - saveUri, - progress, - outputChannel, - traceChannel, - razorLogger - ); - } catch (error) { - errorMessage = error instanceof Error ? error.message : String(error); - } - } - ); - - if (resultUri) { - const openFolder = vscode.l10n.t('Open Folder'); - const result = await vscode.window.showInformationMessage( - vscode.l10n.t('C# logs saved successfully.'), - openFolder - ); - if (result === openFolder) { - await vscode.commands.executeCommand('revealFileInOS', resultUri); - } - } - }) - ); -} - /** - * Executes the trace collection and archiving. + * Runs dotnet-trace in a VS Code terminal and returns the path to the .nettrace file. + * @param args The arguments to pass to `dotnet-trace collect` + * @param folder The working directory for the terminal + * @param outputChannel The output channel for logging + * @param token A cancellation token to stop the trace + * @returns The path to the generated .nettrace file, or undefined if not found */ -async function executeTraceCollection( - languageServer: RoslynLanguageServer, - userArgs: string, - dumpRequests: DumpRequest[], - traceFolder: string, - progress: vscode.Progress<{ message?: string; increment?: number }>, - outputChannel: ObservableLogOutputChannel, - traceChannel: ObservableLogOutputChannel, - razorLogger: RazorLogger, - cancellationToken: vscode.CancellationToken -): Promise { - // Verify dotnet-trace is installed - progress.report({ - message: vscode.l10n.t({ - message: 'Verifying dotnet-trace...', - comment: 'dotnet-trace is a command name and should not be localized', - }), - }); - - const dotnetTraceInstalled = await verifyOrAcquireDotnetTool('dotnet-trace', traceFolder, progress, outputChannel); - if (!dotnetTraceInstalled) { - return undefined; - } - - const allDumpFiles: string[] = []; - - // Verify dump tools if needed - if (dumpRequests.length > 0) { - const toolsVerified = await verifyDumpTools(dumpRequests, traceFolder, progress, outputChannel); - if (!toolsVerified) { - throw new Error(vscode.l10n.t('Required dump tools could not be installed.')); - } - - const startDumps = await collectDumps(dumpRequests, traceFolder, progress, outputChannel, 'before-trace'); - allDumpFiles.push(...startDumps); - } - - const csharpLogObserver = outputChannel.observe(); - const traceLogObserver = traceChannel.observe(); - const razorLogObserver = new RazorLogObserver(razorLogger); - - // Set log levels to Trace for capture and get the restore function - const restoreLogLevels = await languageServer.setLogLevelsForCapture(); - razorLogger.traceEnabled = true; - razorLogger.debugEnabled = true; - razorLogger.infoEnabled = true; - - try { - const terminal = await getOrCreateTerminal(traceFolder, outputChannel); - - const args = ['collect', ...userArgs.split(' ')]; - - progress.report({ message: vscode.l10n.t('Recording logs... Click Cancel to stop and save.') }); - const traceFilePath = await runDotnetTrace(args, terminal, traceFolder, cancellationToken); - if (!traceFilePath) { - return undefined; - } - - return { - traceFilePath, - dumpFiles: allDumpFiles, - csharpLog: csharpLogObserver.getLog(), - lspLog: traceLogObserver.getLog(), - razorLog: razorLogObserver.getLog(), - }; - } finally { - // Always clean up observers and restore log levels - csharpLogObserver.dispose(); - traceLogObserver.dispose(); - await restoreLogLevels(); - await razorLogger.updateLogLevelAsync(); - } -} - -async function saveTraceResults( - traceResults: TraceResults, - context: vscode.ExtensionContext, - dumpRequests: DumpRequest[], - traceFolder: string, - saveUri: vscode.Uri, - progress: vscode.Progress<{ message?: string; increment?: number }>, - outputChannel: ObservableLogOutputChannel, - traceChannel: ObservableLogOutputChannel, - razorLogger: RazorLogger -): Promise { - // Collect dumps after trace if any selected - if (dumpRequests.length > 0) { - const endDumps = await collectDumps(dumpRequests, traceFolder, progress, outputChannel, 'after-trace'); - traceResults.dumpFiles.push(...endDumps); - } - - progress.report({ - message: vscode.l10n.t('Creating archive...'), - }); - - await createZipWithLogs( - context, - outputChannel, - traceChannel, - razorLogger, - traceResults.csharpLog, - traceResults.lspLog, - traceResults.razorLog, - saveUri.fsPath, - traceResults.traceFilePath, - traceResults.dumpFiles - ); - - return saveUri; -} - -async function runDotnetTrace( +export async function runDotnetTraceInTerminal( args: string[], - terminal: vscode.Terminal, - traceFolder: string, + folder: string, + outputChannel: ObservableLogOutputChannel, token: vscode.CancellationToken ): Promise { - // Use a terminal to execute the dotnet-trace. This is much simpler and more reliable than executing dotnet-trace - // directly via the child_process module as dotnet-trace relies on shell input in order to stop the trace. - // Without using a psuedo-terminal, it is extremely difficult to send the correct signal to stop the trace. - // - // Luckily, VSCode allows us to use the built in terminal (a psuedo-terminal) to execute commands, which also provides a way to send input to it. - + const terminal = await getOrCreateTerminal(folder, outputChannel); terminal.show(); - const command = `dotnet-trace ${args.join(' ')}`; + const command = `dotnet-trace collect ${args.join(' ')}`; const shellIntegration = terminal.shellIntegration; + if (shellIntegration) { await new Promise((resolve, _) => { const execution = shellIntegration.executeCommand(command); - // If the progress is cancelled, we need to send a Ctrl+C to the terminal to stop the command. const cancelDisposable = token.onCancellationRequested(() => { terminal.sendText('^C'); }); vscode.window.onDidEndTerminalShellExecution((e) => { if (e.execution === execution) { - cancelDisposable.dispose(); // Clean up the cancellation listener. - resolve(e.exitCode ?? 1); // If exitCode is undefined, assume failure (1). + cancelDisposable.dispose(); + resolve(e.exitCode ?? 1); } }); }); } else { - // Without shell integration we can't listen for the command to finish. We can't execute it as a child process either (see above). - // Instead we fire and forget the command. The user can stop the trace collection by interacting with the terminal directly. + // Without shell integration we can't listen for the command to finish. + // Fire and forget the command; the user can interact with the terminal directly. terminal.sendText(command); - // Wait for cancellation since we can't detect when the command finishes await new Promise((resolve) => { if (token.isCancellationRequested) { resolve(); @@ -369,8 +82,7 @@ async function runDotnetTrace( }); } - // Find the most recent .nettrace file in the trace folder - return findLatestNettraceFile(traceFolder); + return findLatestNettraceFile(folder); } async function getOrCreateTerminal( @@ -381,12 +93,11 @@ async function getOrCreateTerminal( if (existing) { const options: vscode.TerminalOptions = existing.creationOptions; if (options.cwd === folder) { - // If the terminal already exists and was created for the same folder, re-use it. return await waitForTerminalReady(existing, outputChannel); } } - existing?.dispose(); // Dispose of the existing terminal if it exists but is for a different folder. + existing?.dispose(); const options: vscode.TerminalOptions = { name: TraceTerminalName, @@ -394,7 +105,6 @@ async function getOrCreateTerminal( }; const terminal = vscode.window.createTerminal(options); - return await waitForTerminalReady(terminal, outputChannel); } @@ -402,12 +112,6 @@ async function waitForTerminalReady( terminal: vscode.Terminal, outputChannel: ObservableLogOutputChannel ): Promise { - // The shell integration feature is required for us to be able to see the result of a command in the terminal. - // However the shell integration feature has a couple of special behaviors: - // 1. It is not available immediately after the terminal is created, we must wait to see if it is available. - // 2. Shell integration is not available in all scenarios (e.g. cmd on windows) and may never be set. - - // Subscribe to the terminal shell integration change event to see if it ever gets set. const terminalPromise = new Promise((resolve) => { vscode.window.onDidChangeTerminalShellIntegration((e) => { if (e.terminal === terminal) { @@ -420,7 +124,6 @@ async function waitForTerminalReady( } }); - // Race with a promise that resolves after a timeout to ensure we don't wait indefinitely for a terminal that may never have shell integration. const timeout = new Promise((resolve) => { setTimeout((_) => resolve(false), 3000); }); From 6e7faab73a5d533847365fefb318116e1d74f8bf Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Fri, 27 Feb 2026 06:34:38 -0800 Subject: [PATCH 2/4] Restore comments --- .github/copilot-instructions.md | 1 + src/lsptoolshost/logging/profiling.ts | 26 +++++++++++++++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 3941037fc7..15bedd6eb2 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -43,6 +43,7 @@ - Use `test/*/integrationTests/integrationHelpers.ts` for test setup utilities - Tests use Jest with VS Code test environment and require workspace test assets - Run with `npm run test:integration:*` commands (e.g., `npm run test:integration:csharp`) +- **Comments**: Prefer why comments over what comments. For complex logic, include references to related files or documentation. Do not remove existing comments unless they are clearly outdated or incorrect. ## Integration Points - **GitHub Copilot**: Extension registers C# context and related files providers if Copilot/Copilot Chat extensions are present. diff --git a/src/lsptoolshost/logging/profiling.ts b/src/lsptoolshost/logging/profiling.ts index ab632b15e7..0ed2d5cb0d 100644 --- a/src/lsptoolshost/logging/profiling.ts +++ b/src/lsptoolshost/logging/profiling.ts @@ -44,6 +44,12 @@ export async function runDotnetTraceInTerminal( outputChannel: ObservableLogOutputChannel, token: vscode.CancellationToken ): Promise { + // Use a terminal to execute the dotnet-trace. This is much simpler and more reliable than executing dotnet-trace + // directly via the child_process module as dotnet-trace relies on shell input in order to stop the trace. + // Without using a psuedo-terminal, it is extremely difficult to send the correct signal to stop the trace. + // + // Luckily, VSCode allows us to use the built in terminal (a psuedo-terminal) to execute commands, which also provides a way to send input to it. + const terminal = await getOrCreateTerminal(folder, outputChannel); terminal.show(); @@ -54,22 +60,24 @@ export async function runDotnetTraceInTerminal( await new Promise((resolve, _) => { const execution = shellIntegration.executeCommand(command); + // If the progress is cancelled, we need to send a Ctrl+C to the terminal to stop the command. const cancelDisposable = token.onCancellationRequested(() => { terminal.sendText('^C'); }); vscode.window.onDidEndTerminalShellExecution((e) => { if (e.execution === execution) { - cancelDisposable.dispose(); - resolve(e.exitCode ?? 1); + cancelDisposable.dispose(); // Clean up the cancellation listener. + resolve(e.exitCode ?? 1); // If exitCode is undefined, assume failure (1). } }); }); } else { - // Without shell integration we can't listen for the command to finish. - // Fire and forget the command; the user can interact with the terminal directly. + // Without shell integration we can't listen for the command to finish. We can't execute it as a child process either (see above). + // Instead we fire and forget the command. The user can stop the trace collection by interacting with the terminal directly. terminal.sendText(command); + // Wait for cancellation since we can't detect when the command finishes await new Promise((resolve) => { if (token.isCancellationRequested) { resolve(); @@ -82,6 +90,7 @@ export async function runDotnetTraceInTerminal( }); } + // Find the most recent .nettrace file in the trace folder return findLatestNettraceFile(folder); } @@ -97,7 +106,7 @@ async function getOrCreateTerminal( } } - existing?.dispose(); + existing?.dispose(); // Dispose of the existing terminal if it exists but is for a different folder. const options: vscode.TerminalOptions = { name: TraceTerminalName, @@ -112,6 +121,12 @@ async function waitForTerminalReady( terminal: vscode.Terminal, outputChannel: ObservableLogOutputChannel ): Promise { + // The shell integration feature is required for us to be able to see the result of a command in the terminal. + // However the shell integration feature has a couple of special behaviors: + // 1. It is not available immediately after the terminal is created, we must wait to see if it is available. + // 2. Shell integration is not available in all scenarios (e.g. cmd on windows) and may never be set. + + // Subscribe to the terminal shell integration change event to see if it ever gets set. const terminalPromise = new Promise((resolve) => { vscode.window.onDidChangeTerminalShellIntegration((e) => { if (e.terminal === terminal) { @@ -124,6 +139,7 @@ async function waitForTerminalReady( } }); + // Race with a promise that resolves after a timeout to ensure we don't wait indefinitely for a terminal that may never have shell integration. const timeout = new Promise((resolve) => { setTimeout((_) => resolve(false), 3000); }); From 017404a0615c5400ce1aa63571b4add9f359991a Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Mon, 2 Mar 2026 09:01:56 -0800 Subject: [PATCH 3/4] Apply suggestion from @JoeRobich --- src/lsptoolshost/logging/collectLogs.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lsptoolshost/logging/collectLogs.ts b/src/lsptoolshost/logging/collectLogs.ts index 9abe01b283..16f1fabadc 100644 --- a/src/lsptoolshost/logging/collectLogs.ts +++ b/src/lsptoolshost/logging/collectLogs.ts @@ -188,7 +188,7 @@ async function selectAdditionalLogs(): Promise { canPickMany: true, }); - if (!selected || selected.length === 0) { + if (!selected) { return undefined; } From 137b78827cb063a4ff5f31edb78e121ee854808d Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Mon, 2 Mar 2026 09:14:20 -0800 Subject: [PATCH 4/4] Use `dotnet dnx` to run dotnet tools --- l10n/bundle.l10n.json | 38 ----- src/common.ts | 23 +++ src/lsptoolshost/commands.ts | 9 +- .../dotnetRuntimeExtensionResolver.ts | 9 +- src/lsptoolshost/logging/collectLogs.ts | 154 ++++++++---------- src/lsptoolshost/logging/loggingUtils.ts | 94 ++--------- src/lsptoolshost/logging/profiling.ts | 57 ++++--- 7 files changed, 149 insertions(+), 235 deletions(-) diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index ecdd104beb..4b8927e7f6 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -190,26 +190,6 @@ ] }, "You can modify the default arguments if needed": "You can modify the default arguments if needed", - "Install": "Install", - "{0} not found, run \"{1}\" to install it?/{0} is the tool name and should not be localized{1} is the install command": { - "message": "{0} not found, run \"{1}\" to install it?", - "comment": [ - "{0} is the tool name and should not be localized", - "{1} is the install command" - ] - }, - "Installing {0}.../{0} is the tool name and should not be localized": { - "message": "Installing {0}...", - "comment": [ - "{0} is the tool name and should not be localized" - ] - }, - "Failed to install {0}, it may need to be manually installed. See C# output for details./{0} is the tool name and should not be localized": { - "message": "Failed to install {0}, it may need to be manually installed. See C# output for details.", - "comment": [ - "{0} is the tool name and should not be localized" - ] - }, "Language server process not found, ensure the server is running.": "Language server process not found, ensure the server is running.", "Failed to collect logs: {0}/{0} is the error message": { "message": "Failed to collect logs: {0}", @@ -229,24 +209,6 @@ "Captures managed heap information for investigating memory issues.": "Captures managed heap information for investigating memory issues.", "Collect C# Logs": "Collect C# Logs", "Select additional logging to collect": "Select additional logging to collect", - "Verifying dotnet-trace.../dotnet-trace is a command name and should not be localized": { - "message": "Verifying dotnet-trace...", - "comment": [ - "dotnet-trace is a command name and should not be localized" - ] - }, - "Verifying dotnet-dump.../dotnet-dump is a command name and should not be localized": { - "message": "Verifying dotnet-dump...", - "comment": [ - "dotnet-dump is a command name and should not be localized" - ] - }, - "Verifying dotnet-gcdump.../dotnet-gcdump is a command name and should not be localized": { - "message": "Verifying dotnet-gcdump...", - "comment": [ - "dotnet-gcdump is a command name and should not be localized" - ] - }, "Save Logs": "Save Logs", "Output folder {0} does not exist/{0} is the folder path": { "message": "Output folder {0} does not exist", diff --git a/src/common.ts b/src/common.ts index d3dc6d33e9..1e99216f49 100644 --- a/src/common.ts +++ b/src/common.ts @@ -78,6 +78,29 @@ ${stderr}`) }); } +export async function execFileChildProcess( + file: string, + args: string[], + workingDirectory: string | undefined, + env: NodeJS.ProcessEnv +): Promise { + return new Promise((resolve, reject) => { + cp.execFile(file, args, { cwd: workingDirectory, maxBuffer: 500 * 1024, env: env }, (error, stdout, stderr) => { + if (error) { + reject( + new Error(`${error} +${stdout} +${stderr}`) + ); + } else if (stderr && !stderr.includes('screen size is bogus')) { + reject(new Error(stderr)); + } else { + resolve(stdout); + } + }); + }); +} + export async function getUnixChildProcessIds(pid: number): Promise { return new Promise((resolve, reject) => { cp.exec('ps -A -o ppid,pid', (error, stdout, stderr) => { diff --git a/src/lsptoolshost/commands.ts b/src/lsptoolshost/commands.ts index 4bb3b5dd21..f68098facb 100644 --- a/src/lsptoolshost/commands.ts +++ b/src/lsptoolshost/commands.ts @@ -92,5 +92,12 @@ function registerExtensionCommands( context.subscriptions.push( vscode.commands.registerCommand('csharp.showOutputWindow', async () => outputChannel.show()) ); - registerCollectLogsCommand(context, languageServer, outputChannel, csharpTraceChannel, razorLogger); + registerCollectLogsCommand( + context, + languageServer, + hostExecutableResolver, + outputChannel, + csharpTraceChannel, + razorLogger + ); } diff --git a/src/lsptoolshost/dotnetRuntime/dotnetRuntimeExtensionResolver.ts b/src/lsptoolshost/dotnetRuntime/dotnetRuntimeExtensionResolver.ts index 04c8bc5ecc..f8326fe096 100644 --- a/src/lsptoolshost/dotnetRuntime/dotnetRuntimeExtensionResolver.ts +++ b/src/lsptoolshost/dotnetRuntime/dotnetRuntimeExtensionResolver.ts @@ -66,10 +66,7 @@ export class DotnetRuntimeExtensionResolver implements IHostExecutableResolver { }; if (usingDevkit) { - const toolingRuntimeHostInfo = await this.tryGetToolingRuntimeHostInfo({ - ...findPathRequest, - rejectPreviews: false, - }); + const toolingRuntimeHostInfo = await this.tryGetToolingRuntimeHostInfo(); if (toolingRuntimeHostInfo) { this.hostInfo = toolingRuntimeHostInfo; return toolingRuntimeHostInfo; @@ -98,9 +95,7 @@ export class DotnetRuntimeExtensionResolver implements IHostExecutableResolver { return hostInfo; } - private async tryGetToolingRuntimeHostInfo( - findPathRequest: IDotnetFindPathContext - ): Promise { + private async tryGetToolingRuntimeHostInfo(): Promise { // get vscode setting value for dotnet.toolingRuntimePath const toolingRuntimePath = languageServerOptions.toolingRuntimePath; if (toolingRuntimePath.length === 0) { diff --git a/src/lsptoolshost/logging/collectLogs.ts b/src/lsptoolshost/logging/collectLogs.ts index 16f1fabadc..b9f067d4f3 100644 --- a/src/lsptoolshost/logging/collectLogs.ts +++ b/src/lsptoolshost/logging/collectLogs.ts @@ -11,17 +11,18 @@ import { showErrorMessageWithOptions } from '../../shared/observers/utils/showMe import { ObservableLogOutputChannel } from './observableLogOutputChannel'; import { DumpRequest, + LogsToCollect, collectDumps, createZipWithLogs, getDefaultSaveUri, getDumpConfig, promptForToolArguments, - verifyOrAcquireDotnetTool, DumpType, createActivityLogCapture, } from './loggingUtils'; import { runDotnetTraceInTerminal } from './profiling'; import { RazorLogger } from '../../razor/src/razorLogger'; +import { IHostExecutableResolver } from '../../shared/constants/IHostExecutableResolver'; /** Represents the types of data the user can choose to collect */ type CollectOption = 'activityLogs' | 'performanceTrace' | 'memoryDump' | 'gcDump'; @@ -30,26 +31,27 @@ interface CollectOptionQuickPickItem extends vscode.QuickPickItem { option: CollectOption; } -interface LogsToCollect { - activityLogs: boolean; - performanceTrace: boolean; - memoryDump: boolean; - gcDump: boolean; -} - /** * Registers the unified collect logs command. */ export function registerCollectLogsCommand( context: vscode.ExtensionContext, languageServer: RoslynLanguageServer, + hostExecutableResolver: IHostExecutableResolver, outputChannel: ObservableLogOutputChannel, traceChannel: ObservableLogOutputChannel, razorLogger: RazorLogger ): void { context.subscriptions.push( vscode.commands.registerCommand('csharp.collectLogs', async () => { - await collectLogs(context, languageServer, outputChannel, traceChannel, razorLogger); + await collectLogs( + context, + languageServer, + hostExecutableResolver, + outputChannel, + traceChannel, + razorLogger + ); }) ); } @@ -57,6 +59,7 @@ export function registerCollectLogsCommand( async function collectLogs( context: vscode.ExtensionContext, languageServer: RoslynLanguageServer, + hostExecutableResolver: IHostExecutableResolver, outputChannel: ObservableLogOutputChannel, traceChannel: ObservableLogOutputChannel, razorLogger: RazorLogger @@ -83,14 +86,18 @@ async function collectLogs( } } - // Step 2: Verify tools and let the user customize arguments for each selected tool + // Step 2: Resolve the dotnet path and let the user customize arguments for each selected tool + + // We use the resolved dotnet path instead of relying on an install being available from + // the PATH because the resolved one is guarenteed to support `dotnet dnx` which will allow + // us to not worry about whether the tools are already installed. + + const hostInfo = await hostExecutableResolver.getHostExecutableInfo(); + const dotnetPath = hostInfo.path; const defaultSaveUri = getDefaultSaveUri('csharp-logs'); - const toolFolder = path.dirname(defaultSaveUri.fsPath); const toolConfigs = await prepareTools( processId, - toolFolder, - outputChannel, selectedLogs.performanceTrace, selectedLogs.memoryDump, selectedLogs.gcDump @@ -117,6 +124,7 @@ async function collectLogs( selectedLogs, dumpSelected, toolConfigs.dumpConfigs, + dotnetPath, zipFile.parentFolder, zipFile.uri, toolConfigs.traceArgs @@ -127,6 +135,7 @@ async function collectLogs( traceChannel, razorLogger, toolConfigs.dumpConfigs, + dotnetPath, zipFile.parentFolder, zipFile.uri ); @@ -142,7 +151,10 @@ async function collectLogs( }), { modal: true } ); - } else if (archiveResult.uri) { + return; + } + + if (archiveResult.uri) { const openFolder = vscode.l10n.t('Open Folder'); const result = await vscode.window.showInformationMessage( vscode.l10n.t('C# logs saved successfully.'), @@ -203,8 +215,6 @@ async function selectAdditionalLogs(): Promise { async function prepareTools( processId: number, - toolFolder: string, - outputChannel: ObservableLogOutputChannel, performanceTrace: boolean, memoryDump: boolean, gcDump: boolean @@ -215,81 +225,41 @@ async function prepareTools( } | undefined > { - let toolsReady = true; + let userCanceled = false; let traceArgs: string | undefined; const dumpConfigs: DumpRequest[] = []; - await collectingWithProgress(/* cancellable */ false, async (progress) => { - if (performanceTrace) { - progress.report({ - message: vscode.l10n.t({ - message: 'Verifying dotnet-trace...', - comment: 'dotnet-trace is a command name and should not be localized', - }), - }); - - const installed = await verifyOrAcquireDotnetTool('dotnet-trace', toolFolder, progress, outputChannel); - if (!installed) { - toolsReady = false; - return; - } - - const defaultTraceArgs = `--process-id ${processId} --clreventlevel informational --providers "Microsoft-DotNETCore-SampleProfiler,Microsoft-Windows-DotNETRuntime,Microsoft-CodeAnalysis-General:0xFFFFFFFF:5,Microsoft-CodeAnalysis-Workspaces:0xFFFFFFFF:5,RoslynEventSource:0xFFFFFFFF:5"`; - traceArgs = await promptForToolArguments('dotnet-trace', defaultTraceArgs); - if (traceArgs === undefined) { - toolsReady = false; - return; - } + if (performanceTrace) { + const defaultTraceArgs = `--process-id ${processId} --clreventlevel informational --providers "Microsoft-DotNETCore-SampleProfiler,Microsoft-Windows-DotNETRuntime,Microsoft-CodeAnalysis-General:0xFFFFFFFF:5,Microsoft-CodeAnalysis-Workspaces:0xFFFFFFFF:5,RoslynEventSource:0xFFFFFFFF:5"`; + traceArgs = await promptForToolArguments('dotnet-trace', defaultTraceArgs); + if (traceArgs === undefined) { + userCanceled = true; } + } - if (memoryDump) { - progress.report({ - message: vscode.l10n.t({ - message: 'Verifying dotnet-dump...', - comment: 'dotnet-dump is a command name and should not be localized', - }), - }); - const installed = await verifyOrAcquireDotnetTool('dotnet-dump', toolFolder, progress, outputChannel); - if (!installed) { - toolsReady = false; - return; - } - - const config = getDumpConfig('memory'); - const defaultArgs = config.defaultArgs.replace('{processId}', processId.toString()); - const args = await promptForToolArguments(config.toolName, defaultArgs); - if (args === undefined) { - toolsReady = false; - return; - } + if (!userCanceled && memoryDump) { + const config = getDumpConfig('memory'); + const defaultArgs = config.defaultArgs.replace('{processId}', processId.toString()); + const args = await promptForToolArguments(config.toolName, defaultArgs); + if (args === undefined) { + userCanceled = true; + } else { dumpConfigs.push({ type: 'memory' as DumpType, args }); } + } - if (gcDump) { - progress.report({ - message: vscode.l10n.t({ - message: 'Verifying dotnet-gcdump...', - comment: 'dotnet-gcdump is a command name and should not be localized', - }), - }); - const installed = await verifyOrAcquireDotnetTool('dotnet-gcdump', toolFolder, progress, outputChannel); - if (!installed) { - toolsReady = false; - return; - } - - const config = getDumpConfig('gc'); - const defaultArgs = config.defaultArgs.replace('{processId}', processId.toString()); - const args = await promptForToolArguments(config.toolName, defaultArgs); - if (args === undefined) { - toolsReady = false; - return; - } + if (!userCanceled && gcDump) { + const config = getDumpConfig('gc'); + const defaultArgs = config.defaultArgs.replace('{processId}', processId.toString()); + const args = await promptForToolArguments(config.toolName, defaultArgs); + if (args === undefined) { + userCanceled = true; + } else { dumpConfigs.push({ type: 'gc' as DumpType, args }); } - }); + } - if (!toolsReady) { + if (userCanceled) { return undefined; } @@ -341,6 +311,7 @@ async function archiveDumps( traceChannel: ObservableLogOutputChannel, razorLogger: RazorLogger, dumpConfigs: DumpRequest[], + dotnetPath: string, outputFolder: string, saveUri: vscode.Uri ): Promise<{ uri: vscode.Uri | undefined; errorMessage: string | undefined }> { @@ -349,7 +320,7 @@ async function archiveDumps( await collectingWithProgress(/* cancellable */ false, async (progress) => { try { - const collectedDumps = await collectDumps(dumpConfigs, outputFolder, progress, outputChannel); + const collectedDumps = await collectDumps(dumpConfigs, dotnetPath, outputFolder, progress, outputChannel); progress.report({ message: vscode.l10n.t('Creating archive...') }); await createZipWithLogs( @@ -384,6 +355,7 @@ async function archiveActivity( selectedLogs: LogsToCollect, dumpSelected: boolean, dumpConfigs: DumpRequest[], + dotnetPath: string, outputFolder: string, saveUri: vscode.Uri, traceArgs: string | undefined @@ -399,7 +371,14 @@ async function archiveActivity( if (dumpSelected) { await collectingWithProgress(/* cancellable */ false, async (progress) => { - const startDumps = await collectDumps(dumpConfigs, outputFolder, progress, outputChannel, 'before'); + const startDumps = await collectDumps( + dumpConfigs, + dotnetPath, + outputFolder, + progress, + outputChannel, + 'before' + ); dumpFiles.push(...startDumps); }); } @@ -409,7 +388,7 @@ async function archiveActivity( : vscode.l10n.t('Recording logs... Click Cancel to stop and save.'); const collectTask = selectedLogs.performanceTrace ? async (token: vscode.CancellationToken) => - runDotnetTraceInTerminal(traceArgs!.split(' '), outputFolder, outputChannel, token) + runDotnetTraceInTerminal(dotnetPath, traceArgs!.split(' '), outputFolder, outputChannel, token) : async (token: vscode.CancellationToken) => await waitForCancellation(token); await collectingWithProgress(/* cancellable */ true, async (progress, token) => { @@ -433,7 +412,14 @@ async function archiveActivity( await collectingWithProgress(/* cancellable */ false, async (progress) => { try { if (dumpSelected) { - const afterDumps = await collectDumps(dumpConfigs, outputFolder, progress, outputChannel, 'after'); + const afterDumps = await collectDumps( + dumpConfigs, + dotnetPath, + outputFolder, + progress, + outputChannel, + 'after' + ); dumpFiles.push(...afterDumps); } diff --git a/src/lsptoolshost/logging/loggingUtils.ts b/src/lsptoolshost/logging/loggingUtils.ts index ca588bd7b6..55de5eae01 100644 --- a/src/lsptoolshost/logging/loggingUtils.ts +++ b/src/lsptoolshost/logging/loggingUtils.ts @@ -7,7 +7,7 @@ import * as fs from 'fs'; import * as path from 'path'; import * as vscode from 'vscode'; import archiver from 'archiver'; -import { execChildProcess } from '../../common'; +import { execFileChildProcess } from '../../common'; import { Message, ObservableLogOutputChannel } from './observableLogOutputChannel'; import { RazorLogger } from '../../razor/src/razorLogger'; import { ActivityLogCapture, ActivityLogResult } from '../../csharpExtensionExports'; @@ -62,6 +62,7 @@ export interface DumpRequest { /** * Collects dumps based on the provided requests. * @param dumpRequests The dump requests with arguments + * @param dotnetPath The path to the dotnet executable * @param folder The folder to save dumps to * @param progress Progress reporter * @param outputChannel Output channel for logging @@ -70,6 +71,7 @@ export interface DumpRequest { */ export async function collectDumps( dumpRequests: DumpRequest[], + dotnetPath: string, folder: string, progress: vscode.Progress<{ message?: string; increment?: number }>, outputChannel: ObservableLogOutputChannel, @@ -89,6 +91,7 @@ export async function collectDumps( config.toolName, config.fileExtension, request.args, + dotnetPath, folder, outputChannel, filePrefix @@ -193,82 +196,12 @@ export async function promptForToolArguments(toolName: string, defaultArgs: stri }); } -/** - * Verifies that a dotnet global tool is installed, and prompts the user to install it if not. - * @param toolName The name of the dotnet tool (e.g., 'dotnet-trace', 'dotnet-dump', 'dotnet-gcdump') - * @param folder The folder to run the command in - * @param progress The progress reporter to update during installation - * @param channel The output channel for logging - * @returns True if the tool is installed (or was successfully installed), false otherwise - */ -export async function verifyOrAcquireDotnetTool( - toolName: string, - folder: string, - progress: vscode.Progress<{ - message?: string; - increment?: number; - }>, - channel: ObservableLogOutputChannel -): Promise { - try { - await execChildProcess(`${toolName} --version`, folder, process.env); - return true; // If the command succeeds, the tool is installed. - } catch (error) { - channel.debug(`Failed to execute ${toolName} --version with error: ${error}`); - } - - const confirmAction = { - title: vscode.l10n.t('Install'), - }; - const installCommand = `dotnet tool install --global ${toolName}`; - const confirmResult = await vscode.window.showInformationMessage( - vscode.l10n.t({ - message: '{0} not found, run "{1}" to install it?', - args: [toolName, installCommand], - comment: ['{0} is the tool name and should not be localized', '{1} is the install command'], - }), - { - modal: true, - }, - confirmAction - ); - - if (confirmResult !== confirmAction) { - return false; - } - - progress.report({ - message: vscode.l10n.t({ - message: 'Installing {0}...', - args: [toolName], - comment: ['{0} is the tool name and should not be localized'], - }), - }); - - try { - await execChildProcess(installCommand, folder, process.env); - return true; - } catch (error) { - channel.error(`Failed to install ${toolName} with error: ${error}`); - await vscode.window.showErrorMessage( - vscode.l10n.t({ - message: 'Failed to install {0}, it may need to be manually installed. See C# output for details.', - args: [toolName], - comment: ['{0} is the tool name and should not be localized'], - }), - { - modal: true, - } - ); - return false; - } -} - /** * Collects a dump using a dotnet diagnostic tool. * @param toolName The name of the dotnet tool (e.g., 'dotnet-dump', 'dotnet-gcdump') * @param fileExtension The file extension for the dump file (e.g., 'dmp', 'gcdump') * @param userArgs The user-provided arguments for the tool + * @param dotnetPath The path to the dotnet executable * @param dumpFolder The folder to write the dump file to * @param channel The output channel for logging * @param filePrefix Optional prefix for the dump file name (defaults to 'csharp-lsp') @@ -278,6 +211,7 @@ export async function collectDumpWithTool( toolName: string, fileExtension: string, userArgs: string, + dotnetPath: string, dumpFolder: string, channel: ObservableLogOutputChannel, filePrefix: string = 'csharp-lsp' @@ -285,12 +219,12 @@ export async function collectDumpWithTool( const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19); const dumpFileName = `${filePrefix}-${timestamp}.${fileExtension}`; const dumpFilePath = path.join(dumpFolder, dumpFileName); - - const command = `${toolName} collect ${userArgs} --output "${dumpFilePath}"`; - channel.info(`Executing: ${command}`); + const args = [`dnx`, `--yes`, toolName, `collect`, userArgs, `--output`, dumpFilePath]; try { - const output = await execChildProcess(command, dumpFolder, process.env); + channel.info(`Executing: dotnet ${args.join(' ')}`); + + const output = await execFileChildProcess(dotnetPath, args, dumpFolder, process.env); channel.info(`${toolName} output: ${output}`); return fs.existsSync(dumpFilePath) ? dumpFilePath : undefined; @@ -575,3 +509,11 @@ export async function createActivityLogCapture( }, }; } + +/** Describes which additional logs were selected for collection. */ +export interface LogsToCollect { + activityLogs: boolean; + performanceTrace: boolean; + memoryDump: boolean; + gcDump: boolean; +} diff --git a/src/lsptoolshost/logging/profiling.ts b/src/lsptoolshost/logging/profiling.ts index 0ed2d5cb0d..d137e4e9fe 100644 --- a/src/lsptoolshost/logging/profiling.ts +++ b/src/lsptoolshost/logging/profiling.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as fs from 'fs'; import * as path from 'path'; import * as vscode from 'vscode'; import { EOL } from 'os'; @@ -32,6 +31,7 @@ export function getProfilingEnvVars(outputChannel: vscode.LogOutputChannel): Nod /** * Runs dotnet-trace in a VS Code terminal and returns the path to the .nettrace file. + * @param dotnetPath The path to the dotnet executable * @param args The arguments to pass to `dotnet-trace collect` * @param folder The working directory for the terminal * @param outputChannel The output channel for logging @@ -39,6 +39,7 @@ export function getProfilingEnvVars(outputChannel: vscode.LogOutputChannel): Nod * @returns The path to the generated .nettrace file, or undefined if not found */ export async function runDotnetTraceInTerminal( + dotnetPath: string, args: string[], folder: string, outputChannel: ObservableLogOutputChannel, @@ -50,21 +51,36 @@ export async function runDotnetTraceInTerminal( // // Luckily, VSCode allows us to use the built in terminal (a psuedo-terminal) to execute commands, which also provides a way to send input to it. - const terminal = await getOrCreateTerminal(folder, outputChannel); + const dotnetFolder = path.dirname(dotnetPath); + const dotnetExecutableName = path.basename(dotnetPath); + + // Generate an output file name in the form __.nettrace + const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); + const outputFileName = `Microsoft.CodeAnalysis.LanguageServer_${timestamp}.nettrace`; + const outputFilePath = path.join(folder, outputFileName); + + // We create the terminal in the dotnet folder so that we can launch dotnet + // without having to quote the path which could create shell specific issues. + const terminal = await getOrCreateTerminal(dotnetFolder, outputChannel); terminal.show(); - const command = `dotnet-trace collect ${args.join(' ')}`; const shellIntegration = terminal.shellIntegration; if (shellIntegration) { await new Promise((resolve, _) => { - const execution = shellIntegration.executeCommand(command); - + const execution = shellIntegration.executeCommand(dotnetPath, [ + 'dnx', + '--yes', + 'dotnet-trace', + 'collect', + '-o', + outputFilePath, + ...args, + ]); // If the progress is cancelled, we need to send a Ctrl+C to the terminal to stop the command. const cancelDisposable = token.onCancellationRequested(() => { terminal.sendText('^C'); }); - vscode.window.onDidEndTerminalShellExecution((e) => { if (e.execution === execution) { cancelDisposable.dispose(); // Clean up the cancellation listener. @@ -73,6 +89,11 @@ export async function runDotnetTraceInTerminal( }); }); } else { + // We use `./dotnet` since `dotnet` may use the system install instead of the local one. + const command = `.${ + path.sep + }${dotnetExecutableName} dnx --yes dotnet-trace collect -o ${outputFilePath} ${args.join(' ')}`; + // Without shell integration we can't listen for the command to finish. We can't execute it as a child process either (see above). // Instead we fire and forget the command. The user can stop the trace collection by interacting with the terminal directly. terminal.sendText(command); @@ -90,8 +111,7 @@ export async function runDotnetTraceInTerminal( }); } - // Find the most recent .nettrace file in the trace folder - return findLatestNettraceFile(folder); + return outputFilePath; } async function getOrCreateTerminal( @@ -151,24 +171,3 @@ async function waitForTerminalReady( return terminal; } - -/** - * Finds the most recently created .nettrace file in the specified folder. - */ -function findLatestNettraceFile(folder: string): string | undefined { - try { - const files = fs.readdirSync(folder); - const nettraceFiles = files - .filter((f) => f.endsWith('.nettrace')) - .map((f) => { - const fullPath = path.join(folder, f); - const stats = fs.statSync(fullPath); - return { path: fullPath, mtime: stats.mtime }; - }) - .sort((a, b) => b.mtime.getTime() - a.mtime.getTime()); - - return nettraceFiles.length > 0 ? nettraceFiles[0].path : undefined; - } catch { - return undefined; - } -}