From 9dccae344e98d30755b24e08f50a34fe5120f2ad Mon Sep 17 00:00:00 2001 From: Dan <46821332+nsadeveloper789@users.noreply.github.com> Date: Wed, 16 Dec 2020 11:19:46 -0500 Subject: [PATCH] GP-506: Added more actions to Debugger menu, and writing help. --- .../client/GadpTcpDebuggerModelFactory.java | 9 ++- ...AbstractGadpLocalDebuggerModelFactory.java | 75 ++++++++++++++---- Ghidra/Debug/Debugger/certification.manifest | 1 + .../src/main/help/help/TOC_Source.xml | 20 +++-- .../images/DebuggerListingPlugin.png | Bin 42946 -> 43255 bytes .../DebuggerThreadsPlugin.html | 12 --- .../images/DebuggerThreadsPlugin.png | Bin 23484 -> 21581 bytes .../DebuggerTraceManagerServicePlugin.html | 75 ++++++++++++++++++ .../core/debug/gui/DebuggerResources.java | 67 +++++++++++++--- .../gui/target/DebuggerTargetsProvider.java | 2 +- .../gui/thread/DebuggerThreadsProvider.java | 50 +----------- .../model/DebuggerModelServicePlugin.java | 2 +- .../DebuggerModelServiceProxyPlugin.java | 15 +++- .../DebuggerTraceManagerServicePlugin.java | 74 ++++++++++++++++- .../services/DebuggerTraceManagerService.java | 20 ++++- .../DebuggerThreadsPluginScreenShots.java | 2 + 16 files changed, 318 insertions(+), 106 deletions(-) create mode 100644 Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerTraceManagerServicePlugin/DebuggerTraceManagerServicePlugin.html diff --git a/Ghidra/Debug/Debugger-gadp/src/main/java/ghidra/dbg/gadp/client/GadpTcpDebuggerModelFactory.java b/Ghidra/Debug/Debugger-gadp/src/main/java/ghidra/dbg/gadp/client/GadpTcpDebuggerModelFactory.java index e0dcd3957d..a57d52298d 100644 --- a/Ghidra/Debug/Debugger-gadp/src/main/java/ghidra/dbg/gadp/client/GadpTcpDebuggerModelFactory.java +++ b/Ghidra/Debug/Debugger-gadp/src/main/java/ghidra/dbg/gadp/client/GadpTcpDebuggerModelFactory.java @@ -17,8 +17,7 @@ package ghidra.dbg.gadp.client; import java.io.IOException; import java.net.InetSocketAddress; -import java.nio.channels.AsynchronousChannelGroup; -import java.nio.channels.AsynchronousSocketChannel; +import java.nio.channels.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executors; @@ -53,7 +52,7 @@ public class GadpTcpDebuggerModelFactory implements DebuggerModelFactory { CompletableFuture connect = AsyncUtils.completable(TypeSpec.VOID, channel::connect, new InetSocketAddress(host, port)); return connect.thenCompose(__ -> { - GadpClient client = new GadpClient(host + ":" + port, channel); + GadpClient client = createClient(host + ":" + port, channel); return client.connect().thenApply(___ -> client); }); } @@ -62,6 +61,10 @@ public class GadpTcpDebuggerModelFactory implements DebuggerModelFactory { } } + protected GadpClient createClient(String description, AsynchronousByteChannel channel) { + return new GadpClient(description, channel); + } + public String getAgentAddress() { return host; } diff --git a/Ghidra/Debug/Debugger-gadp/src/main/java/ghidra/dbg/gadp/server/AbstractGadpLocalDebuggerModelFactory.java b/Ghidra/Debug/Debugger-gadp/src/main/java/ghidra/dbg/gadp/server/AbstractGadpLocalDebuggerModelFactory.java index 15c373f836..a08e91aa51 100644 --- a/Ghidra/Debug/Debugger-gadp/src/main/java/ghidra/dbg/gadp/server/AbstractGadpLocalDebuggerModelFactory.java +++ b/Ghidra/Debug/Debugger-gadp/src/main/java/ghidra/dbg/gadp/server/AbstractGadpLocalDebuggerModelFactory.java @@ -18,6 +18,7 @@ package ghidra.dbg.gadp.server; import java.io.BufferedReader; import java.io.InputStreamReader; import java.lang.ProcessBuilder.Redirect; +import java.nio.channels.AsynchronousByteChannel; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CompletableFuture; @@ -84,10 +85,17 @@ public abstract class AbstractGadpLocalDebuggerModelFactory implements LocalDebu this.jdwpPort = jdwpPort; } - @Override - public CompletableFuture build() { - CompletableFuture findPort = new CompletableFuture<>(); - new Thread(() -> { + class AgentThread extends Thread { + int port; + Process process; + CompletableFuture ready = new CompletableFuture<>(); + + public AgentThread() { + super(getThreadName()); + } + + @Override + public void run() { try { ProcessBuilder builder = new ProcessBuilder(); List cmd = new ArrayList<>(); @@ -101,9 +109,9 @@ public abstract class AbstractGadpLocalDebuggerModelFactory implements LocalDebu builder.command(cmd); builder.redirectError(Redirect.INHERIT); - Process agent = builder.start(); + process = builder.start(); BufferedReader reader = - new BufferedReader(new InputStreamReader(agent.getInputStream())); + new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while (null != (line = reader.readLine())) { if (LOG_AGENT_STDOUT) { @@ -111,22 +119,61 @@ public abstract class AbstractGadpLocalDebuggerModelFactory implements LocalDebu } if (line.startsWith(AbstractGadpServer.LISTENING_ON)) { String[] parts = line.split(":"); // Separates address from port - findPort.complete(Integer.parseInt(parts[parts.length - 1])); + port = Integer.parseInt(parts[parts.length - 1]); + ready.complete(null); } } - if (!findPort.isDone()) { - findPort.completeExceptionally( + if (!ready.isDone()) { + ready.completeExceptionally( new RuntimeException("Agent terminated unexpectedly")); } } catch (Throwable e) { - findPort.completeExceptionally(e); + ready.completeExceptionally(e); } - }, getThreadName()).start(); - return findPort.thenCompose(selectedPort -> { - GadpTcpDebuggerModelFactory factory = new GadpTcpDebuggerModelFactory(); + } + } + + static class AgentOwningGadpClient extends GadpClient { + private final AgentThread agentThread; + + public AgentOwningGadpClient(String description, AsynchronousByteChannel channel, + AgentThread agentThread) { + super(description, channel); + this.agentThread = agentThread; + } + + @Override + public CompletableFuture close() { + return super.close().thenRun(() -> { + agentThread.process.destroy(); + agentThread.interrupt(); + }); + } + } + + static class AgentOwningGadpTcpDebuggerModelFactory extends GadpTcpDebuggerModelFactory { + private final AgentThread agentThread; + + public AgentOwningGadpTcpDebuggerModelFactory(AgentThread agentThread) { + this.agentThread = agentThread; + } + + @Override + protected GadpClient createClient(String description, AsynchronousByteChannel channel) { + return new AgentOwningGadpClient(description, channel, agentThread); + } + } + + @Override + public CompletableFuture build() { + AgentThread thread = new AgentThread(); + thread.start(); + return thread.ready.thenCompose(__ -> { + GadpTcpDebuggerModelFactory factory = + new AgentOwningGadpTcpDebuggerModelFactory(thread); // selectedPort may differ from port option, particularly if port == 0 - factory.setAgentPort(selectedPort); + factory.setAgentPort(thread.port); return factory.build(); }); } diff --git a/Ghidra/Debug/Debugger/certification.manifest b/Ghidra/Debug/Debugger/certification.manifest index fb03a3e939..65c19f4f55 100644 --- a/Ghidra/Debug/Debugger/certification.manifest +++ b/Ghidra/Debug/Debugger/certification.manifest @@ -99,6 +99,7 @@ src/main/help/help/topics/DebuggerThreadsPlugin/images/stepback.png||GHIDRA||||E src/main/help/help/topics/DebuggerThreadsPlugin/images/stepinto.png||GHIDRA||||END| src/main/help/help/topics/DebuggerTimePlugin/DebuggerTimePlugin.html||GHIDRA||||END| src/main/help/help/topics/DebuggerTimePlugin/images/DebuggerTimePlugin.png||GHIDRA||||END| +src/main/help/help/topics/DebuggerTraceManagerServicePlugin/DebuggerTraceManagerServicePlugin.html||GHIDRA||||END| src/main/resources/defaultTools/Debugger.tool||GHIDRA||||END| src/main/resources/define_info_proc_mappings||GHIDRA||||END| src/main/resources/images/add.png||FAMFAMFAM Icons - CC 2.5|||famfamfam silk icon set|END| diff --git a/Ghidra/Debug/Debugger/src/main/help/help/TOC_Source.xml b/Ghidra/Debug/Debugger/src/main/help/help/TOC_Source.xml index 9cd0c3ccf4..833620d610 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/TOC_Source.xml +++ b/Ghidra/Debug/Debugger/src/main/help/help/TOC_Source.xml @@ -82,20 +82,24 @@ sortgroup="e" target="help/topics/DebuggerThreadsPlugin/DebuggerThreadsPlugin.html" /> + + diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerListingPlugin/images/DebuggerListingPlugin.png b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerListingPlugin/images/DebuggerListingPlugin.png index 4aee497608a5c8b02b3b438b67ad45cb42218989..b353abef39a620b1fa92c69af5a84ce57a1e527d 100644 GIT binary patch literal 43255 zcmce-WmFtn*DV|uLLj)i(@1cKB)EIic%X5Y;1;9skCy7H+H0@9_FQw$3Q>jd$;f#1lrcxFXz*CO*m6 zDxVE<6JE*OvCO1<@#L=MhdWeMqy7dtC;szimnTW4d|tPIomg+&=h;QeX41^fTwU9C zeeBF!`S1t>je!5e{5;zRC7E1hlfUovpi93tsym7dTYOpY!`h7z5EecY3-}TSxjFC> zjP^qRS4IG8#s~rF?2i}|+EY-2iQUjPUa(nmqTwcnpUkI(pDZvazHa?ke!X`?>+=$i zLgxH;TjA+CO$@u}^&~+6n(Vm=v8YFuvRGQ+plB@W?438;hTlyrDuAN-GioKlmr)O* z7ESa zp+eFW<1!bCsHu52Jj?0k%Pil`PZHS$U!lhf@fn{E@K(RvD_qjkfO8YTn0t%#Jjj`~ zl7g5u*D|fDJPN?JqD7h+QJV|>oo)-P-`o~@&zn2$jTY41;jw;{WmfWPw1_Nt+65nN ztgzvQiytJI!WTlj)hT(3n5P~sZh;i|ermTEa^N7ou9R5Mmy#bU*jLk5jL$;k&?_cn zSyoVHn)QDgYLtAbQyDi_4ugYB5;8SYOf6Uo6=znE6k6bh=odQ* zLT@?35HFiA9=O*&hc;s`V_et#flECjccJ#&&bzxni;)i@+b!z=n z2c57M5f$+|^$e|-bPKEKIMUt1{+{X6l zbN(F5yhbdRm-OK&Ux}6(dXirvOJq)Qe(V*mo;T`cs?8Dz2ls&4tVcL%xeSoAxI$So-3w4n%b{J{(S@keUAQ z@R=K>Lv&7iIX+utYZe^`q)|g{NQou7k{g07PkW-%{H!%5K0tUlbPmGCWRjaRGzURg zVS?q*p2t>tvV%*e!d^<=?6z-KU3`^7wrtUsM72*pM?e@XucTxb9Vfraj!Pj|ubxCr zMk(qZL%A%s?n>AQy=Tqo`ZQUuKVDt%DVSE0;`=dK&m7iilOL0*fp`=wbh3z};`$yE|LjN8qhu^_0XhuO@EhRq_S+1_pXYhmE zU62O93X0hgNoJiNg2OPq;-cBTvb0w~);$c-EHk(&%qbg`0Z$v{OgZ1n-K##y-78Yo zz+-`^2tIDxKG2D7*l|x!rl{4Z$B6n|N|KUsKI=u?6xUe~N!4IF| zPg-hs$<_3aRqqIKxXpVTWzj1nzV|p>H9Fp&dQ&Ovd+Cn#Os^Iq$cE**Qqr~AZYb6| zR)jj@kI8mjkI*dADD+32!F$v@)y+h% z6?PTOS(f-ruKj-9AS|0nus^BI2{yd6CzXSdvJ)jD7++`Pb}SdG;ixo@ z^5dSQ2WRDWekm9v#07B?=k`RlT~MIRpzR%@w_`~N$2(GBlCrwKJo}F7OB2%4H*BWX zNCaI;_9f*h9ks)?D_)upkSe6`Dvru;(dy(?CUKcBW%ylVb;ujehr$gmH>L$Gk+caC zrXAr#P_2Y$(yF#D2-a>g=%G(Nwe-%AoP7>z%ZxSvK`dwG<7OWb+Im3)- zcx9W6c7<6xfuS#(ev7rt#4n26Eh{c>?bBz!`jSTeOb&+hK^kux+m3dyXNlmu?T;uT zPRa$Lv)rwdR~wfLD+dCn+y^K`1+}?I{lHRuxaJy$IKrsyQH~PqQO({g-uY^S)bG;C zJ6u{nzPvlL`^~g~V+wjFK6Bhgi=&}=UhX;z&7~8)X8YczEXN@C#R~qU9bzdfQyUhc zHc!lhUyd*a=9Bp$38J7e!ey6xm%1QvEaLc&oO3kN*CAg2t1=>IwRVDCNQ)w8Y|A%b_~-M zxq6a=AU-;AZ#dFukb6V*MnDuayU+_B1+47Z4@pkbm_|#`_j=vgufXArvDsF7T zoEEg>AX%bYqlE2@hgYF|Zf8m3!{-+gCCcXScCePvoI)%=k?tqCH`aV5z0>2alP>BC z&LL#TKK#y-*Oi4J{^)=Dz^D`#x}u&d(AZ)bi9O~Q=(ZDSad`2h^2+v(;3bm8FroPU zIGI!;F(|ila|>C);bMjEy4U=32*M-+Ug;f-_0`;ME!AI}0?LXp6!tv=W?b6!Vq*kP zJIO1T5Y(=6c6RnOI*FP~yzN8JP&T!I=v;Z-pU`XtW6^A*@robzi!r z8F^F{(6vzJCuTAj-Bv0}qiy*(1U(kyIljs)Y}|kn*$#L=b@+2jdZEztGmkazhSwz* z$BmWj5E_Sxh3mCQ37lL=xwq>TQ7%z;IYOt!_mhS;ajJl`fyFk8=ZT&h#(kgc-xrk; z>jI{D*JzN4kVCDX6-$QMwrkPx;dsv<#xru@xb2C)vw~YN4&`r))%sj~FojB*S)HTO z_}z9Nl^V7%TrG)EE5sPXyJY&)n;sLe&HjLa++NyUx{^S7jDO%?o)~_#Sh&7QpmQ!) z;{ltb#)pQB<4;XvyYEdIWlrk>_)F1-}M_qhHrSD zVoH|Jg=>NC-eVLoKkj|0h*paGL0?=t*$VcTl?$$*`Wl5`A_K{1@)O@PG8z!&R;87J z-$FT5Bsw;)KHe~R!q2bI5^6y)p72n2ymqfWg1BbGUfBtGKe$fQYt&n99>{rhVpZq% z5j-c|9McW88Y6gnvUQ}}8UhmUq2pTtX+2Yk4?hhv(;qf4KZ zYC2i5c5jtE*z`~B9^>K$N3I%du-k=pL84!)qK~0AMgmYBavWM3HRWW*u~YqQ*E)1- zLeNQ*5S(Xe4QT^y?!UT`FI-?V)~{-sUS6OA!Cv&eJ0h$YhZ1AWRdQOUNv#fvIT2VChw2 zK`k_9e?+7;z;+!P;~WJ88Iu1KNm!C2_1{SPo@Ty_xRNC-#-f1<%`MJ?BXNlnTemO$g>u8lup&&koGK-jQA%p9y{h;!korZln$^Pb@m`eQYeaVqDs2b1X+oS zcjr2OZo)tivU*@q7Q0FrJC4#nXt(RUoYVdKb`bx;&P=3f^y2Ak1EbD6QVU@GotuY) z`LgtMFE}{XhD&CMgE}@XchPdF8l|Jidp$1+kz%q@novop5QSJ8Xl@2nlCdMSC&oxE zTr;gc%wg|Z{O>v!5r^jTX@SG>i0GOMk+*w~TDs#AOE}CaKLfnn5rKou7wc`fS49o? zwfy`SyNQFYhSGucb-O7H5f_)q`34BaWHMiBJ~io%CnMrC`35R$r1rEaH|q@?408{e z1oqqzv;JgJF6c@qJek=|LPVoI)Q2wc`VF`=x^%}6P5fvhKSOpQ0k3@)RPXGtmVVz@ zGz*m1Qv{UDs~bz7S+b3-N}U=y=veugp>d>UGPkAU?)Qh84`w?b&VIMF+`zSytB>G{ zDV5onU-20#ZSaVKxkhTXhaNg^AZ@#G`wwan=X)*IF(KMZ4hQuW5wRUHXDQ2o|!`v2p2<%&~ctvlPo_X(TqSMJIM3=Ujz{_XGZlguHp%}|0 zBCjqm*TA8c^BQzaAF?Lbf~Er9G@k)DhVp- z#>@8Pm%yLc)Is4E_v(*T(L&d;o_VV0CU8L|R~4*_@|4n;MPX+;I!vpZ+WiRX3JGza z%ID@8vPN*3&^qjleX?+ve@73@fQd`nGH4v4S)`^-m~SKCgvKSA7kZt6+L_V%1yU`- zz1FJa4~=L10BjEKvk+}fwM1q~j)tY2y#R9LwI8id{#bM=g>KH_Y!y{Yesq3R8eS3+ zV?`o0P}ap87Lg$$_=V~%p+_XVG6bd@y|zn?=!awxMqE*2$M+_toVGF!1`O6?aE zcoGdt;`*Fm+nGRWw%zj12)rY;2%-vol-^w3#hu3(dL4T$Wm*ws z1YSruPJf}(ap5m>=t?@gQk(;v;R}9}>m&CJ3S+-%Fn;p8xUBhmS2Rt#;sev(cu821 zW&na2Tpsss=lV6ucw>tz2Ig9uMRZ-UjZBB}+Rst>lzGZaRlI*Uho%%`u4TEh0X3H# z2#>9(rGskL{(ewtJA$uB%op2SFq7pNmS-_}$-r$j^WgdPr9VAca;8CXpv5?XF1gC~ zLmq32yy0jY8F4YeO83^K9La47NH0TBi@L>WK7F<)dCXq4kxXv6f;s{fsS{iCy9X?R*T;vju{#M2>8C2S%bY zIT*9-M4MfKYB9al&2JiJaN)VP4O&!7*xevq_rf4!pYyso4tRutL4 zjV+xubj4y9M$M@yH0v&~4WGIRCg2|NcTCQ)E0#^7y3&{2z=9^DpP8~hO6D#wLax$8 z7*zTSk)5$}>`MsfKh0jTi7njVLCH+z9NUfu0JvhNAp%y?YGE_`OIwn{u7BI^Kb=H? zd|j6p@&DG4%k5`{T~@qmA;S+dHHHJd`X8>Vw08iqF-P#1_rmW@1`_=5R~|Ctd|)$W zS{E%cLD$!3Xs~T$tlWaP?p-n=w+i`NY7965l6i^*4SiSRP}kRC))RXE@pBo{$7xYlN*d$KOfNd zq*P9C?D|ZV{St3FzYMv&J5#miuUF?xV?A!Oez9g~6&~I_w3xl`+j`TswSippGxQGm z`S~SJv-RFzaI6j9oP*N=??VCCO?Y!0IX; z`KfL7GO_vRnQWT)u9SsNS|!`PV1|;jsr*6UHi(0%nN30Ors0a7yLUF@zmnbqj|4A zXnRqW6+I_jo%5RN#6ow*LLPw}h?Cx=I_@Y@-_iZ*XkzTh`)t1T0Izt=rHBD&T6Z>8 zGU*G{1Q1yQI;0;`^E- zl?eO1%u=6r7ja9S;)ks$1a=g?`f&0?C0(>4>+)=YX9vM4?_AXx8hDs@I`CC~B2*z( zw0}wzmlaIv_nb6zzU78#)i7yHa!COE_nuO_hagAiSC|}_%qAvxKkz*|+&(|Oud|8UtBc<6pqyP}fvb~6OHN_oP(Jz@6VaFrv?rB|15_R^axES^&lnvecQ88*9}>^X~YEe1Y^M4rj@hdI=gI2Y9yyEe%2xDy7 z4Dwoc4#%qlQ%ZS!kF%qR4?=F(P%uYvg@r0WU~qJFgaUlKEXHR<=v)hh7EbA63~K9U zJ0OhT<(TwZ$Ql18O*Cvdf8gh2_sG&As_q%T-x)KTya$fmJW$1G)pCNNI1(aYN5>G3 z;>0mosU8{hwwLIK!c@>Iw*^tXh?c-Z0`{j|E~k@z{0_hPk10e0CqGGlb-OXzIAn}W z<&PLyV_#OgbkS?^iHg9B?fPo;sx9zaz_XAx*Q2do#NGSv4^}?lFqmYIHq_W^ODB#M z1}WkJSBNEj3vGAze~kG)lI%lY(g%g4_ku3iUMaf^k3Em>9jx4U`t|vGB%+3O>q&*+ z5fBL=iZSF*F2i#FPaumpe{`g3B(z-R<9w|hYZ!fNO%776H& zmO*F^Fpwr1+|zFB7EpL7K5Jlr{KqK>2YMSVPhreig+zf*cTzNUA6)hk~p6ptq9#Jb)qf5a-!c!X%W5rr+ot=+2M)IY1 zXX}QGG(mbE2gs&u>8LE7Dl4nH&9UO;)BR=Y)$l6o4{EvZ-)&HiJ?k62+~_yn{o=PI z7-H~Y84a1~dU^?}fXGp67WpQ=G-{|9_4Uq?p&=Lb4v!?$qK0-*y-5=+!L|I+uou}1 za1*0W2n2!Zmv4kFY5SzUJxMDZc;zxh z79JT!v|DX@G|YJV;GN`otLA4f4ckf`UTiHpLjr`xmA3|mY|uPp-x;3%(Q&z>wYOKE zFdEt!ndz|jJ(1foW+d^=+qaZxc+4iwZ<1loe5*S<5nsMg>NUEn5*F>wH9X^zjAK;2 z=XbgP7#kbg-=fZ>JH`pB5FGrO;=1nbU56uPhjZ?sg6PA<{Pk(P(=&6QB4~~{E15O) z&;(!J@^c8Yfp>DfQg0}NSitF7PuzZIckG0}T*7f@BF6#2+c5lA*Fd;wuj!`XvVh*z zN8Ywr7be0n*$$ai4!gN}e_O0jY7e7fVNuY>eEu9ys$Dz0*7r*AV6{K&_iu;4Im97i^2H#Z zk50aEzk>wH{)5CSeEMiL#lC1OlG1Q>uS^-n5tj5?*N^G#k|@vI~R8Di`j&E6ivTnZVL zr2zwnSTs_UhRxnfjU+r)aWX9qi}!k9AclbkgCyLTfaTz_T9_NcW5gWPfs=Dwm zWnn|av`g1bDZewoaxCiXctp%JsFeb@umj!p0#-BJjByMj>8#PCp|)s7j;2o#dS^}^ z&pJptDPH)dGtNT$(a&LVl=fQCrQc0(Dvh-fYWx*X-e(Ql;aG+2))Egay`PgYC#!yULGH$D0yD$91eJY>VcRC~QqS8hy@ zDHBAjj8T>5!5Nk-(IugnMjT=2r%yw+!1JAyse{?)yfvn~Ie)du_bMHAV-*Y$1qeq@ zbMjDtaCkO+aCXQy*2sRJyHPaw`p^0yxh<{_!zJDJoBljh*n{*-L%iBc z4-&m`tLT=_NP-ZX_ZEEX$p&TVhlxbUJS>u8<*Jok{i&}Tf*7RKWLCo$N552N5*dJ6 z7@#l;1J$&r7QP9fmoxl`sR4xvy7&nv#WPUem$XF7@aDu)RW<+Wb3x>NUbyr1xc6J& za}pIeghQ{{TRTJi8+Uh*ZXPD`k`L2Xr&#dK$J#WQi*S%SLkui*8{~SE{ZKBS{CkvfV3PJk*2A_&KS~>879yb zX0s*2`yx#FR~gFuo#gdw^BjQ zd-gg;;k}NX3VJ>ho+-|kEl)6&*rFip{`=LrU#euEzW33X7KimX3rBb!dTZ11wDo2b z2{Cn!3+uadlDThL?B++$l7X=1DyD!F+V&Hg{^qCcAkLA(!-2vNG(p=pQM2_PSh{>s zKYC1ee$@Li4xv^0NIL~;vtv2_Jdib#!!W2$Gk+y+>qbtSP9g=FYQ}e)$$H`8*+LkP z3ezscL?GmhkxhqmoQ-P%+Z4V5Zla)o@AE6eMYhuWDno73%0JgbVuM8-{3Bp^76v$T zj`?3Q4u3J`wGdjcqur(_7Pm**>PLTn{{l;i`ga>Y8kryJdGuR|NI`PiAd9L65%OLxX$9^(9KJj#nG07 zx54#ecOP|}`$19d9|PnaWH=!}asd<#dOc25;G=aVVeC0rev|y5szTJUKR0O2&SrZO z(FFq$WMyG18$VT8;we}&3hD`k76)=T@-nm`=XLeEojv!+TzUA zWWLd3$y*;`9B_)tWgBJSwnRz@ANUW@B#X;BmsawhFXak=-{rHxvIW%tiQu`$s*P25 zx`erUdg~@{_)BJMlg}Rs_}cfgtr1p|=8g=MiVFE>TG6^41&0OUJ#`;db^E>u z?T0E_gLZ$=4C{OJq`5Z?P+&R3EV2ZBkoDi+M^vczjt}xjI~br?jto*xKZ&=(S*1AK zW;k7EjDHbplc<`L-qadFVU_PT#mHMC6Ch!kFm7#W81i$X3a%CINUz>WCzyZ*;LOsNLaXi8G)r!t|pSDs$fvkLM z1}7JG_dnjz3SJab3&H@6u0fboFypHUwoE?_Bmv5HsB@U8Wi#wvzv3kTDt?da+J`7# z=}Bg@Ykk}$&w2X$o!i2ljfsG4Z%;>ut_B1S;=2^o7nBy$2UGE3ixj;_KH*fl7Ft>CB@)ug z`o8^Rt#0Tt-{3|`ym?qGSU_=^CZT}ip|tH3pe4!;i(kE~ox$I!D5?x?ac*Oacn(JX zJ{&6KcfaIT(pPweY8`>p?cBk)n+*HO`WWFoL&d!*`b3l`#poRVkpJB;F}+&S!P{nm zzHV_n>{2`X@+B0TLx|qQbD~5yU)fCUg>Tq*hrL#DacGrQ=TrEM7yix-X;fK@eW+wB z$l)5Psi#!i`sV}!zzI@~5_3%3I~emjtVTY_Tg;eq7jaue1>17S)HK(`alT1r^#LtvMszo2Sy*!yaX3*bxt^e-MCi#x0|-;suDSiQF$zL>miQh;Ar zIF3Qc6l=qDY(0&8`r2*ai4yBnd!nKTTh>l%k94Z!yw}p>XwFca}kJ>{0#=xl*dfLdKJQkZ`>qxf;Bp`Y$dwb9JkjtOSoXm3#_s5E+ zR-d9jK*KAy)9Z-1-`Mzmx$~~4n9bt%_n(5sbUWmPN~)Dx;b~?ZKwm|_vKWa#n$^EFHiIbA)F(z#I&NnR;`)KmPW2RKb!L%6%zmPqpL}7x=sNslcwWqNU2&?)R;;i(P;3M@&!ps;shCLN8{_X=)(%v zY?u$WalXP)2=(t6*+Qj?PM-C+;;J$#-mCPi+9vtTIXwr-*)jH zwNSV_<7WsSn;;;LZ?aBkE`rohrNGYj5O82eJ@QD;tXw<}7rJde7k&1ppkGMIlC-=QvEN-nrEp|#nQIGV| z)BS2wvP}Do>a=ri<;wq>2_BuRKFlYke{ynoxd@>{R2OAv`6qeNq5j1kMJ{`b7X9o- zW`B-AbmBp)9K_L^84WRu$L#?s_BPAWvpb6r(@yKuJ=a6{EtfnU9siZ)cu>6N8|vg^ z(vLmQ1&!C{|HBM~JD9=8cSS#$i3GJ?T;xp>Vns~e@0^4*p+9)=fKokALB{kb>Hc66 zK~B3Gb}MC_6SAd0SdCFuiGzUMsUCBr{dv zs0mS3aqatj@`MwEJOkt2K}M@(f*$r{w6esDxchkJ0w4Eg$`BG@G&sZmBDV1ToR3CJeCQqeb|8A)@9MSqVg_O8zfKeUV3i60N$amKSV4(Nw=lkKTbL`1iFQnY0t@Q{ zsesel){hTsJ&%}`GDIV!B8Y*T0E%3=`TC?EY2evF=l3DSL}5N)`@8;dBCqi}4Sx>d zenz}K+eFcDOb%?N0sqxb!xRE8jrl7G9k0$^e)XpiEG{nc67b)`V-&57-I|MMF^7#` zQ~d$xcvbO>k$7GH+E&?z3UeH&edFEP+UQ!g9p-s&F2^}$lb&>L90ImGD?QyuLpYPH zyy}e&%FdAO`K>j^c(p=RsOaUTF{+!nH-X{@-$I|nRQcT}PX%)FQvPRzSh5}iBbW?+ zettY={$tK*Mug7DCUru4zu$PGmqlpJg;VG)#}pxSy;{(jWBuUBsm_ibJWi7?pscYK zZjI8!MbAT*Xrj;DXFSWS#+Auk;o*Fy$$?@{R!W1DfHuCqa)wCQCptm;jG16??V#n+LhExA zSgF32(a;wMbW*}dyE$;-hS_TOzsV?}mVT&RZqoXDu`L>;#m1ok(GtANRN6k~oNh!2 z?LvP}vd?#qfL*++#}DD^^MKbr#0bKPPg~1r z`gV(R^61#ul+dw;%5-nX0Z737&Qb<>>2#jMi0^gIuK-K%8PzanZr#UGg?*)0xk(-e zuQ(qZ9CXKyN8m*`hzhVE9itOqZN@;uk|R4p0T_Hn8H&A+r)X_vT#0pS(!Z}|D1%4( z`(gn+WaOHj)E;x5nhzPtQ*^w(^g#5Fm*{2#ECqGm&rN~Bm*E^XaN*!7cBu*oz!9|T zyQ2-BPZYl~G0CZ|y*QgvQlQss>dI3DrM%!|0AzYUW{uKR{?1U(#BMVpIT>QJwIpqp z!a@IuZi)8GC3!qoWKKfgs)>KDolF=KYxC~ zqZn39Fm*CtktUr>r!VMX0K3OJ(g*?#{cZ3xUtb|a{;)01H zd&8+8{6KUF)wr$b`w>|U4+@*v^np~YKa85DA;YGsf2QK4^(7lxrN@N4`@`m1~VS_#KZQ`a=H(|De^(@>6<{d zRL*&qM8FzKs2Rv`C5Sz|$G+e?@wY5Jo={WV{q}IL4aRtJ1x%&pVDiYJp zeFntbf8QY!a+O%^OKSfGp!v-L5y<)0`{FgxwwKj^>2Sip{TKhDMPUGq{Uxh0|KL&J zb%*%>>#+SNsM=J!x%Uc5Cd2Yc05wg{)do-f14WF|34l{ay;5e)XMm01^hS~0M_=@OD zb&@P)At5jO{tRLQuz0u2Jpw#7d9oQw$Q1Ic`fTos$(swm8%!Z(GVETCd<^1M;IR~z z_^rR=RgKd8oi_%YziDH*Oh`^WZgq@%(r5LnBJmNVWQF`zN<65&O@QuKWPUr5*rttG z_)W6t7gd``gNO~qDBn5NI3>w3nXlhdrn1Sk9HLAzYH+ryYbF6PeLDfu&+KUvr- z{{JC`glSpynRAr?YVt=1!4a_kQ9Xf@_#ZJ8sPBN`mAJ+-5=F%IgvW9M+iQRfZ-34_ zia*?PMZYw>pDUmbAj-3YBs~)jTXi=U-W;b2sN}2q*oeMZu4DzT=F3k{8B_*&(!Pl6qzq2BwxJDCXHv?3n%N$mav&9^no-N@tK_`bfPcBKweBfNjZ72 z(SsM*l7SijphggItJrnZ^eZ^Xz=o*lmvJKFyfWuiU|6_X){(k+s4eI*$MqCuj?lVY}t{ z@U!=g=3O!5_yi{$FUISW$uiME$E=4;H})K~2)}F2D9iZ;c_9}T%k`Vra_x)yUbV$P z`)cRLQcWg6OEg}>xUmc}9telUNUg#4#Y47L}R|_8-Jqx)I@+fUF!T9xTeJ!BHfsn>lsGLB+Y2`=X z&xe0oDUK$K8Po&2oqAQ>RLhxY9JRW~YIPO7^vg%@qOd%;5qu#Bxn9c%eUBzRCUg7| zs|&<(fzCzXx(Ku0Wuyt?wK}vxi9$NXZoez-s<)y~?yBNT}87l1g#L}?lD)Tp|jP+-k2Br4zgEcvjJOgGd1~pU?53&AHuxv67O)PC zeqG@yoIPS#!B*_3(X`Kk4i-;(p8CIF)hh5EDQz?W_o~{1Q+D@}qO;Xu88MMm`XC2f5 zBk&zP^eX-4x6)k?_s@X(lUF9r4qAyLw4Lc`ESWtcf4jq0hrwww-jtVm+F3JI}xP2(X9?-c<;0!NcBW7Ebi|(GT^lJ$g-~yj}faS+$21n#K zs6TQ0loRAB?_>9JM_EmDH&Is~w&-t?f^IfU{kx}`lGt-ov+gieGZwIBMcGyq8<3#=Pe3ez8rgLHZafIREc}7Y^9f(SF~Rv286K|bw1+@i?Uedhj0(P>>ruel zDr+>hhsSYelNT=;DkFL`khwb^p@QW^H+@B+N2(Ru2Rr=a5ueBWC>>PQ8=OkJwD*t) zpLG2_&;-7Ym9hX?BTyXMZd^zIx9EEl&>CnQIj57h$EDLWrQUX96TpW2+q3?i(u^@+ znUczaOixgR38=^!=;WQLp9`X#a!H@>2!vX~_-^i}cjpoV5swu2}PW5_uhmU@%%@NU@wWjU21TR zDWtKn=dWQONDBjYgbttdaE#$pmG}a_Rt^tQhL499idS_ohLa)`J*YVx*pCX zWwRDrrAo?VFMeJsi6`@EmTmAz$hZVbq`p}p4souw7|;yitii(fQA4q)vL`k-CWVLN z&Ed&hyl#u5trveOFoy>@pRr6tn1t0E)IY3ymqUU0h;sqSemE*UH-ePfv_&(cXFhSbcs`vwiS&xHc3uYFwofGeL<7(2^U zZX{v27fyO~Ii&CNj^S;*4Q8%St&ww328|?{7+bmr>})3}E68f{*N;W{=B6EXe22xp_w7C5f6+5Z5Tausjz`Psr<=K`+COZRdh>niG9Q8@oh!1_?`B zT%|)a3U;H=i5>&p?{wOQgo02Da}#d%V%wMB3C@u)(Fg^+q+-Q}gkS-!cQqN8@FI-O zilXoyOCIZ~H{ROtV0}Rm=c3`5R^x)mQTL6v(NYNP5uvv~rRowq-=nmVWuJ7EE=WOF zhw#2l69l9*48S`%gdm?=Ghkhjajx7q`+d@eclcqj%iF!{KLG0g4vYRV_mQi`5dQ7H z5)*fH&{7l^%yRJB98L(0mS7 z7_(-19e*OQx~hQ(-ZV<}hya`at6M`*y^FP8os;B`NOBS2!I+}Ll_IUO$mPzcu*8P- zjC~2Y41HrG=>6kded%KGw^;p}R+yln$-00B z4!w=mL}yeK;00<6iW){N%bE1?OBAT*!>A+NPv$r#TW(@>*m#erf$lWBv;|IkM9{!c zv({aY8@{RFt!#{SiK9ZkHIC{4_%ey@`6iO!ClsM|70fhmllk6!)LBFo+SWS-aLnA0 zTsCYH%+@+8=~gWs_qo&RtJIey2P=pdKRtSq;@|nQwrd^Y!;L0-S3la<0q+;NCP_(r z#1Gia#L*PGwinBz+)F{~xo@Fa+kN^*)cQB695Ek7(dnEFtD_73lZj;JJoZ zj{fK4yOf3uJ0B}C-|qsUMn`f~*nMnl`tXJF=aS@T=@%VAK{sNsbtt&A@N(*0`SkYkFg);x5v&L{xM?3aKw0o z>(;Ot>He_re^7(ZWc|kLZExNp_0{#2F25H&F({#C0(ReSp_#ge71OFP4@+u>3##|a z*!`@!b^p|vAKwo@Aiw&1P64G4uTZ1;yEj80`fJ@m28q$TMmX)o{;61wP83ez1tAYF z#+NtKw)lOnV%+&bnLHu`>-ARmd<{gjS#G|5rO82oT zAP=DDMN9=YTzumX0&E>j295mRzyC6%kg%{Qc*#6q`~x6YqWSC%{DXpK^hj?zgAwr= z-@|^s_5%|8Mye~cMk7M5<<|ROlqo3vd;z26Ta<+lMpCiXhnj^)N@;*{5$$?68Hn|V zaKokgQSObz*MerdDU{tpOGgtp6C$c>VGoiRDKhT-XxGPXQo;ib01ucXB(PW83YDzR z)gR%8;>9XXrV4neRG2NbH%LXCB?3HF{dGBDEPEIS(o#yLLEV=Wa1%TId4GGRW{`fb z$?N1Zt1fSZJD@wa!-CW z;nsA@SdM?3N-Xnj>%smFeEa9$(2UPovxC+v1~AWVuCWB9$G@+ae6SKN8u2qPs4s0V zLQsoKiKyq7cKeCz(5vUZ5`mcD&hxUFo`^w)Fdn zej}$@-#Yhyal&DrZmE2o0<9wZh2|w=`OzZHXMR^l1f}{7^b)-;TjOJ}a`T_B-WPpI zr#p{apHj~dHyfh-B8%fw#DQdcRq-q`%_$r^Lpkwu}4a@<;wD|t|FqBG1)bBbk`NT96c>a5R zx(c+kygXc}&TurFn|bmYm7(8;%#~NIw$Vn+R$8jR+dxXPPQbOfQW`as1JLjs)`zGZ zcVo_|No@y-{`i^l7ybU@zbWLAaRcOeK__hRgI=lko?m!v3H|*~ajeJ#%!i>cBN;rs zdf1mz^*zN7DyO}x;bQasVgHU=mm4-w(ghi~5cTOR|8*?tM}dP|MIs8ls%_aK| zJQaqHgU!t?BccPCRgwSBPN8~!yszyXK`(cuRIep6$B{TJB;@r#s=%0s()8a6LhC70 zpRVSN+MKO(W`unGLY!?X=NuUK9Dz93(A}MX=(KY0o!Boj>YaP(+xIMTV&Y-?pD~iw ziPTr6>)b`~eze~eaOx5<@@Lre9;U=`S?RImFfUTc3_%ji-H(>aQJPyYQz9W^lv6+b z6&n&9D)?zQn? zcP6P?DIjOnzAZ7(-OD^pqU=;?~?`Z#E>dQP_JOEQ~&g)MR&er*8 zrbBruu+91zK?>t@Lgo92Bq&cdDLBYAq3@c=b}Vp)i^k=qy!K}O1Ef@NjSrEU*K$b{ zd-~rND9qsYuLGb{bf zQRjS)i3TCjOfzo#waLfJ->)qQ4r&Ub6!4n1RHuRxor5IGl8hTki9lDPFO>nY7SniK z-UJ_{Q^|Pm-o4SpyX&c=SZ_JnMWQyn@QZ^+zGHzZgSMu zNg56mMc=xCEJyOjRvc{PNUPcb^RAUwdVx8!gVJ+S0h61XwekM2$$Af3Fq<{dm5G0l z0_qStaED9ZR${-0lQ!B2yHOpWe2w%jjlo5h+^Mc>ua`Ws13Y8m$eBO>FXG-hE~;*A zAGZ($0TB^F0Trb~N;(7t1*Ka`KpK(G0Rfc;k?xWj8tEF5&Y?RbhZ=?$x_)c$JaOv% zp7Xxv{k_j04%P}@U3ctH>zSnOKA}S_IK*j<4$aoD&y{?Rh7#{(ES^t2 z661zH9h{!>SCgMA#ThP<>NGRR3E1&);yVjO3>C+`<#+LP>k3W1rFAu64unbB1Ucs< zNg?+^bW#r!dSGPZ$OQ3__jjHQ%@Yb=di=Iu@{X8I4ri4vN3$P6a7c~_CUS96RMfn0 z+pa1tHjza z7p73&rS^MaVKJf>Ut^_yixR8yRmi6Y+zG?Et#9A~@r(oex(EDMNa%S+u@{zf_2-{} zRH@~Yj6ZRd;9tw^*0xB`1E-j;GWD*Uh#$?8LL-@1w-w|q!`V;$Uc_)*zIx7hxe>(e z;R=@f)hfx{Cu*5Zmn#|NOoRH})NQ?!yu=Jg&IM915=u%u)Rv~u!vGLanCR+wsVxHk zbFEMQm7WK?J*mX3->+P8XcS<&&I}9aj>`a9)c!Uf7ap0wCx9>ZwX3`sDFn%C-?{QK zhLb2*EZLe9_GLlS#LD1WN2$@}dBwJ#4E97tY0$Hy5aKcupMa}U_WFaoIT>!Z zDlLCyMm~T3^Co(HoiM*~c8Pe&H%cP*mP%^!Vp!3AH&7!8!tX(4Q0Qf=H7FT zD4QLjYA#5^xL`|BYpoGQ9Yd8?V0%jQ`qFlH_x;Y(l;=p>vU|~Nm51FpxmoOEzfJv! zyn%voOQ1OEBPpAkAUt&r1Gpt>R6%Teh9DWlmVag>y8RgWw%O28?@j1GEs}PJSuuvg zI4t>BzQbfM$ak=E)~lasEH&v$TIfwBGu{h+fb@LE@#ANV3C=u+g6mB1v)F2S3J(44 zpLNv5mN3z)ry+c{YRN*)QXb9)#WiZIw{5wpUOvmPF?o+(5p`MX4GzU5S#1TKC0QLO z?f;QvB_KgfEONGPhw^oV<%8P#CO$e#1XD71IYHtN>{QQE)>@Q8D){WI{iAH2Ivn~M zDSzBnN>u(e={}vY+^I_R6$oiO!Dc^7Es=Wn2hMZn(ufR#!ua~U+&Aw;vQ_< zAMf=M&_|$G-ZxrJFIQeD*_dG4ZusipEHnsfwqN{~X&e|{iyVdMCJ>x4BKkX$pJvs? z#$G}#VlDhT=0H^hy7lVTi?bL@=npFc9uUqFI16Vf@PI!wz+C<=`T`=2n7~v0qrVQ) zIL1kZngX`)IbQ}WhU!hRAwouzfVCG3jhp~e1uDD(gDl%Wmg@C-Qcq<91u4XkkY*?m-#uDeq$#>hgwY5fVTb#;X#fH zGuvAdXSGGRY(md&J>fY)ftZ8}#}fg$e9A|9A1vIc@86%pj$%x;fh zU>Kz=k_rCwF zWCo5$$J<%#h8Ff%$P+=wbLgdub8uD|+6iqOn*(Ox1un=2n`JZRk#WL`j(&axfUy$I z*WGuWVHz`hWT2f0XejX}syl#5eUZX(^YDVnt-`lj6&b!skB#6gghXzezUH1e1gxe# zYg6AnL@KPm7wTKXHQ))QPGp$erL*uHNO%%t_ZtDVH8V4F$>nnUB$^TBE~<}34>?gJ z#~YGKTKrBf22gVD%e`Np2k_swGkrhlAWh@lR{EBiklHjEi5xy3#=;Cc?IuAVs$$Zl z%woMUGhBh0VbPux5fPD@%8)|8fUwTU#6%&zpnO)j5~u}vbQYi8oHi}HmYDYi^>3pK zY@W^~XFC&d7G`Inov+N*D|Y96;E0f!;R7=pS_Cr494{SD*dA0Z8(TY+nu|PprWZr9 z_;icP4aa;uGkBO?|FT?7rO-ga{iiv%v%eX=Nj1QdJd^}ku>P23R(%HyDdCESBA0#6 z_!coqc$8synzYAE<962OyUCu^&9C;A^}$!KO>7_nUe~|>gg;No`i8E+4Z^FEhFf6A z_-^IqyS)PQe&fj~j*cD6@8^M*oEb(6$A|es-fXs!+P|_mAKk~NWe`-uBfX&GdcJz&vRu-8@X)T# zF6~NJx$mOdw~9CCLlN46RQar(zx~9SeK`ITL&2EN)jvfu|LQRPXCfl!*x$5$P#Q(h zJi4kcrI5(_yhczpdFSEoV;U~{`KU{)8Xp0Jzo#rr1zAkPP(P<%^-VNauVevb!|_Eh zfy4D*1$kiCB?NC3{EH6lyVXKGi zhIj7wXZ1;iNK_xL-CCV;f6h#L+l2@VH$Z+!N9D@_Uf*w=`hQg1yh(q@RwKYA<1{5)}?erv4=ER?b2EA!ZB|nFTi{h3QCsy{#tS zV6=v-sNcZve)>KhK`{1psVr^60a7_oT3&^M69c`~0O%#_o0~s2W}B`4p>QF?hsjQA z3#0cUVN}84z+{4;mk02a?O11}Us^J{N!TKBkB+_x4Y2jT4hixv>|ygKn?^Fj+&)p_ zN_~R5I3#IsjS1up?%x-qfjVxOEb}olHkr<~F!!F4xW@@Nz09;VaStG)c5f{)CNei_ z(J0kS2O?1U!N>h#M{Ada9BEK6!Y;ucY_&4@(A@u4;OC!%_usrUCNv-6)ciUHbH_7+ zi|fyC?o?WT2TcgXE9Rdt4{*wIuvoKIyN>;IJmS6MFYNzA@zrYurO!gKVi)v>Qo9>y zDA`nG$8LTEIlw;=1EGyYy8$vddq86Z*_o5_O6N?~-iUuj-F1KyuLrHK1pm(l;TCJ|?g(SMebEnr}`)l*+eA8f-# zi*E@*-XHDH548tS=ECoZJQu+>}*3{vl4xN>FF{|m`4+WW6* z5DTtcDydDb9kFGqTJGxQzm+~w9eAX~u~NCNpWi`_8HMitP36>A*+gyE-pZR$qXr+M zmPl5rNyl0IfWJ{8QWic&A8cvqWPn_@I32Sve*C3~ z8Q0+RB&7;PM&82{WXXf^8s8yom22%v8K+%xS_EW}{Los}Hr%}8M)RpqMj$rh;OA;p zhVcl9lI91HaqtBa#q&Ez_}^r1DBAhTfr)uZd(JT(>>wFgN;NbEH?RpVW%}tipZgoB zL4Q#TB1?dWe#!2y{*Xs)EnZ<=Jf8KsK}xzzU{gLUFXY6~>;o@|u^phjK-r)m7ixQD z_v@*uSi@$84fki>Eja;aw3<%@JQ0?)08uxdtmdt>NBZsUIodAwKNqw#UW8mbHX16h zT~Y{RW;|`P94)2?r5q^{W`jA=FSVf=q91X2Y!^TCIJCMF1(hNIZ7>gR>syEYPH_9l zzw$fG5K-`6Ve}mHv0L^SEq;CN`iyL*(~X4E<~C5CW^hXZEAs8b%$5FF&>d;~n>%`0 z-IX&L)D6P?37fgEuV?`2Qq2G7wBAUI`GYsFZv3Vl4EcbfsTA+P7WP&CtHDv;n$%|g z(`A(&#|@85ZmmUzML@*y*;8GSZ3ww7p)3_ketUnK+SB4hV@N=;hisBAuZVwofa3JpY5Im}0rthlxCi}Nw1 z>`F&pOtbg`*146{=Ha1e;?bimF#F^NDS4U|%nL6_7&zq*Qe5u#`t)ZV&bAf{od0_v z!NR*l=jP^ItCyl|rH*WZKvn`bXK21EXNl>+kGa;(ZtPBr{)klPVmU$1 z5BbeKJ8@6;!>rNIYi6DA49o*v?GZHeYA?D~dp%Y`iK$NjxUczrPKUQT;RvN$xp`9!2LT z))CI`T!B8k4mdz$Q$XO5k$-+*>i=WHd-vn>Q6LluJ@Bcr6}@^aZ+Q(PE<89^t8`Lc zm0X#pmbdKDdHg0|N7|#bY5noBlGpeR?m>;jCCK3+a@SkoBFH>)qVv3n9`~tx&E@;a($V)miK?Dt@>G|U-9Ungm}UvYe14thZI*JO^BIG zCd*VUjdNk~Eo5ZEUvz|lQl7EhIgnLND7qD+(q~~L+YNWJzR{PsK1w`wCKC+hX%Uk` znDY|$`a$4XBq(WR)0^tTZSH02pk$g`t?C_QoKAwT9^ZY?@K{SHlF_aCj|iFQHBLZ!NieCg(K1>+A(PJvl9Np!q4U zv~==mNBH_n@q4~L?N@C&iR(6gP<+7YAv;gn-C`Hbq$g)}L({Wm<_Ejp1&=4aSFXoh zrFq?erEy^d=gK`3oFqD*S?i~o@}H8-iLQ;y*SbS8R@avMv@-ZDp7ge&APEkc(0o~C zqZi!5&@Ss#$B6+|9c11H1*1N{yF<=Va%BRpTYNUfRNz<%vz@p9@=b&$?M$1Q2k0aD3WaXD+EHkT{tZ)FnK za+p3y&TJsv-Ex{XGX-Yp1i!@uY=~u;lA2m9b|-bMgz+(BQ=N*lJD%j_425g_CtY|;1kVdUfqn-*gMU;(Ek0VTG8hlgo@9(~5cYAw>zs3{BR{HI z@rCyfWV!pp-3oTSoqa_uSu9xBK+vh}HiFZ7XT+#)CErEDxf17W#s+mnpiC4`6On4t zB?Ge!&qUUux{mWps}I7esKR0Popn<#@^z^_*ZtOrQ+w1XqZh~ncXlRa#i^3?L4)Cw zIS9uQ*0lkb4b?*~RNB#TV^lo=$9QW*D6pBZ$~wQE~B-+_Lhv zJz?tXKe2m#G`_CC15&9sDrSW%VBvTt*qzF%T2JNWRJW#sKkumWYQluLD)Cr($8iY zCfW1fo1@GU+=m5C*K{lgx=UE2;8e4$@1trWfy(xg1*QoTGnyN!j%;{Jrc?<@9b%KH zO@kuYA!jPCd(i-^E#CGU^Bwjyck!4nV=?EOE$z!*qgRn+j|2F7+a!LdX5U4q!^x%#ZR}<8jpsyBnyTNn}TVbhg~Oy!9~7fUt-j~Qmxq;!-a5RS2dm0=qt8@9G*2hbzb6HRhyNj)|k6`gk6WLCW`11 z$0l&x*=OmCHgeu+4y3kbmc40S9+H*Qk8))5$TPaEbGZ7=SB5`ukz-8pTbg`J~4Eu)g48D9pBNb(OcBfoJ7vpRMj#EXisEn1Zm|fe9r%d}*?XopZ zCbt7L-35Eh@`)f@_&v>3#Q0QsyQkLj+IilO!TEP@T+4a?aJ^bVK=8b9kiL`YC8332 zU9WIg@Amm*vCgW5kok7s6NI~ujBxzoE{ryYFMP2IC9vHfp3pXB8VNdbG_O(aRR36)- zhSqDq*I_O6*IzRHw)K6a_a*qmS24)Q?1 zWgvSV^8@d!&z@p@OQ1t$Oboh8O#&SH@uT?j=bQ5J%&&a9c)dYi$_mWI<6JRg(R5z& zy`s__Osr)~)bk17`YGx!3q=#GyK@?sF-u8S=y_OzOtEDmLjI=@(PaLWhic)G#9H>z zu3^StgWC8xn0sb1#=Mv--r<+vv}cl!WN}7p&l#8jA4GFKJfck!B1u*$VEfGNA!eAH zA_bT+oGZY&#EAKO&i`Nhz<=>tTikt^XDFm*;Rh01|{G!JMC&DW*qjh#tG_SigX$XjNBr9Xyf-#L%4ria6^CPv4@DuF(-Q!s7k@l$^H zOjC9{J8`eeOGCoDnkhZ0+gDz`iLvQ=moDc0!ueonXyOp>ra4h_RH7T7jDGWAceK%o z*4|Gqu9;hXsm+S$lSAxrH{cd~HbQYsL-Vs9X6wEA@o+`=#=@WsmY4(t%k4E|TjgZu~=taueEarJ5 zFUc_5I>@a2+*0=}j@b+jVfDJ;IoaUYx7urJS|pBZ7OQJU*P;O6kbo{CqbEV6UQ`DLpM zzU_wa8rqcVMb*wZ&+w0$_9JhK4FhT8^R;VYE)(3jRnP>&ARoGfPhCgLtx|u@A-TT2 zAT>52_(|L!T?RJc7vb8X=HdMQ#LH+Q-;yv@$ zFQ=)omTs+DRZHoSEz^!eHB;KdWtLR{Mr3_uZ+kpw48_gl|D8*n z+7R{d)|?Gn)BA>_z4{@vdC$CFEK0#DY14Z=2=#Vj#j6qEMl1E6ov%NK@BMxfiuy_kTb;=Y0h38 zytYI`X!VnO`qq|$@vQsghH1X3!zvx{4 zemV*K(9t$Za5DT3I-HI3R35HXHJ1KD=Yecsivpe2d*U4?>8W<4?H`-y42vhaNj11j z3LIn};Zh*OZp_hRjgEcQnWSm8R8+=`Xp=f#3&UgVB9nRNTNAw_eu@(?p1?u-ek9v)?n1(frw8BtShOYoCe4A)!Db3%VShtcW=3!6-EL{XQ|zz8r89F9hs2{_Bft?`bx z5>Ibz+rR~fvMCaqaT2|$rrV>mSg#%Nsq&wMqEy#(acV*`N7g_2b-qPGD`?_ z5a#Z#QSDe*Wq8z`HTqFQQ49X`_3LCDgSsEVeYJ-&Ld$``zc0nEr57h%wwtfy>C4M6ION<~>o}PU&F_xm&F>Z?+=m@c4f1aH zD^8rgpO%E=!Fvn!o9X!YG|*_G>nFWS?mF7Mg?vbOnUU5%gytuN87lC?15Dc71rZI?zFE=CmT;b!W0-JdJ5WHGPgjys+3Xhbp(o@w_RJRXf*osUqE>ES*{&%cE;@t|eY#nrP91r4 znQ?9PZME0{8mT(-_C_CUT}b1|KDWxyJm0iA_%4ipVPD7uGi^A#X3*K!MzFiPPVCvO zRF1RQIv9N6O0n<%2`0{3xp;rH;I-GG+TFb%lBx6TUa-g#MFkF-=SLAoWSKW{{y^jV znw`8x%!Yf4oC%4_9#aK!deIr7yVGE%zEVMO}U{6wfmvg2db>ml+{uYJwYP$4&*V2hYnp zHOV_0a*@sc0$%|~_Yk#r?{vh}cSMViZ|fmsAPp1!S(A3iu>KCkgQNo%g@J&M#C+kP z@#Xy>_J_kZpE#hpTn=kAZ9zy?lJKT04bKE3B77iF;Ii`3<%bt5Kd~>sk!8uNob4DRp*Pi2?#LC;ed>nW#4> z3kp3`CM$@A)AbF~oIgn)ocDx#Zv*M$h~1;G20GD!5AWlG3%}qeM3GFJEo;Dqdq>G} zRBryTk+f=-bDL}0B)vt2rxeQOR)F!0tu0h@4GrQ9%*@+-H*wtB9=*Zs!6IEej=0IR zo@bWv)i9wKTX>55tr8dY5uZEd<`H%KN{I!9asi+Hs*&?g57Ujk;Leszd$|6*CrXzL zrB}l3$Vuh!4AEoHQR1$3OIUh5pMi!(!gXy=cFl5L52#kQ1InuMN=jjSp}T=CiO)%) zD_K8>-WVGC*^ehklD5sw&-f;1!7I1RNL%1(ik1n&^rDCau$3#$IE z9@$6+=0h|Dto5Cs7lfMLiM$JRI~;n&WsAg1*w+_2u`YAGvuN5p=Gx&i;^G9_GA(Yl zZ}Zzqh(cI5wH`*^IhfN2Fyo$ud8g|#yHWY#hXl>d4@2>E)ODq^Zm$*Np4vXqhAys@ z=t@UdX}!9L;gq91hVCJW#(R~_cE~}$ST~T#L7hSo`|?zYx zCoiJlHBz4v!+r)m0eieBoS3O2Ecj@{ITvzxy@JLW5pJ6XVkBKAV+<6M5jiBP^n`ngP1~aIg5f< z^ak0|2)7r?TJSK(RS7Z7mI6BtTy%i-kt%kzhw4mI4e*k=S%Px?Vk>G-5+DXFUxJ#QCPXgCribs zy&6R|jZd-cluKq5Hx1$T9V(dTmw6$6smEc;$+Rwo&*=0-+@I9N^h~6R!Kg}?*7TKC z5hL6?g)==4;|{G@mNu|#5l!bTC!866pvkykPRm#cieUne=Nc1^%J=JzO1h$+LJXhh zi9GY8bW2Sr)3Z$#}H2D+ z9=>}SEoxhbb%4Htchj+qOUzD&?2IvYVqu>7zp9a7j{GZG1+3Vd6+m~To8nwpdKP;o z&DK7$`}4xRxL$h-P2J!(x!$ue>tP1Y5|IX)9@DfRqYncEy7lqzx<|~yWyXZgc%yfS z=yBoWuuMxGxcM5C9Grm>Qap$+uxi!gJ-lu5wqWLsg^#ar2+8u`v@TK#9d=x z^ku0X21=}#@^2d3+gq%@#F-cgtM~?(a_dsdp&`_4)ia5h+d1ZsAumN}=$}ss&4+#G z0*54}0mUGq=nY;EFX9@r#sk$DsvISUG^IbjtBW7f*Y{P){lduCiLWvq>?e7<^7Elu z^zVaE`*E}{K2b$%F~OiJz{#z)(E|H$2{K33o_a1Y^+Km9_?2IGU&o^w-XrGi8jN+j zz%dWHF}p44$|O7ez4^lL*8<1>i+UC2$g^j$_hw_J(RNVXNZwl)Az}Rb$D9SwM2u(u zBxPLl_z=%&a-9MYZQV}L0=T~VM*vhSlZ$$DTk~kA43<_l=`1aD=Q_XrwTX8ZO;BPE zd+#6$aFO+DrP1J@Z!?Z@<`9zC_V$U6z;cETMySKwXtmt-@B8_*q?ebwIwy_Ir(~NOU`(-v%lzu3I#Lrt%+}0cjj&)TAeQh#yVacV1m$ z<>G+w^-R}SR>w!t!P-a@wBn7F5ZBU=aYo^~LRFQCRCTOS8>p#8_>j(NTo*rUBm<*x z61AjTQn1j$moK5x<90$fNw{9MjIk(9KUX$0%M>z##^AXpK2ffcGXuRlQ$Ty6o}xGH zi$CkUid}Z!Rvzz+O$-?vK?u*Ciy{1-p?8w+o-7Y!m&hfv>SjRMB!liG10b6C`0e=O zHWnskgJFdmI{BUZs;fgf#Az8T4$dcN+7#B>^?rwKwq#K(EHut(+%!yOh6u zZWl>S&Mqzt52LTcW*p#EE-7t$$z3Dvf3t?3%3e`<`<|BFfDNbPx}HYKGWD*NvZKOZ zCcG&Ma#l5$l@zJZ_;FV@4I6L16FbeXUdm!SUei56Xe0LW$C2O?l%y{0kqugqC zajgnMKFyKS;&M0xHf6((5IY$SZL zmpUvXC3Sr)BhFgt`)I6X?Q=w&4FP0-K2mRL?`)1=+6j`L1Z6Gucr9+hw*duh#$&G< z{^m^wwgzD)%dJ9@^}ZGzw@XN)?lSj%qQ&a1XLy$mcJj1-pI`b61E8v(KA^JSnmW}I ziRDJ64{4iyovb-s63WAsg=)MK+vZgqP{J$^9YxS6_XcvJN>$UQBZ|#-CAZ8k#(%+W z;rzLiCj~{<24J_8OHPgt{pB55WY92eQFT+ttj|rJ2eV0Z7gsLEqGg z1gC9g#@kQJ1ie`q&Z6BQ>-x7zgz~E#?m%*nkK94(D<8`o^7s%&#P!FsPCq!aE&ka6 zj_NfzE-o%#Al1ekMq{7b!>(%+Ee{sc(u#M{Sv%ELnPug4zYLb*%i5p~XO_8Rk)t7Z zr`=R`>roSD7{eJlzfcEBxGLZqk9E9Fs2IIxwPrpWpwl8t zePb8|vP>=T2M{lmLxo*v4>;VH(jxDxoqzX51l&DkcI(pQ*0!`LQ?4O7sas&uS53kg>2A!?L2Py4fDEd60&*xly@FiaXA#FEJPd- zl?M+r_#W(2I@9gxrePeA%5*d6h!-o(sOm;1aa^-I>4t<&;L2Aa62eDMXt6S|rC zx8t626&sD@64vNFlw;Of&Vn2jp74B5lq#t1Y`#!u8OfhnHEQ+Q`WOdb7ktW`VBEQ` z&AM8xGwbabElIo%S8m)=({h}41yMoR>9Jxlqzch<-J3$AdLH0yM#emU@v_7Z+%d3DS^f4 z$EB2SUA^;9ql2jkH5HRhGoYADGGk$2O+rbW5d(s({nv(!BJ1olWl%!?X;1tv-H(BX zkwZT@va{q$6o22penq+jvJciQ+I{ufr9^ku9QN$KJo=b*&ViD2K^* zqS7wx%NJ1)vi(t9%xP+DjHAX8^ZBy~1)uHS0C0kPM@5^57`B)9s!Y2|JJmi{9~>xw zboMYSnD6Y;ezLJqaf660bY^BXEK!F{3EvbpHfqF>=7{_B4IyzlbBq-Jiu?Xm27oxP zm1<#r5hNhm_BfOf@F zm||&5jc{2`)X8TDm+$1*+0UhIvTSzjZg9Bp%!j#XW8b@K32vH`o&5^~qhPQU0|P@t zp$OLwtNT9Q!-o%jE%c-0flp~dpnB8r>_G0=cz9b&%e7#Fi{RcvLWE6*#th0QX^_K( z;HLRW-*~$FO{PdP+v5SK|YH2Jnq61xAXdmie zmg0>4xZ9$)67H+1XLcG=XY|pRVqd*=w{%}ENkd+q$PPIgu9BxozZ3Xc0wdbA9~?L{ zFfn}v1xRwv&d%R=Qxy11>;v&(n)%Po$IP2A4(hHHIG~)u;xu2pd1KcJEpf0=_i7y} zP%$TLp<*tzi1xyaz^Z!&S!pN3XV)|!g!pvrQwAXJ&`RmA(CyWcP#W2U)x7vcew89H z0XHZpm`jyWPt%t3!l0L5c~kHk#t_iS4UASns}!Iyg(&9q7!~3G`E}bMe<~OIW71|-|0q@ zl~R&AeklRJZ3~+B=8N2#cIs2-`859!cc$PAoI$vp*{x6h7%9c~(9qCEYVOBeTmuvI zn#!SEpU5zvL|t9|1}Ui|5fM>;jf(?#A;5!yfqj%Pv3bEv1@uek?M7;$$6O`yckqdRz$SMI{0L=A zSAAcA^wWKlEFh~SC58L+>C-EHy}g-rTp58WhMf2A)frJTegifzr#=uk6dKHJM425H zCV|vw{$OGfxb{X)3D};YQGU|io~EBq)N?B<`!@J4)5ovSCy+d7*bM!RaKRT*rN#_g zIlCR8M}Sy?=U;wqj2Hf{izA-@4gr$&t7Cq2cc&>x4B^1!bZh@wd<;y$b2{1ECCJAc zsW|XptbLhls}jt6^+jx!q>p&nElcJ}PFoC_ugZ9z3?vCv@xe2@II{Uo+v$ZIJ`8oN z7;=I67|X+~7U`C`xka70oND_-^}n)kZj6Ovkg{Uy%K3%4Jsm#JtKf!4nQcy2yT|IhXuF|;g=L3T~= zQZYywK9wd-y4;@?S}qn55;Cp5CZViIMz$YnU-R{UICUeJy^=4=8vuU z;`L%l`4%j|7O$eD1hO^k)4~~5{UG`U3c#Z*6xG%y;NszB$tDVgB_vSVb|#Kym6)0D z%{#x;8#Cmm1m4WM#s!`_H>bzIxTVFRplpU3ExH`~?RD-j>R6tnWV-s zyOlWG<$!ER7yiAgvcR1w*+o86UK#mD`!YdbM2o-2A;$pRKG3j75spbQ@&j7*${1s@ z@8G16O9DPZ8AC=Zg2Sr`?_Jda=Z76~jUerJYsV3-IW)mPY{)VJB^v4NRj_J)Aw-#J z7f;>5t&oaIC>Dzd4+uKE|hr5M9UH+4iQE%{cub*j;WRgqK0|tQ(Ihbu@Bel-c z^8z$CH|?Qxgq)sU%Hk|ZX8M2Il;f-aWXc<_fGJ;Q{AZ@TbZn%=6^^l3kd4>SoSy#J zPv66|z%CPm-&`UQP$`xKCd!S%@q6*XSkOQ21!Kt{Zu;tCVJz7=1Z?uq(FVuhO@c0Hl>zz>qEVJ3m{=D zhW(8n{4i|ZDN8|tyu^%xI6aN4GV+Q1fNpzie2wSKtPTBrJ(|YG5qjaNZ#TX`FK<^s z75p;fly)Ay9!<&WFPP*A4p;wuSKTy62-Ne!ZP(uM6vIBx)Cke2|N9`YmQecfJM)9i#jDft5JV_|j%Vp?)ekYEOo=U2@?o2LJ0WKbjJ#-dh?)arF8M3U&QBfm8%@+qov#Tj}Wui~F&na^esDwr=C?Hl> z=nQw>wXx;Uubhef|q_Q)gG>;E-o5x;8=AhJxR%35ipdHIQgn&89MD8+px)nSukqK^Zjnv|7@GT ziE$smE+4*y#+xk?Nm6PV%Wm;Eimm6R z3N5dyU~XJH`UtpjRcTJ$oVglfDfV3O&9Tysy7Ojta(Ik4>?inW zJ@>fRGxUKFyOqiy0pEA6bH$u%=Gj`4w;UJ=swxqO0mXiKa^gpg~6GJ z80G^NDSfsg9?-!_<%w{GfjJ?Szif9!a%)2dWn&YE)`_&=Vgy9tJPNWHz;Xrv^qa=U zTLr^(8;>(r?N5(0mAG)~)z>87aHE62U_`FDyAM%dG^!ZC9pZS$*zo~nd+KIDD!Rk8 zXfsm;v)%3W=stOJeqeC0_sc_RIyN?W^v296AZ5~+p#MFMc} z{2#MTi<)#X*_zCZjQ%q-Gj#Xwdjj1+hFUV{Yb9UJDd1UVOQ1+Ioui9K%vKw=*~aL# zT-{}({E(L0Ptw)g)HIdnW+rgp(Dkpty*lMV=Vn@Gh^X2rdI7Kl<~0YwdA;ZN?|GEp zoe-`1i~Mu1$1vk|O2`ZgyTNu!92*fKfuF}~af2)M%9SfZTWZl5CJbMHTbvatVbC7$Ie6TosL?c~JpKKDA#;4!;%)bucNRA!QG&D2>&Ef^CJ%cc2 zHM@VYH8jAQE;P7(b9GrDl@Fe?_Rf4T&!OLJ!R{Nmxf6IBs0bdZN=V;`$ku`~$b_}= z1o-4PWbum^MhY*lz$=vPRaU{3t*Q5IIzFOOto;44RzZq95cz0 z+uPepYHH6Q2k2y=HY8&7EoSZN;g#~}{{l$#4Fy~+9h@wAgHK~ruTdy?*S&bS^bG-l z+N^Hl6aTW6LEfc)GS$Q1Imubb{hN_&jDS;7m3<0Itu-Pn%;(x0ft~ewLVpn&*x-x* z37Y6Afu~}#mjApEBkW!aH|zZGummRn{V~sm7Mhgw-qg&@r1i_gu&5}y1ILQI==gZ% z(KeLy!{DQp0cooJ=1n@0S>RE~%_-~`KQGxZMS+bU(1^&&(bBczn_ryS&1tXt{ko)@G+&x`wDm) zZrZ2q1Si1Xev=KtjQ9~`UA#U#|A0RTapcDWcVs94V`6o&LBu;K*x8kQE_3=Jw{KS@ z@Ec3G6I-%Eu^rb}=QIuW_sf}^GtDCqE?8%l3)OA>RtPfOMr+_G|KQgA(E06iHr7Y^ z*qH$7&!d+f-XP`}1K?Q0C4A^&2mKa|G6~vLXWHAVxf}2y`|+HtHTyT_%!ZdQgzo493 zlU>P}1_kQCUv|ki$>aI0Z_BE7=Y?bqxtu;ESba^vc)(wTB%o}6+(2b#+Cjf!*(E>VvxdX!AnP|?k8IUwx*7erHP zlQ11;#OJ_sXH@6ehW4M~g{z@9H+Wi|j&37$Uf7CYV^+HsBR2T?p4j5aA!^qto(Z1U z#R1*wSSDyTL^?~>faA04A{>5x$0~mJnuIqVpVLws%WmZ{Z6BZ}VKt4;-}(}VEFPtb9bQcJk#44y_Vlx^^I+wQ9FBAmHeE)g(>*_G909vkL&`6hPaujtOp> z!H7AGM~mM)85*q$84=4Wn*3($^xqRJ?6ArIp;EyTw2=w}E!=vJ=|CHX0!2_ul(tyi)!Y<7CI%8?(`9d~ z|C`vOnIFLBXZ+ZlamuEDJdy7XuVDpR~}3{gyC%9wH#?sC}tha{|+-yg^pMQNY^CFgGn$kWr)>+#-t%*-4}u4yw$_xF%Q z?te?=_(#eH$rGuF-z?u-|C@bHsx|;8Kvv;@_w#~Ad4XSC*X0=Qe9ua|SYjpoGcp(#X(%9N&wi`V#91}zC7Z{j!bmW@<6QeP{B*}5~ zjRpJNi;n7(X5kb0OC0-LCv*R+sKXye_BSb`6N^;y?gg@Z>XzoiT@*^l8$>Mg%!8|Aq4AoPB~Th z#2Sn$9D4aRPdm^wKAp&0Q!#$~gVzJ~{(A65e1|(70a^orLJ=D?N*9C$FmW;__Kws_$Y!W;ECOn&wYM!MR{cAw zd4h>+XgmP$8>pelPw%V!3m>q0#cQ7zy;b=)?%@Ur$-@^QtM2kp++)9(9+1VJ2$%&( z=Lt1(gsV&67j$2ArNoOz&m6ftbKlCU{DS! z1IbxGels0l*vMEB#A5$HrWeTmQLe{F)-`|SB21oC0(BG3 zMeUXQABbuqYfBkFTdf~-TDr|{IlKRR9Av0P0OXN_tmcS_2tR(qyxk(bM%=e*;SVR(GGX5p<^N{1udtdhy~0q*`-G=H<(@?i1bC|!WHM10qhx9yvYiow7?Q2UptU)MicC9s*Vs$F^OcctUcPHFsn9KY)ps7Uwn&Hg(GAro-4GFihP zc!&4P@-q5_!xbr?D&ea!RSRjP7T^E>9X*)Ycnyr9+(b}sPosj|cBwtXnc&3Xf69b- z*J+ZPN%r#DvvmxA0G8|Y$zgU|G#rs8_1vUC&+bK3#NeX#<)_MC%$D{$xPHO#G#{Vn z8>B`VN3L*%XHfEf0Eg%kMCC{7KbZKZE7Uu~1pwST3s9!6ReC41w521oU40o;1{u5t z_(v0OYfp;mtXihz6Xm$h|Dl2YQ%}O^8TOyxBin;x61@%HRH+%8c*Z^7SpE1_vsVWD znpCxSaaHbsdYJ0yljEJoe6HwMe49u@9F?NK115zmIvB5WCQqc}s(^Sy+L$Fw>kzLv zR!#U32z~qy{0_3S>_Ok63o4^I1D-^S=psJ9R6(kpGM}cb^v#($cWRH^V)7seN7>Gd zySp}BtlxHz&NE#2ca@dkzgAh<31su;->%gjzAX&HpPFZ2Wz7IDkuQfQ|Hu5*()ROu zlLiZF`q{b-^rC(romrE45uz)@{l<+R*iF{t$cXShzfEN&d1Wzvdp8!(0S__BYdJ?I ze~*C5`TvV3PGjL#7k}_gR_)d8O5J{$TrGXCVai8I{~&4OASR@4@Lvnx^xad{5_`@) zPDgoV(r))w+b#YCN;g|v!IOroF)-bGHH&Ibq$9(7tHy*=CR}#<)@okjs2Khi>WreS z;6Tk?8yh7|YzH_M{pJ^a=dnO+RMk#ZN;&jU?JQoxwXrGO6Ylk?yF@HMW14$XoZf_b zF^C_P;(~%FVPV1Lo}2JOs%M4Ktww?9)~*R06^06((22JWsCGy~hv_Dc;OsNOKf|jn ziflxJ*@-&`2nm%Pq9oIxPi}Q#d}y+J*f_B5-#`b!Ek|Db7uBLI_g0|U`DxfqL46mL zKiV-VIP7ba(-qe~hc)zBz1xbpB9 z{+bn1IX>77-8qsSmD8;_I`hN8MlTn8xUwcTcx6r;hY0c?IhDOrChe^n({-tc)If9=c)ov!_ zc5F<{^4g6&Xe;@dq+gPg!{q1hpX%d-gL%Csj%;4D`#7op;j4InKU2I8#RvuGwoZ;( z|IIK{trXe!($VqB$Kl-tu( zBMEsQXZCPyKRfP?hHl9U9;q=lEtviNims)LvCuxbDox%3}G92Sex^k>Rer& zbDwiv=RW`Kul;_%@8|dZe&3(Z`}O&K3neM$%j1Th`IN?qtAFT4MbUBOlH0plRUJ$@ zf}d7}#KgS@{HQ68g{7nR7YD24)K+)zC-tMI9(o7MzK||%`(&YbB^c_XI?WgDz4`&8 z)bE4P>z9YfJFUA{JxIFOQ+&}``nxxM+sd!p`0pOMRFK+WeJFn#cbPiq5&3?Rze7`{ zVJhQ@?L8rm{=Gr|Z&F7ux?iaojr*ntYlANE93Jflu(y(RrsWS{x7DxKSBc)k<)Lls zd8T5y)}^O+WXcf6s1tNAANOBAvci85`9@hUaPaGiweR00WG1Mg21C?3*o!#Zdh$`+k{S0U6Pft&m(&;x=7kE0e z&V1fso4mYr2(G``4c!C;D*ON4{1(S_J3*yD8~PsOSUykF_$)-18U8KVG4{X zHT$|xE=Im@x!U2a;0KIafy>@a8s#tsKhyv}q59h#(Pjj6K-SC< z{}n>eo9LvV7Xn5dx{dKaz;g^i$5r>3XAzxtXyUKia4xev^O~@>TOD2+O!_ugH!XYW#E$>iOioPU&7^JW=tL+~Nz#`}BG>%nAeSOZG<=S} zS_GVUi%L*TzV?c_yd6$N9?Ntov;>1Peu|}0HE>Kh_dL^a`R!F+?9n=%l;R2182Y=w z>qEb$U4EY8-$jz;Rjf?N8 zU|GO8y=&W(cLqjlMU(QPVRNm($_zvra~1N6^X%q%FjrO`i6LE`z1ZYn{n;r4h% zhaz5b212yWK~0h=IRwkGFPq|}n^pru*m0)^#Y3i%IzGv43ASu7^kR1e+K`BbsSa#| zmcGbu2Jm+}CfT*1Wq4BXw;yZA*siy3V;H~_^#gL}n)f9g8cgr=nT9=ygh>6pc6?0VVx>H51iKW!ACCu%c`dFn9F8DJn6U>p zW|0CR%oA3pY(>G{MF|g~RdWUCoz)#{p(45Cs^t12nX<)$;p9|`8ZK63tBq{UY1;jM zJ6l%}=_$_WvBN2~qDJSBC)TA3Y3QW_@xp7}wR_6Mo*3pwS_`V{`RNsMY|vmmO?r)* zIB~8KY|*@S_DN-xU)N6HNB~`6EPIqGQ@vq#HI85*<6?799i?xdV?$ycP6+7h>>3(R z@dG^KhDj*?=AH`^r&)fyn6)v6o2ccNfym{{022K7J9>jbFS;2E7JWnZnJ+M@Bec`Lj*+vvr8rnZ2lmT!#3(l~_Aik1iH!jQG7WHJ=c>U7IN7AW9K~3}K`#2q0;R*C1 z8cURw5h8eO!m3PHF+Xb$f)`jNfW>kOc8s$kf5#NX#=GNl@{-xNbBYrE(K)4+G+;%o zkMemtq!qXsIxd|>^%te#UoROpKHDV!nW&^=zg7_+0J2a+T3`f<{9 literal 42946 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 s)|r4la6frame command to the CLI of a GDB connection, then Ghidra will navigate to that same frame.

- -

Save Trace

- -

This action is available whenever at least one trace is open and active. It saves the - current trace. If the current trace is not in any project, it saves it under "New Traces" of - the current project.

- -

Save Traces by Default

- -

This toggle is always available. If the tool is closed with this toggle enabled, all open - traces are immediately saved. Note that if Ghidra is abruptly terminated (a rare occurrence - under normal use), traces may not be saved.

diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerThreadsPlugin/images/DebuggerThreadsPlugin.png b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerThreadsPlugin/images/DebuggerThreadsPlugin.png index cbad0796b664907a6d530eb1099b18ccd035901d..2b60416b650cc0adbc3acd7d26bfebede5c870dd 100644 GIT binary patch literal 21581 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 diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerTraceManagerServicePlugin/DebuggerTraceManagerServicePlugin.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerTraceManagerServicePlugin/DebuggerTraceManagerServicePlugin.html new file mode 100644 index 0000000000..109323e406 --- /dev/null +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerTraceManagerServicePlugin/DebuggerTraceManagerServicePlugin.html @@ -0,0 +1,75 @@ + + + + + + + Debugger: Trace Service + + + + + +

Debugger: Trace Management

+ +

This service plugin manages the collection of open traces, and it controlled primarily via + the Threads window. + It maintains a list of open traces, the active trace coordinates (trace, time, thread, frame), + and permits saving, opening, and closing traces. To some extent, it also tracks which traces + are being actively recorded.

+ +

Actions

+ +

The plugin provides the following actions and toggles:

+ +

Open Trace

+ +

This action is always available. It prompts for a trace in the current project and opens + that trace in the tool.

+ +

Save Trace

+ +

This action is available whenever at least one trace is open and active. It saves the + current trace. If the current trace is not in any project, it saves it under "New Traces" of + the current project.

+ +

Close Trace

+ +

This action is available whenever at least one trace is open and active. It closes the + current trace. WARNING: If the trace has not been saved, it will be + lost, even when Save by Default is active.

+ +

Close All Traces

+ +

This action is available whenever at least one trace is open. It closes all traces in this + tool. WARNING: Any trace that has not been saved will be lost, even + when Save by Default is active.

+ +

Close Other Traces

+ +

This action is available whenever there is an open trace other than the active one -- + usually two or more open traces. It closes all traces in this tool, except the active trace. + WARNING: Any closed trace that has not been saved will be lost, even + when Save by Default is active.

+ +

Close Dead Traces

+ +

This action is available whenever at least one trace is open. It closes all dead traces in + this tool. WARNING: Any closed trace that has not been saved will be + lost, even when Save by Default is active.

+ +

Save by Default

+ +

This toggle is always available. If the tool is closed with this toggle enabled, all open + traces are immediately saved. Note that if Ghidra is abruptly terminated (a rare occurrence + under normal use), traces may not be saved. When the tool is re-opened, the open traces are + also restored.

+ +

Close Traces on Termination

+ +

This toggle is always available. If a target terminates with this toggle enabled, and it was + being recorded into a trace, that trace is automatically closed. If Save by Default is active, + the trace is saved.

+ + diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/DebuggerResources.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/DebuggerResources.java index 01fa6cafb0..608130991f 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/DebuggerResources.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/DebuggerResources.java @@ -41,6 +41,7 @@ import ghidra.app.plugin.core.debug.gui.target.DebuggerTargetsPlugin; import ghidra.app.plugin.core.debug.gui.thread.DebuggerThreadsPlugin; import ghidra.app.plugin.core.debug.gui.time.DebuggerTimePlugin; import ghidra.app.plugin.core.debug.gui.watch.DebuggerWatchesPlugin; +import ghidra.app.services.DebuggerTraceManagerService.BooleanChangeAdapter; import ghidra.app.services.MarkerService; import ghidra.framework.plugintool.Plugin; import ghidra.framework.plugintool.util.PluginUtils; @@ -258,6 +259,8 @@ public interface DebuggerResources { String GROUP_TARGET = "Dbg5. Target"; String GROUP_BREAKPOINTS = "Dbg6. Breakpoints"; String GROUP_TRACE = "Dbg7. Trace"; + String GROUP_TRACE_TOGGLES = "Dbg7.a. Trace Toggles"; + String GROUP_TRACE_CLOSE = "Dbg7.b. Trace Close"; String GROUP_MAINTENANCE = "Dbg8. Maintenance"; String GROUP_MAPPING = "Dbg9. Map Modules/Sections"; @@ -296,7 +299,7 @@ public interface DebuggerResources { } interface SaveTraceAction { - String NAME = "Save Trace"; + String NAME_PREFIX = "Save "; String DESCRIPTION = "Save the selected trace"; Icon ICON = ICON_SAVE; String GROUP = GROUP_TRACE; @@ -304,9 +307,10 @@ public interface DebuggerResources { static ActionBuilder builder(Plugin owner) { String ownerName = owner.getName(); - return new ActionBuilder(NAME, ownerName).description(DESCRIPTION) - .toolBarIcon(ICON) - .toolBarGroup(GROUP) + return new ActionBuilder(NAME_PREFIX, ownerName).description(DESCRIPTION) + .menuPath(DebuggerPluginPackage.NAME, NAME_PREFIX + "...") + .menuIcon(ICON) + .menuGroup(GROUP) .helpLocation(new HelpLocation(ownerName, HELP_ANCHOR)); } } @@ -376,6 +380,9 @@ public interface DebuggerResources { return new ActionBuilder(NAME, owner.getName()).description(DESCRIPTION_PREFIX) .toolBarIcon(ICON) .toolBarGroup(GROUP) + .menuPath(DebuggerPluginPackage.NAME, DESCRIPTION_PREFIX) + .menuIcon(ICON) + .menuGroup(GROUP) .helpLocation(new HelpLocation(helpOwner.getName(), HELP_ANCHOR)); } } @@ -549,11 +556,10 @@ public interface DebuggerResources { Icon ICON = ICON_DISCONNECT; String HELP_ANCHOR = "disconnect_all"; - public static ActionBuilder builder(Plugin owner) { - String ownerName = owner.getName(); - return new ActionBuilder(ownerName, NAME).description(DESCRIPTION) + public static ActionBuilder builder(Plugin owner, Plugin helpOwner) { + return new ActionBuilder(owner.getName(), NAME).description(DESCRIPTION) .menuIcon(ICON) - .helpLocation(new HelpLocation(ownerName, HELP_ANCHOR)); + .helpLocation(new HelpLocation(helpOwner.getName(), HELP_ANCHOR)); } } @@ -1166,9 +1172,9 @@ public interface DebuggerResources { } interface SaveByDefaultAction { - String NAME = "Save Trace By Default"; + String NAME = "Save Traces By Default"; String DESCRIPTION = "Automatically save traces to the project"; - String GROUP = GROUP_TRACE; + String GROUP = GROUP_TRACE_TOGGLES; Icon ICON = ICON_SAVE; String HELP_ANCHOR = "save_by_default"; @@ -1176,8 +1182,27 @@ public interface DebuggerResources { String ownerName = owner.getName(); return new ToggleActionBuilder(NAME, ownerName) .description(DESCRIPTION) - .toolBarGroup(GROUP) - .toolBarIcon(ICON) + .menuPath(DebuggerPluginPackage.NAME, NAME) + .menuGroup(GROUP) + .menuIcon(ICON) + .helpLocation(new HelpLocation(ownerName, HELP_ANCHOR)); + } + } + + interface CloseOnTerminateAction { + String NAME = "Close Traces Upon Termination"; + String DESCRIPTION = "Close any live trace whose recording terminates"; + String GROUP = GROUP_TRACE_TOGGLES; + Icon ICON = ICON_CLOSE; + String HELP_ANCHOR = "auto_close_terminated"; + + static ToggleActionBuilder builder(Plugin owner) { + String ownerName = owner.getName(); + return new ToggleActionBuilder(NAME, ownerName) + .description(DESCRIPTION) + .menuPath(DebuggerPluginPackage.NAME, NAME) + .menuGroup(GROUP) + .menuIcon(ICON) .helpLocation(new HelpLocation(ownerName, HELP_ANCHOR)); } } @@ -1204,7 +1229,7 @@ public interface DebuggerResources { interface CloseTraceAction { String NAME_PREFIX = "Close "; String DESCRIPTION = "Close the current trace"; - String GROUP = GROUP_TRACE; + String GROUP = GROUP_TRACE_CLOSE; Icon ICON = ICON_CLOSE; String HELP_ANCHOR = "close_trace"; @@ -1329,4 +1354,20 @@ public interface DebuggerResources { } table.scrollToSelectedRow(); } + + public static class ToToggleSelectionListener implements BooleanChangeAdapter { + private final ToggleDockingAction action; + + public ToToggleSelectionListener(ToggleDockingAction action) { + this.action = action; + } + + @Override + public void changed(Boolean value) { + if (action.isSelected() == value) { + return; + } + action.setSelected(value); + } + } } diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/target/DebuggerTargetsProvider.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/target/DebuggerTargetsProvider.java index 1bf726c4b2..052756ef9a 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/target/DebuggerTargetsProvider.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/target/DebuggerTargetsProvider.java @@ -199,7 +199,7 @@ public class DebuggerTargetsProvider extends ComponentProviderAdapter { private void createActions() { actionConnect = new ConnectAction(); actionDisconnect = new DisconnectAction(); - actionDisconnectAll = DisconnectAllAction.builder(plugin) + actionDisconnectAll = DisconnectAllAction.builder(plugin, plugin) .menuPath(DisconnectAllAction.NAME) .onAction(this::activatedDisconnectAll) .buildAndInstallLocal(this); diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/thread/DebuggerThreadsProvider.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/thread/DebuggerThreadsProvider.java index 2f0cab8a11..8ac4195077 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/thread/DebuggerThreadsProvider.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/thread/DebuggerThreadsProvider.java @@ -137,22 +137,6 @@ public class DebuggerThreadsProvider extends ComponentProviderAdapter { } } - protected static class ToToggleSelectionListener implements BooleanChangeAdapter { - private final ToggleDockingAction action; - - public ToToggleSelectionListener(ToggleDockingAction action) { - this.action = action; - } - - @Override - public void changed(Boolean value) { - if (action.isSelected() == value) { - return; - } - action.setSelected(value); - } - } - protected class SeekTracePresentAction extends AbstractSeekTracePresentAction implements BooleanChangeAdapter { public static final String GROUP = DebuggerResources.GROUP_GENERAL; @@ -289,7 +273,6 @@ public class DebuggerThreadsProvider extends ComponentProviderAdapter { StepTraceForwardAction actionStepTraceForward; SeekTracePresentAction actionSeekTracePresent; ToggleDockingAction actionSyncFocus; - ToggleDockingAction actionSaveByDefault; Set strongRefs = new HashSet<>(); // Eww public DebuggerThreadsProvider(final DebuggerThreadsPlugin plugin) { @@ -584,39 +567,17 @@ public class DebuggerThreadsProvider extends ComponentProviderAdapter { } protected void createActions() { - // TODO: Make other actions like this one - actionSaveTrace = DebuggerResources.SaveTraceAction.builder(plugin) - .enabledWhen(c -> current.getTrace() != null && traceManager != null) - .onAction(c -> saveTrace()) - .buildAndInstallLocal(this); + // TODO: Make other actions use builder? actionStepTraceBackward = new StepTraceBackwardAction(); actionStepTraceForward = new StepTraceForwardAction(); actionSeekTracePresent = new SeekTracePresentAction(); - actionSyncFocus = DebuggerResources.SynchronizeFocusAction.builder(plugin) + actionSyncFocus = SynchronizeFocusAction.builder(plugin) .selected(traceManager != null && traceManager.isSynchronizeFocus()) .enabledWhen(c -> traceManager != null) .onAction(c -> toggleSyncFocus(actionSyncFocus.isSelected())) .buildAndInstallLocal(this); traceManager.addSynchronizeFocusChangeListener( strongRef(new ToToggleSelectionListener(actionSyncFocus))); - actionSaveByDefault = DebuggerResources.SaveByDefaultAction.builder(plugin) - .selected(traceManager != null && traceManager.isSaveTracesByDefault()) - .enabledWhen(c -> traceManager != null) - .onAction(c -> toggleSaveByDefault(actionSaveByDefault.isSelected())) - .buildAndInstallLocal(this); - traceManager.addSaveTracesByDefaultChangeListener( - strongRef(new ToToggleSelectionListener(actionSaveByDefault))); - } - - private void saveTrace() { - Trace curTrace = current.getTrace(); - if (curTrace == null) { - return; - } - if (traceManager == null) { - return; - } - traceManager.saveTrace(curTrace); } private void toggleSyncFocus(boolean enabled) { @@ -626,13 +587,6 @@ public class DebuggerThreadsProvider extends ComponentProviderAdapter { traceManager.setSynchronizeFocus(enabled); } - private void toggleSaveByDefault(boolean enabled) { - if (traceManager == null) { - return; - } - traceManager.setSaveTracesByDefault(enabled); - } - private void traceTabSelected(ListSelectionEvent e) { if (e.getValueIsAdjusting()) { return; diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/model/DebuggerModelServicePlugin.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/model/DebuggerModelServicePlugin.java index 8a9f5ea8ab..73d951588e 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/model/DebuggerModelServicePlugin.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/model/DebuggerModelServicePlugin.java @@ -217,7 +217,7 @@ public class DebuggerModelServicePlugin extends Plugin } protected void createActions() { - actionDisconnectAll = DisconnectAllAction.builder(this) + actionDisconnectAll = DisconnectAllAction.builder(this, this) .menuPath("Debugger", DisconnectAllAction.NAME) .onAction(this::activatedDisconnectAll) .buildAndInstall(tool); diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/model/DebuggerModelServiceProxyPlugin.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/model/DebuggerModelServiceProxyPlugin.java index 95464157ce..3ae77cbe5a 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/model/DebuggerModelServiceProxyPlugin.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/model/DebuggerModelServiceProxyPlugin.java @@ -26,8 +26,8 @@ import ghidra.app.events.ProgramActivatedPluginEvent; import ghidra.app.events.ProgramClosedPluginEvent; import ghidra.app.plugin.PluginCategoryNames; import ghidra.app.plugin.core.debug.DebuggerPluginPackage; -import ghidra.app.plugin.core.debug.gui.DebuggerResources; import ghidra.app.plugin.core.debug.gui.DebuggerResources.DebugProgramAction; +import ghidra.app.plugin.core.debug.gui.DebuggerResources.DisconnectAllAction; import ghidra.app.plugin.core.debug.mapping.DebuggerTargetTraceMapper; import ghidra.app.plugin.core.debug.utils.BackgroundUtils; import ghidra.app.services.*; @@ -164,6 +164,7 @@ public class DebuggerModelServiceProxyPlugin extends Plugin new ProxiedRecorderChangeListener(); DockingAction actionDebugProgram; + DockingAction actionDisconnectAll; protected final ListenerSet> factoryListeners = new ListenerSet<>(CollectionChangeListener.of(DebuggerModelFactory.class)); @@ -190,10 +191,15 @@ public class DebuggerModelServiceProxyPlugin extends Plugin protected void createActions() { // Note, I have to give an enabledWhen, otherwise any context change re-enables it - actionDebugProgram = DebuggerResources.DebugProgramAction.builder(this, delegate) + actionDebugProgram = DebugProgramAction.builder(this, delegate) .enabledWhen(ctx -> currentProgramPath != null) .onAction(this::debugProgramActivated) .buildAndInstall(tool); + actionDisconnectAll = DisconnectAllAction.builder(this, delegate) + .menuPath("Debugger", DisconnectAllAction.NAME) + .onAction(this::activatedDisconnectAll) + .buildAndInstall(tool); + updateActionDebugProgram(); } @@ -209,6 +215,10 @@ public class DebuggerModelServiceProxyPlugin extends Plugin true, this::debugProgram); } + private void activatedDisconnectAll(ActionContext context) { + closeAllModels(); + } + private CompletableFuture debugProgram(Program __, TaskMonitor monitor) { monitor.initialize(3); monitor.setMessage("Starting local session"); @@ -244,6 +254,7 @@ public class DebuggerModelServiceProxyPlugin extends Plugin String desc = currentProgramPath == null ? DebugProgramAction.DESCRIPTION_PREFIX.trim() : DebugProgramAction.DESCRIPTION_PREFIX + currentProgramPath; actionDebugProgram.setDescription(desc); + actionDebugProgram.getMenuBarData().setMenuItemName(desc); } @Override diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/tracemgr/DebuggerTraceManagerServicePlugin.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/tracemgr/DebuggerTraceManagerServicePlugin.java index 18daadcd84..3d7a5babe1 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/tracemgr/DebuggerTraceManagerServicePlugin.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/tracemgr/DebuggerTraceManagerServicePlugin.java @@ -23,6 +23,7 @@ import java.util.stream.Collectors; import docking.ActionContext; import docking.action.DockingAction; +import docking.action.ToggleDockingAction; import ghidra.app.plugin.PluginCategoryNames; import ghidra.app.plugin.core.debug.DebuggerCoordinates; import ghidra.app.plugin.core.debug.DebuggerPluginPackage; @@ -125,12 +126,21 @@ public class DebuggerTraceManagerServicePlugin extends Plugin // TODO: This is a bit out of this manager's bounds, but acceptable for now. class ForRecordersListener implements CollectionChangeListener { @Override - public void elementAdded(TraceRecorder element) { + public void elementAdded(TraceRecorder recorder) { updateCurrentRecorder(); } @Override - public void elementRemoved(TraceRecorder element) { + public void elementRemoved(TraceRecorder recorder) { + if (isAutoCloseOnTerminate()) { + Trace trace = recorder.getTrace(); + if (getOpenTraces().contains(trace)) { + if (isSaveTracesByDefault()) { + saveTrace(trace); + } + closeTrace(trace); + } + } updateCurrentRecorder(); } } @@ -149,6 +159,8 @@ public class DebuggerTraceManagerServicePlugin extends Plugin protected final AsyncReference saveTracesByDefault = new AsyncReference<>(true); @AutoConfigStateField(codec = BooleanAsyncConfigFieldCodec.class) protected final AsyncReference synchronizeFocus = new AsyncReference<>(true); + @AutoConfigStateField(codec = BooleanAsyncConfigFieldCodec.class) + protected final AsyncReference autoCloseOnTerminate = new AsyncReference<>(true); // @AutoServiceConsumed via method private DebuggerModelService modelService; @@ -161,7 +173,11 @@ public class DebuggerTraceManagerServicePlugin extends Plugin DockingAction actionCloseAllTraces; DockingAction actionCloseOtherTraces; DockingAction actionCloseDeadTraces; + DockingAction actionSaveTrace; DockingAction actionOpenTrace; + ToggleDockingAction actionSaveByDefault; + ToggleDockingAction actionCloseOnTerminate; + Set strongRefs = new HashSet<>(); // Eww public DebuggerTraceManagerServicePlugin(PluginTool plugintool) { super(plugintool); @@ -169,6 +185,11 @@ public class DebuggerTraceManagerServicePlugin extends Plugin autoServiceWiring = AutoService.wireServicesProvidedAndConsumed(this); } + private T strongRef(T t) { + strongRefs.add(t); + return t; + } + @Override protected void init() { super.init(); @@ -176,6 +197,10 @@ public class DebuggerTraceManagerServicePlugin extends Plugin } protected void createActions() { + actionSaveTrace = SaveTraceAction.builder(this) + .enabledWhen(c -> current.getTrace() != null) + .onAction(this::activatedSaveTrace) + .buildAndInstall(tool); actionOpenTrace = OpenTraceAction.builder(this) .enabledWhen(ctx -> true) .onAction(this::activatedOpenTrace) @@ -196,6 +221,28 @@ public class DebuggerTraceManagerServicePlugin extends Plugin .enabledWhen(ctx -> !tracesView.isEmpty() && modelService != null) .onAction(this::activatedCloseDeadTraces) .buildAndInstall(tool); + + actionSaveByDefault = SaveByDefaultAction.builder(this) + .selected(isSaveTracesByDefault()) + .onAction(c -> setSaveTracesByDefault(actionSaveByDefault.isSelected())) + .buildAndInstall(tool); + addSaveTracesByDefaultChangeListener( + strongRef(new ToToggleSelectionListener(actionSaveByDefault))); + + actionCloseOnTerminate = CloseOnTerminateAction.builder(this) + .selected(isAutoCloseOnTerminate()) + .onAction(c -> setAutoCloseOnTerminate(actionCloseOnTerminate.isSelected())) + .buildAndInstall(tool); + addAutoCloseOnTerminateChangeListener( + strongRef(new ToToggleSelectionListener(actionCloseOnTerminate))); + } + + private void activatedSaveTrace(ActionContext ctx) { + Trace trace = current.getTrace(); + if (trace == null) { + return; + } + saveTrace(trace); } private void activatedOpenTrace(ActionContext ctx) { @@ -445,6 +492,7 @@ public class DebuggerTraceManagerServicePlugin extends Plugin Trace trace = current.getTrace(); String name = trace == null ? "..." : trace.getName(); actionCloseTrace.getMenuBarData().setMenuItemName(CloseTraceAction.NAME_PREFIX + name); + actionSaveTrace.getMenuBarData().setMenuItemName(SaveTraceAction.NAME_PREFIX + name); tool.contextChanged(null); } @@ -741,6 +789,7 @@ public class DebuggerTraceManagerServicePlugin extends Plugin public void run(TaskMonitor monitor) throws CancelledException { try { traces.createFile(finalFilename, trace, monitor); + trace.save("Initial save", monitor); } catch (CancelledException e) { // Done @@ -762,7 +811,6 @@ public class DebuggerTraceManagerServicePlugin extends Plugin "Save New Trace Error", e.getMessage(), e); } } - }); } } @@ -973,6 +1021,26 @@ public class DebuggerTraceManagerServicePlugin extends Plugin saveTracesByDefault.removeChangeListener(listener); } + @Override + public void setAutoCloseOnTerminate(boolean enabled) { + autoCloseOnTerminate.set(enabled, null); + } + + @Override + public boolean isAutoCloseOnTerminate() { + return autoCloseOnTerminate.get(); + } + + @Override + public void addAutoCloseOnTerminateChangeListener(BooleanChangeAdapter listener) { + autoCloseOnTerminate.addChangeListener(listener); + } + + @Override + public void removeAutoCloseOnTerminateChangeListener(BooleanChangeAdapter listener) { + autoCloseOnTerminate.removeChangeListener(listener); + } + @Override // TODO: Move this into some static util, now that canonical view is a trace concept public ProgramLocation fixLocation(ProgramLocation location, boolean matchSnap) { diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/services/DebuggerTraceManagerService.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/services/DebuggerTraceManagerService.java index c67bf940b7..fb4df12f24 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/services/DebuggerTraceManagerService.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/services/DebuggerTraceManagerService.java @@ -162,7 +162,7 @@ public interface DebuggerTraceManagerService { /** * Check whether traces should by saved by default * - * @return true if save by default, false otherwise + * @return true if saved by default, false otherwise */ boolean isSaveTracesByDefault(); @@ -170,6 +170,24 @@ public interface DebuggerTraceManagerService { void removeSaveTracesByDefaultChangeListener(BooleanChangeAdapter listener); + /** + * Control whether live traces are automatically closed upon target termination + * + * @param enabled true to automatically close, false to leave open + */ + void setAutoCloseOnTerminate(boolean enabled); + + /** + * Check whether live traces are automatically closed upon target termination + * + * @return true if automatically closed, false if left open + */ + boolean isAutoCloseOnTerminate(); + + void addAutoCloseOnTerminateChangeListener(BooleanChangeAdapter listener); + + void removeAutoCloseOnTerminateChangeListener(BooleanChangeAdapter listener); + /** * Swap out the trace view of a {@link ProgramLocation} if it is not the debugger's view * diff --git a/Ghidra/Debug/Debugger/src/screen/java/ghidra/app/plugin/core/debug/gui/thread/DebuggerThreadsPluginScreenShots.java b/Ghidra/Debug/Debugger/src/screen/java/ghidra/app/plugin/core/debug/gui/thread/DebuggerThreadsPluginScreenShots.java index a6dc4ce8f4..6772bd1052 100644 --- a/Ghidra/Debug/Debugger/src/screen/java/ghidra/app/plugin/core/debug/gui/thread/DebuggerThreadsPluginScreenShots.java +++ b/Ghidra/Debug/Debugger/src/screen/java/ghidra/app/plugin/core/debug/gui/thread/DebuggerThreadsPluginScreenShots.java @@ -101,6 +101,8 @@ public class DebuggerThreadsPluginScreenShots extends GhidraScreenShotGenerator TraceRecorder recDummy2 = modelService.recordTarget(dummy2, new TestDebuggerTargetTraceMapper(dummy2)); + traceManager.setAutoCloseOnTerminate(false); + traceManager.openTrace(recDummy1.getTrace()); traceManager.openTrace(recDummy2.getTrace()); recDummy1.stopRecording();