From 678201ea5087325648480d24556589f63e48110b Mon Sep 17 00:00:00 2001 From: avan Date: Sat, 9 Dec 2023 01:41:26 +0800 Subject: [PATCH] Added two new options and related prompt message adjustments. 1.Added CheatGridGroupRefreshThreshold and DisplayChangesListWhenSaving options. *CheatGridGroupRefreshThreshold: To prevent excessive wait times during GroupRefresh, the GridView's GroupRefresh mechanism is activated only when the number of cheats is less than this value. Default is 10000. *DisplayChangesListWhenSaving: Determines whether to display the list of change options when saving in Option windows. Default enabled. 2.Use a notification window instead of throwing an error when executing the Hex view or Add button in the Cheat window without a Process. 3.Corrected the save message after modifying options to "New settings have been saved." --- PS4CheaterNeo/Main.cs | 20 +++++++++--- PS4CheaterNeo/Option.cs | 4 +-- PS4CheaterNeo/Properties/AssemblyInfo.cs | 4 +-- PS4CheaterNeo/Properties/Settings.Designer.cs | 29 +++++++++++++++++- PS4CheaterNeo/Properties/Settings.settings | 6 ++++ PS4CheaterNeo/common/InputBox.cs | 16 ++++++++-- PS4CheaterNeo/lib/OptionTreeView.dll | Bin 43520 -> 44544 bytes README.md | 12 +++++--- 8 files changed, 75 insertions(+), 16 deletions(-) diff --git a/PS4CheaterNeo/Main.cs b/PS4CheaterNeo/Main.cs index fde879a..a56614d 100644 --- a/PS4CheaterNeo/Main.cs +++ b/PS4CheaterNeo/Main.cs @@ -23,6 +23,7 @@ public partial class Main : Form private bool VerifySectionWhenLock; private bool VerifySectionWhenRefresh; private bool CheatAutoRefreshShowStatus; + private uint CheatGridGroupRefreshThreshold; public class CheatRow { @@ -53,6 +54,7 @@ public Main() AutoRefreshTimer.Interval = (int)Properties.Settings.Default.CheatAutoRefreshTimerInterval.Value; VerifySectionWhenLock = Properties.Settings.Default.VerifySectionWhenLock.Value; VerifySectionWhenRefresh = Properties.Settings.Default.VerifySectionWhenRefresh.Value; + CheatGridGroupRefreshThreshold = Properties.Settings.Default.CheatGridGroupRefreshThreshold.Value; CheatGridView.GroupByEnabled = Properties.Settings.Default.CheatGridViewGroupByEnabled.Value; Text += " " + Application.ProductVersion; //Assembly.GetExecutingAssembly().GetName().Version.ToString(); // Assembly.GetEntryAssembly().GetName().Version.ToString(); @@ -98,7 +100,7 @@ public void ApplyUI() CheatGridViewLock.DefaultCellStyle.ForeColor = MainCheatGridCellForeColor; //Color.White; CheatGridViewDescription.DefaultCellStyle.BackColor = MainCheatGridCellBackColor; //Color.FromArgb(64, 64, 64); CheatGridViewDescription.DefaultCellStyle.ForeColor = MainCheatGridCellForeColor; //Color.White; - if (cheatGridRowList.Count < 100000 && CheatGridView.GroupByEnabled) CheatGridView.GroupRefresh(); + if (cheatGridRowList.Count < CheatGridGroupRefreshThreshold && CheatGridView.GroupByEnabled) CheatGridView.GroupRefresh(); } catch (Exception ex) { @@ -278,7 +280,7 @@ private void ToolStripOpen_Click(object sender, EventArgs e) CheatGridViewRowCountUpdate(); } } - if (cheatGridRowList.Count < 100000 && CheatGridView.GroupByEnabled) CheatGridView.GroupRefresh(); + if (cheatGridRowList.Count < CheatGridGroupRefreshThreshold && CheatGridView.GroupByEnabled) CheatGridView.GroupRefresh(); CheatGridView.ResumeLayout(); SaveCheatDialog.FileName = OpenCheatDialog.FileName; SaveCheatDialog.FilterIndex = OpenCheatDialog.FilterIndex; @@ -660,6 +662,11 @@ private void ToolStripAdd_Click(object sender, EventArgs e) } catch (Exception ex) { + if (ex.Message == "No Process currently") + { + InputBox.MsgBox("ToolStripAdd_Click", ex.Message, "Process isn't connected. Please connect first"); + return; + } MessageBox.Show(ex.ToString(), ex.Source + ":ToolStripAdd_Click", MessageBoxButtons.OK, MessageBoxIcon.Hand); } } @@ -710,6 +717,11 @@ private void ToolStripHexView_Click(object sender, EventArgs e) } catch (Exception ex) { + if (ex.Message == "No Process currently") + { + InputBox.MsgBox("ToolStripHexView_Click", ex.Message, "Process isn't connected. Please connect first"); + return; + } MessageBox.Show(ex.ToString(), ex.Source + ":ToolStripHexView_Click", MessageBoxButtons.OK, MessageBoxIcon.Hand); } } @@ -1231,7 +1243,7 @@ private void CheatGridView_CellContentClick(object sender, DataGridViewCellEvent cheatGridRowList.RemoveAt(e.RowIndex); CheatGridView.RowCount = cheatGridRowList.Count; CheatGridView.Refresh(); - if (cheatGridRowList.Count < 100000 && CheatGridView.GroupByEnabled) CheatGridView.GroupRefresh(); + if (cheatGridRowList.Count < CheatGridGroupRefreshThreshold && CheatGridView.GroupByEnabled) CheatGridView.GroupRefresh(); CheatGridView.SuspendLayout(); break; case (int)ChertCol.CheatListLock: @@ -1529,7 +1541,7 @@ private void CheatGridMenuDelete_Click(object sender, EventArgs e) CheatGridView.RowCount = cheatGridRowList.Count; CheatGridView.VirtualMode = true; CheatGridView.Refresh(); - if (cheatGridRowList.Count < 100000 && CheatGridView.GroupByEnabled) CheatGridView.GroupRefresh(); + if (cheatGridRowList.Count < CheatGridGroupRefreshThreshold && CheatGridView.GroupByEnabled) CheatGridView.GroupRefresh(); CheatGridView.ResumeLayout(); CheatGridView.CellValidating += CheatGridView_CellValidating; rows = null; diff --git a/PS4CheaterNeo/Option.cs b/PS4CheaterNeo/Option.cs index ba9e1ad..3767541 100644 --- a/PS4CheaterNeo/Option.cs +++ b/PS4CheaterNeo/Option.cs @@ -1,5 +1,4 @@ -using System; -using System.Drawing; +using System.Drawing; using System.Windows.Forms; namespace PS4CheaterNeo @@ -19,6 +18,7 @@ public Option(Main mainForm) optionTreeView1.BackColor = Properties.Settings.Default.UiBackColor.Value; optionTreeView1.ForeColorLeftView = Properties.Settings.Default.UiForeColor.Value; optionTreeView1.BackColorLeftView = Properties.Settings.Default.UiBackColor.Value; + optionTreeView1.DisplayChangesListWhenSaving = Properties.Settings.Default.DisplayChangesListWhenSaving.Value; optionTreeView1.InitSettings(Properties.Settings.Default); } diff --git a/PS4CheaterNeo/Properties/AssemblyInfo.cs b/PS4CheaterNeo/Properties/AssemblyInfo.cs index 526a23a..881dd50 100644 --- a/PS4CheaterNeo/Properties/AssemblyInfo.cs +++ b/PS4CheaterNeo/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.1.2")] -[assembly: AssemblyFileVersion("1.0.1.2")] +[assembly: AssemblyVersion("1.0.1.3")] +[assembly: AssemblyFileVersion("1.0.1.3")] diff --git a/PS4CheaterNeo/Properties/Settings.Designer.cs b/PS4CheaterNeo/Properties/Settings.Designer.cs index 39da477..4e2333c 100644 --- a/PS4CheaterNeo/Properties/Settings.Designer.cs +++ b/PS4CheaterNeo/Properties/Settings.Designer.cs @@ -12,7 +12,7 @@ namespace PS4CheaterNeo.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.7.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.8.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); @@ -98,6 +98,20 @@ public static Settings Default { } } + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("10000|1_General|2_UI|To prevent excessive wait times during GroupRefresh, \\nthe G" + + "ridView\'s GroupRefresh mechanism is activated only when the number of cheats is " + + "less than this value. \\nDefault is 10000.")] + public global::OptionTreeView.Option CheatGridGroupRefreshThreshold { + get { + return ((global::OptionTreeView.Option)(this["CheatGridGroupRefreshThreshold"])); + } + set { + this["CheatGridGroupRefreshThreshold"] = value; + } + } + [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute(@"3|1_General|3_PS4Tool|It is not recommended to adjust this value, and changes take effect only after a restart. \nThe Mutex factor determines the number of connections that PS4DBG can occupy during initialization. \nFor ReadMemory, the number of connections is from 0 to (but not including) mutexFactor. \nFor WriteMemory, the number of connections is from mutexFactor to (but not including) 2*mutexFactor. \nDefault value is 3.")] @@ -110,6 +124,19 @@ public static Settings Default { } } + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True|1_General|4_Option|Determines whether to display the list of change options " + + "when saving in Option windows. \\nDefault enabled")] + public global::OptionTreeView.Option DisplayChangesListWhenSaving { + get { + return ((global::OptionTreeView.Option)(this["DisplayChangesListWhenSaving"])); + } + set { + this["DisplayChangesListWhenSaving"] = value; + } + } + [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("True|2_Cheat|Cheat|Determine whether to automatically write to PS4 when editing c" + diff --git a/PS4CheaterNeo/Properties/Settings.settings b/PS4CheaterNeo/Properties/Settings.settings index 1d2e52e..273dec6 100644 --- a/PS4CheaterNeo/Properties/Settings.settings +++ b/PS4CheaterNeo/Properties/Settings.settings @@ -20,9 +20,15 @@ True|1_General|2_UI|Determines whether to enable the GroupByEnabled feature in CheatGridView. \nWhen enabled, Cheat items will be grouped. \nIf you have a large number of Cheat items, \nyou may consider disabling this feature to speed up Cheat loading. \nAfter setting this, you need to restart the program for it to take effect. \nDefault enabled + + 10000|1_General|2_UI|To prevent excessive wait times during GroupRefresh, \nthe GridView's GroupRefresh mechanism is activated only when the number of cheats is less than this value. \nDefault is 10000. + 3|1_General|3_PS4Tool|It is not recommended to adjust this value, and changes take effect only after a restart. \nThe Mutex factor determines the number of connections that PS4DBG can occupy during initialization. \nFor ReadMemory, the number of connections is from 0 to (but not including) mutexFactor. \nFor WriteMemory, the number of connections is from mutexFactor to (but not including) 2*mutexFactor. \nDefault value is 3. + + True|1_General|4_Option|Determines whether to display the list of change options when saving in Option windows. \nDefault enabled + True|2_Cheat|Cheat|Determine whether to automatically write to PS4 when editing cheat values in UpDown diff --git a/PS4CheaterNeo/common/InputBox.cs b/PS4CheaterNeo/common/InputBox.cs index cb1f93b..5843811 100644 --- a/PS4CheaterNeo/common/InputBox.cs +++ b/PS4CheaterNeo/common/InputBox.cs @@ -15,10 +15,10 @@ public static void MsgBox(string title, string promptText, string value, int tex form.Show(); } - public static DialogResult Show(string title, string promptText, ref string value, int textHeight = 20, InputBoxValidation validation = null, int boxWidth = 400, bool showCancelBtn = true, bool handleNewLine = true) + public static DialogResult Show(string title, string promptText, ref string value, int textHeight = 20, InputBoxValidation validation = null, int boxWidth = 400, bool showBtn = true, bool handleNewLine = true) { TextBox textBox = new TextBox(); - Form form = CreateForm(title, promptText, value, textHeight, validation, boxWidth, showCancelBtn, handleNewLine, textBox); + Form form = CreateForm(title, promptText, value, textHeight, validation, boxWidth, showBtn, handleNewLine, textBox); DialogResult dialogResult = form.ShowDialog(); value = textBox.Text; return dialogResult; @@ -69,6 +69,17 @@ private static Form CreateForm(string title, string promptText, string value, in buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; form.CancelButton = buttonCancel; } + else + { + labelYOffset -= 28; + textBox.ReadOnly = true; + textBox.BackColor = Color.Silver; + } + if (textBox.Text != null) + { + textBox.SelectionStart = textBox.Text.Length; + textBox.ScrollToCaret(); + } form.ClientSize = new Size(boxWidth, textHeight + 55 + labelYOffset); form.Controls.AddRange(new Control[] { label, textBox }); @@ -92,7 +103,6 @@ private static Form CreateForm(string title, string promptText, string value, in } }; } - return form; } } diff --git a/PS4CheaterNeo/lib/OptionTreeView.dll b/PS4CheaterNeo/lib/OptionTreeView.dll index 926af39bd4a58c5db2a2eb55da281aeac1cb24c1..55364758a8a7e92215bb3ae6938b80e4298c0189 100644 GIT binary patch delta 20085 zcmcJ1d03#AtGYHO)`UzP9oJojcHw%^zO@r}&yJllEB zbM|xYo!GiVY2BmTxVrMj(9vs!``ITdQ+aZT5D!40Il}X|uX}h}FtA;SGf1#ch=+!6JkUzyP+;OLmuUyy%C}mz7OQCm9_Gr+%M%(a&vC4tgLQ;1NxkbuOhtS zndw4!E)qhrREXza5#kv*s@-y?a+;Klxsb0gw?(Z1^`Sc5xf?cC*2%}Jm7w!#j|$85RiFY|%U7@nE9q6>kX(%dr`7HmA)2S$)JFeZblr|b>IfL^cu3OGsL2nIe>V1 z1Kai=AY_O};n|{owFuGxj0{o5Q%Eu9O=Ve_>VZk&cggEP#{IP;lw}CQqggkA&+}O~ z3LCMmBjwPDLOdwzCSZCXT=n-^lu=7e_iIj0D+hkquaz`ec4u_h-Wgr%n_=bJ-ooU? zRKHt^Ojx%eNuTu#!u5aw#i+pqOeP;{knq<=6t!`^f=hQep&c6hMv z0H{kw<%Y&1_MIfS3*dtZ)&nhbgk;co*H8VAB*Tu7)Gkz)9Eb51(3|U` zItuPl-vbx5XR1p^L!EEbMU5l0_mXy)y5x9hBOcRJ*WdIUVbBf(7WITcBGtM+SC<$u zP)D1g=E#jUGCbA>=;DLr0FQMas65TWvgUWh*8RD4iQ{ankN$|)^kg0+Li1P;A+P^-E;U zHEMn2$dS>RngIrJdTuBH@{}Rf-LvPbBBxi+1o%?5A^hp))us^!kUrZ z4ng`=fTpA;VYphq0X@K3F);OM6EvfkH{=Ryg5wHHRlvss3WL=!xUK!Qr}=nz^9U_4 zJ=SmGX$_V*>8~B^a|W;NHNABO=(E>IH-&Xk9}oM8hOX7owH;9T^<}RkvEBg0hlaGe ze8rJy=}QnK;zOT!#CaYe^0}sMaMcssvNw_MevAmkuZ=nztA?^Hj+L$DT8xrK)>}|I z0%e&=;@?n1{Eo_dyIYm8-swfZ+f7@)2bmb;{qQ3dZqv=wWPgCj+5yPy1mp$c`L!47 z#_iM)*8hg2Zi;L8UK$*P7a+0T2VjnQ>*~=SyNE#-kUzA+?%Zp|rS=C98j0!ohJJnX zu-h_w$VOL|B@nZz`>YSao4U1^#76qRh%@4*aecG34|L1>s8!28sxWnL#I3TmA57+t zB*`=LOuuyi|!)QaU^I4>kKn!eGJLK zaLa!qEHl9UnCXOQDOCSWc?(8lFZEU)b(XMNT6VoGMGu(UQeX`fSn(p2?6(^|j z<>>{8e#E0_3azjK3%qEVkCtfJ1L!$rct6|#2hnYePVX_ z?wBd$m=kgoAxF*Ve;V@MVUc*tr_^cv;?`#fNn2weL^E#v4NUqFwMN|fJCb;LD1B{i za`{U8G%N=ZEZSG2mxJ9)VKpyV(H~TQwe>mdIr5fp9*$1d7nJ{YUZwJSYg2u-f!^9d zeYN?l9pbtk-CIrjZ^Wb3U4#XIHYeT>QYvOZ`pcZ1s-E{1gz2wI^9?```_kVYAu%BN z#}N|KpigNU*cpvRj;ZkJx(n$%+E}cS5w@0wg|6{w46K#QWTAVOJ&g&9b6{0C|IVU;_lvdxBNB^g%2 zkO>H?x&%xhZpv%nzQ}PCqp}045~~77sPc*HQU#At74%kxz}VChjz^PpD7{}-=}dI_ z2_NAn(%Vn;2vw}NDt?42K^#h`?kb@g=YJ1L`gci~!1@pwVu(Q)xLDy#wJu+^-a}_w zg>W!1)G`@^zU6j6W;&!x<9hd_X z-RnT6ge>Q?x*6EBG61KK@tQh-s{I^3M-@qV$QUss2iODk2~GN8UcDk>b2ew5?A6CBzGMTf_20@Vop8|7~b??;xLMM6|E}-K^SpL}D$b4xaCnUvO8UH54Xx;`YoiDkfkCdM&~hhPA(2 zLTj&84@s~7Gy~Srko4E;inO?O3`os7mQ5n4j%JMjof!#$d=$%h@j4D9?~|G}8l+|` zXC@R&1R}T6bY&-zPy3$q(nJ z$C251QWs@TCi)bjHx3>*{kDA2S&| zPVfhGuB>LA21e&9>b+_Ry1Rx-dIEZFICmQr)2G`=#N9^3k=>Sir>4+egv=K0y1LT{ zdU?JzkqS*%r&Chy@2NHSL!Qp+x z5|&McWF`Z!x;frVdiXJvT-;7QdIoepZU^Y8uYJ|lnPgvJ79^%yQ&^3~)t@;FVBuQj z?++L0De%Ap_jP!w%~#M1M5VhcY@+znZJ3+5xv!yT9TyiG!zS*NZh>6B9?ttA zPC5AO#l2zDgP7snjqp?C8gYY;HL_P38!!dyhM){0A|{146L#fx=3Gj$oS0_%Ja8P~ zh)I1s+=s1H)*S;E_mPWmmkWL#%Gpz*_3&ZGQ8;~mwG5;;uoF!R z>u;;$Cz8IP+s_NO@5nlBBu6K}5fPDSm!k^YYUpEUW+86{oYAM1IWwAW>~^@IkH7oL z-%$7?A`-1ANi)VLT&I-=^zng9iQ|KaNW8}foN$$RFqrZ5&$`1ns2y1? z3_4ji5MdAzNp!i0W$X))$H|{a&+g9uP@nt{QvN~6Pei1!JO4!)oHE?}h3Prn`RDb? zkI5kGjzxYVB1K_rixV-puAE8ZFXnjZ)2c;IW0d#t^bmO(4NpWwl0BaOrK4nKZg*Vo zdXH?EO?H>NP2{fl-*8u)nb+;^svdVs&LRgTX35Ay)V0m9sZLlIA)#s4J>S5aC45dx zUkuu^=aWTgZK+vmEg-VY)ECp0h#x+hW!6Fn`$LI~xqsm9y)mHGk#z-UX`wr^LszxXjo6_p z+~vK}O{?6rB3{(B+%M()efX+Ae1&1rHPEbd(<&#;*h|oZT|=**+0X6yeh9a#)7?HN zQBOU&yJ5YIoc814r!0%&3}h{5NekWDohtNmL+;lnq*S>2hnS7qqBN`1E07D%q57FA zzGm~@U0psKuCIh9LlfU>1yu8vRGs84yxQ5qaX?D-J|O)kV%y)}G5^sqtGf3rtai5a z3f|IPrm{Cv)tl+(FwQxtn$JlQeFR2#*M_)c8coXnX8)0uTmK*PKb_6(9~M2XXOgF_ zmDCu{Om`TwKg*nH9C4?u=^AEoLxx9f%HMZZ4{>L8-$~tPy55TjdvD~c;i~R*tf@pq zYBE<*x0p57Dx^PJz4Vp`=v>ZEN)Xs_$bxayQ^M8ARC{9P8aHp>0|&&k9P&wJ$sApDO+xHZJ^V&i6WRvIvCNyBRmnCpq5 zr%0F|H-JXvoKsoLQ&guLA*#zqrH)5j32PnLK1;WwqWWUva1V&IK)44)=cH^J1CuyE z^;`&u={_%;dZBd_dv<3LowSB_d!yr~sYN`vHswH$y8iF{Jk|R{JlXv`mCo;@{^bE) z!;9K~d6iM(>6YBmqffNM7y@dYq4K+g!Xb(}KuKc@(+2ulo=02MdRvryvBP5+2|Fx0}I@Ya93`IwaQNju$vRZk2_TN!7v&b??vDd&!Amfk5vXQBUYgseYxX~ zvF%&Hy6={Kcq5KmIPQ<%W{N~Tx+6ds^fSv@fkdCs7|OG zstY|Es*51`8%gLn9A2vRJog0Kf3Luk1Ah67M11_QXgCdQgq|hLA_+cSPhWHO#}2k{ zKqlvch38u#ii+O=tNd&?!8b2{kUU_iS{G549R&+Knc7> zTahMrne{~0uxAojw}W?Ye|OMbnrDqGpcA{2X5@!n3G2>o>tgG!ZaQJz-A!XBxd#m2 z8yz<-Poe#I`R*xE*(CaDOQAN+X?P~5t?W{<5-nexy z(^R*(CA(>7tUE;|ETda~WT2F*Wry7pspF=-$K2Y`i@vX$PTh?#QVo3qbaM9ugoy@` zmf47W*8P+j8_m`RK*QL~1K`sSlF&}1AEK1s*SoF7t;0VjNYn1F^l6cFD+%Er1I<|$ z(wj))Jn6gxq%&Pz!Nc7;R~%2%lZOG5F;kGjz0ie7q#wzBJTiU4W&~Jur4WTxLJa8# z`mDt*%?sydXk49oiV$DmDNEJVv&3i|3^7_o)hSaaj6-@l_-CTI$)oz)PlNU2OX4N? z&c*i;w3dPNWqdKC>8Br}7GLaSq8MMO>1PF;dXTF43Q>x_rjI7>2~I55#CZjT$K=15 zED$+l)5InDGh>=44-yJS!!96ZCo_L#e2k6G%dbP`G~)r5yq@nh{ou(Xco(_)0h|evypE!eVYP8jFj(QE=-bZ%Z4ES@^cR!!7c*IEB(~kkeLn{biWw92fRHXie0kHk#NNCd;f& zl5?UYnVwt<`kF#LkDFmpSwQW26nDq!e4N_D-GduT4>rCje<%1QpKQbG$h zVR0LJ7lSMHO8B67Jtjm_d>`{yXyR#Zn=S0~R(SYCd4Fe$NByLtt1W;?bC2+)+eh{xhEkM=T*H6ygTxOULjh=4&Y}cyMUXM2O$54c@X&D=BL0lMTdYR%D)00RrNcd>LsjU z{0ZY18hJa4@%J9mUc>lvjp#b2zh%omcn|A%0(Y}dF{DWOe8A$eB4C>+1MaJ+GU9mq zaSFz-DgFW+EXGSLDvW;>Y0#!5`9S$3aGKlz$>l7$ktO%!+8Yw~pV?lKWM9qNQ&_u* z?QNFa#u7u2pA<^ev`^%_`m|QHB5h1-{VqkgIFL5ZM2`q@jsBi-04Ip)F1ODJp@$k> zE?W@vD5BZruCoi~`4rLOu!YN$x~7WNu5wmc(Bl<1x|~%u&!>s?F4u`7e4?GXto{{> z@QH_A-DUm*QWsCUx~u&mY|78My7u@1X^3sE?uob^!a#h}Ro;RE{bGl!yblHDi4R@f zbI=9EN3N~|x_t3hM~ATMjG*XOA@I3I&lc>IQE|D;T~|=-jS4zXKnKfXjF`BYx!;I# z^MEajMG%J@A#T;p6aq)eRY>SC!+q+KqiyULNNq$n4SuF@g(#)Nx%iE!h)y*s#SoY47agSZ!w%0Vhk0l@d$+SJr`JE z3>V)W?Qma5RvGo;)MFjaP@9Zn#O5w8y2=Y$t;UT?s4nCcX-iirv0psW1Ae^8z# zK6AM*{4sHw_{Qaq%{wS3;+-k7A>UbfF)>jXE@we^x-eaC4RoiAq|5y^xm!*Wl`fZG zEX5>II~MN|$jzUkyX9mt+*N)Tm143O?Q%H;bA}k_a=$__XNXBI*B`nw#Z;F&4Z1VM z`7ZbS#6dYl%yGHT6EQJGST1+1eo+2ITm}y1U!y;$$HY%WtE*gS9+YQ^)h>5~853uT zbuRb1dQhG%?smC9sxka1d9%yS3GJ3s#j`HAJS4?b@mrVs2l7o5J6tZ}iQ%;VN8)T0 ze-kpEBR+GLn~?Dw@x9A^TCh`{F1#l?&Fu|+;F~UjE@$Yw*W{4V>`>=es z{HZv`Xtn+|_L;-E5pMRyjJcu4Jomf!InH6->&@4!1F|S6(PK zI-D(5mgw4S@#$1Yso|P3M@*-?jMy%=2V%JLT+UopoR`wXJh5>)>73EQsTTtdsh+AFKU1xF_dv6<5{`OA|jQ6!fq`{Qo3JULJ_gB~uPRjA;X89RV6@h;t~yvMj^_xL(k~wVn^L z^@0wx^@0w!^<2kgU7qwPW7RQ5er1!`lxG6phs^|axZYnmB?ob2T%tY@IZL@h%@!PxS@q4p zPn8a_&_5UWom{}~GH~}NxHu%}V6{n9^;@IVD7O^klqm?E3OJ?gcGyfVyH}~eDADlP z*TE5GF|mfLbTi{RdAa_KvQDv2uG%fvt3#qMDw|N7?Ml0Py!pEFgiB9V-&H!~(#WUE zCO8U-o5fS9-Ex!sIQ6x1vzVPctlWtMdPLnQHdpPG8_||WsZ@NOx=E(;hO2jqGb+%2 z%JzUJo>j+IjZz!sR6HiwrM_4|!A0x{p0KE-ULzieoS}BeuS%w>hg2%26YVimUBgAL z5sxP{(Ww${W}0%v#JB2@@{Ibex}!9sN)J__L(VK(tr|?fD-T9)P~Vk*QC6$F(9qUb+RM>FOA$b6IpBm57@{t~LaUvum z3{7;%eW9S|DKSa7UwI3fzUn^B8nz zd$(iI?UX~6pCGL5Jj5F1MEv4lit>hj0G9vo(Oj5ZHpe?fIT4Z$c}eO9Z>PG~cZ)Zx zz8$#R+aY$z2fS^Hy|nycZ>PMj;0cI2AnFj0vErKYXFz`^U-EXyKcgc$UL+@KSxC;%+T@1f|I#*jXcCU)g=GTc6krn5lDcMx(=}>k=~wV` zQ~CdB>$v0ADKxa#DKxY-h9hd`A=4rILz0!h$NRZX^;{+7 zd)6}~f~`||F(rYY7AJfinBS$om*J=yj&2Uu0Vf)pG0h%{4hQ{Abfm8nHq;S+3pGIU zIS%=ku>WS|tCCY7d8}xX&+d?0Loq?_&h}m57JoVxkY?p~7%F^;XKrb!dz_^L! zkNeteh@NKA^DNrN^lMDN&GZhYKVaPFd)H}j?--1d^~&Uuk9;${vy*@EwJSHKg7`h~ zxyt9DY0-UGUaWru``x?(?!bEYuIz{)X!g)4-!6Xw1K*w)rDP1_dR`#uc@36}Xah1o zY8=Lohu_mRy#u>nK=0r+?h>>_6!d|Dr2d5RRB;86XFt2%C5I!pU2+k;?Pp1c+=fMW z509rdf2DQG&0%zqyg(nO?{MZi z*0|&K8s+YSpXfJ>$0F19^}H8kxv)0ItoL552U(me{Jtzt)GUvZtb9K_OW%)fq6(Z@ zWutH8u_ZBJe{7L$vKsU{)Ni}eCij=k)z^bwhyrR$7Xv5h%k&C40yWEee}MuzfbV71Ney8#W@oK(Mud*o$m9iP? z8{&<8LnTE@UrJ}ZKmPj>ao0n(AH~MT?6$Vvxe0TtRBla0oqaF3DBM#Ze&R_OPV2BAI`F* zjU{c6d>C$L$tIR;f@EmqWzQB-n)kBjIWY)GVRf*!1KLX?b|*8PU|xzCUMkG+z9DL( zHB8rlZjDaxet^cG;5~p@(Cj65&0ccX%<^WI->Z}Bt&IB^g+Y=OV*}$X##Y9A8MoS; z>|+#u&cN8fIE%5B@m|KQjQbb`CT6?7F^>Y;m`4F^XL>u+Dctkg^?m`8H!wYp=~O<+ z8yIKh4`D?AA3h>XKN$%ae8jh^tc_) z`=cSmlLdbUX37ZvVUR>+`O|TtA7uGkj87KeuNlSUUmsfZCi$J)t^ zUnj`s5uGq+68>2wYz>iR!b9| z>^XQaFkhULJ9=i7{kW2+ma9Kg8$Hr{zPC*KNL%Xjw9=yk=ZgfN_6mBa)bqJk4=BVP zDLVnLCi}|f;fYUQSrWhXb7dD3g-=d@9KW~eYv{bR>s?4rU!Nd5`cQ}$<97f)grVbW z;8~X+U;5}G#sLQ1G=wyF!nw~RCpKL%t#SU6rZXFxTV@RtZ*Zw5Vy}?9-dKMCP8X zoiMj)@df|4JRB#tfhFkc!<}L3meNcKQEX*{uY+15= zo1#o?+A_?(TDMzoIY(Gx33_q1NQo<$PJwGi?>0fQ7?KqB(nfKq%g^H!k2E1$h$oay z(5A%Ckj{Z^3u~Li%dM%HWH6_Gu6^d3FUY*;z z_VQ!NJlG=(#KO%o7G9u+FDWTW3a^tb=wzANW0$k8-xhgROTo|6dH}!C3Yyth!`Y79 z_#5i%SWrtTB_*XLULk{}K}{&ZU}=dS3%9P9;nur+ARbkMCEk<>XD2Ye>rE-Lq!9k# zaHo^(iulxU>&}?jx(migK1AYAd6jVMM+!c^6sVngFfS$8CL$uzN0bdaNBE)AC8WHb z6f88M27@If6nX2;U_Sl^KD$4N;6F06otjV45uZ1Ow$wSUFWK%RJ;brY`LkL{5FZ1- z?vWv%h6p;tt$zu(9tyX9sc_sY@$(U?#!7F@2XCEb>-Ry!Yzk*lGc>0GzYvl4m4+uJ zOPqov3YBIP7fL4K>Dp%6!zEJm~m%anj9t0}uq^kjOxu&qHNp^UbCb z8#zmS_*HQecn=0+Q;@YBf{7ex2r5dE!GI34m8jSE`6*AAHwZ#LYUN(_&Fe+0_`N0S zAA|=qg^mz|;gzL&sn1u!ne6UX>S~=Y(Lkt_nH`V3>R4aG?B@&yy)>MS>G+1TMZuDA zwzSlXDplZH>Keq%Y_$yQVZDU9hQ8r!jh99g%7@4OT1t=;8dMlv)SBt=%AwS6a7hge zJBbd(a6zYxq)|}nr50RyeD3LW<@QLtVdX+#;ueO*n8rv+%I8NjAb96rXRkIukD5)~ zb*&%iDWwz@4=O&P7&H&i{$5;JQC%+$1*G6~BtD@c7dnt4AIQ36oYWZ@;VcD?$cGmB zg2s_;Gqr?9UO0ff;gu6|H{O(tO_9AK@*`s`ymCtJrJJhkqr+MJ8wszyEVy<@@I4)s zJ)UM2EXLyhu#z3$^RFMKC=Fq~#G~ncug}PXE|4G2P6}tIpvR_SXm>YJn#TEz(y*PK zfmGp8r-u5Li%wC3=#J80sj8#C=zm@XR?gtcw|>O=8mYs~mCXURSlL86bL9eRx|NqW zjGHWB`zsvT3QBC`V__DY9$tAhij*Zj3~`!19t~9p|G2LCm{7D{M3jh%Ke6WybQ8_t zbn@eOXgBeZ2+stmmuWuBJkW!|gTgU7s#hrquk0XQfEo%u-*S?7o#xw_Gj3Th zOveVnORk~?JX*N*36litdk-HHzd-OZ!K=A@ZW*0BaEob^8%%3VGf7K=%YI8$Y31;d zgfWBqxQif`zB0-SYqcn)=>L2es%a6#x5SgiU0l_L>d9SvYovCdH;slfpwXEc3JO0O z76IZ=e7dLj+@@RaltZ_id|STHgP-wC&z*XEs{i77O{w`f1*NPxsSEi~l(H7lktvh9 z3<)H=*)uq>oU`nBLbIgfGCNdjhX9|TIJr%Cglj_!OR||ylV1Ri1GO;epK?( z=VuXpGM7jZDbd?65C~!0?bfEc{Ar%ypsw?mXYTdXfO^Yw z8nDDW9yr@O8_2cxdAqGf={3ITXrn5g$gK7!GPb^2Y#M>PwerkD-$=L4%f9Y9`G(`U zJTup*gSNz*mwDKz2es4aZsBKs$NJO(-o2gQ`j1eR^D@Jai|`!1^U1bqNNs=0!Di8Jql|*Me(tRCU<6wH$n^o@~+w`7ExeC#D8;r>1oc_+ihfseUybwx=d4y4Kgi+O=IFWHWc@ zIwlj=^(ay+8Eyd76rux7n80{a%tW9zI!4tbzCLaPdR@p7IzbQlP{T+J<&>|23+qOJ zwrFH#dpv5dX2BYO4<>jB_11op!9SAx*yhL{$2YltM*K)Jte>RzVr|hV3~|tCuFEyh zaIZQ87qw?-i$+78?XS!A_tUOr?J#Z87-*v&(^EId^z<|M6%0hw8v=_oYiZ{9iP7~w zBn>@BZRE)Bv2KPgexy?4v2FpCrCYb6aKzTS%+S1J?DY^ty{4!2HYRkBbvsJy4lxt* zPLPS#yIAWpy`~;fQX9aaxZ5ckLGta|~b*D!q%PwGC<7gnra$Df^JkMyPPhoIJ* zdH{v%-_%vxXh|mYJ90jpa|*_^~a$+3JpT}H45u7fNofiqo|?6Aznf!$lte(eu-Sq z&taCwdIE(cE!aP+5L*)gZYDW>txp27Jys_Q-@mu^8_p1=@azVxrvV;o6L3$7zfSi% zNigaV=0gZA@S(3xN0u^Y6&w`}NTj@=1a#{eRJkvjxvQYkeimd^y=PEvZBEN$SR_)L zAxJ$3(ACrgOjql9(C&(X2ZXZVC>PHSyTY2_xFRYH`eZ_3vikj!>p<6~f_Mpr4$+VB^7+M2E`yx~UWAPRg)>c4#Xjrey zRvn3+vJfQV!h#w@wSdI?HL zpe{C9e2^3IGPn0ik1Aok+J}CvhqitTGBMb@`%?{Woi+G(5LsP-*4F`9!FYD)(@b@Wj5dH#%^(Fw%n73{O^6>{|Fa-0^JLKT4%=tyd_S+Ep6H~MO#;WFF zx3q3&8$(^3K+LA$v)%!38rHik_NU%s&L21ZtD3F%LAPjrYy?>Vi-$MrcG>zPnAROE z$uhIdfb}PkdxB;b9;Ga2M(y6BBBw^3?SuD+p#D%#G#r*J#w3fqNo4;2NFuAcljzV+ z5}EEv;&o_AT`VGwE47p33OaoWPPBG`ZT)~{*>1P9tq;L2%*FUeLuRPXZ-%Vhkkm(7 zV(6+FlyPj`1JUJBeZ+NhMyD}fA~~tOnfHpzM~-8=u!a8UC@_k8Y9Gv;I^6>Wfomh< zWc@i)S5jv4+=HKwp*_0w@ZrOILXn&w;t0Rc$&*{V9eOpsBnLf3X0wsmY**jA^~R%- z+Of_?XhvkmjYiFA-#s^1b@`q>jyGM%mU3{B#MEfSjP%`jpX{@*_HLc36IAIHsS6PO zXsmIh=QUu}rIuTGhWG+~&lTR?TcL6L@d@{%PsnyOw zV$r@DqnzEd6jsTSmHUGhsIm^gULtQf4zAr0|?GV@X zyuRv@9Fs?{n~w#6Hz(N-k{X_X)Za3tWmV^Y4q@sG)_e&tBEHmD{Um-!zV0V6Jw91U zQwO<1FX`_kQ~wVt*~awxDw9{F|H(X3R%rj7#gc@cC7lhfF(<}35j184mm zrY=5$pW|;Jt{Letn(Uc1-72optCD@RTlK$0b|2k8*s@!9s9&{j`>OugPxY_9s_*)# zzVEC0p`Yq7b0zBHVR;C@rbX43Frh9UB*=992gSlwNvzOePfa8Pvz~a()+1=%puJ3?f`@srrJ*HMn7YJUq69tP?wWyhSx)Jk{97YzIA65989FYy;5{oI9DUXt zJkUO4eYRgV)-h*-?XzV2`|PZk>SKmOjmayUtJkr^Ui%iD;k4ng{>+3AL^N}L)hz+p zd%akzb2I)yXV@H@={Ez|CB0@)ufjd2HO5_u1B}Gfpy6B9Jocs^4j*>oPe6{G?C75p zM~UP5h49y!#}4uVYU(2JHGDNwX&lyE>=vfBxBx1Tplua`#(`bcYqZ5hB4_L)&QY!? z7CB?81Q3A7!XZA2!&?{*`$neJ^w}TW=eLv{CIPvD+^pQ7Y8^sK0& zYu&=N82)`za- zdPmR2ZW8gPs+hwRlI5~44+IaKsY}5dZD7n0nVKgdKXp-8(eexewFbem-tUTP3tS>` z!(6PcRq@ha+>vJ;0TVm1zBR?o1kGTd)z+%!hPoxZ$XYd!^chbxXw^b8NUzJ+<5nF= z-KrOpD7vFtgF&|*34k0yqN=QDLqW=hs9VE8>b9EV)!n%WsVQlRS8+XI;j!Xk1Q*s( zz&tEZzdOElBuHx%V31yDjb?3M-(w(%W=FD9N3+>6tj=#emg(b|j$1!L(VfzIv-HO~ zt>;AZGk}~GWe!$HZSI{Rz4JL;^$F8D7V@AW-P5fGG2%`cefk8tr%!6Cse7E*{eW>| zk&F`){l>}Wfl928hT!aUc&PW7p;|*VL#d0wS-i&@P9}`fY^xE*M#4Iti_$=E*JUuW z3`xFElJAqqeR+~%pQJdUrhWmReR2%B4Oj8jaX=^SKBqCC(@5(HP+)y?yqWx}V<@{= z#lt!tI-jHldd`in$~uwlbIhE?RO=*B{}kAY*De9;WWXS}NKNE!^6cFLFLrIV>XN-Z zHr?h;+|yTL$`x9tpt9-4X8PiV@p$X0?3BknH)_PA{zxEx2cTrd%hbi0sO zj#52I?S~ILjv^^sP+dRX0e)t7`(Yv)?e%l`utZ}Al30b?9Y@jBlpaUF@%8W126prl z1jIx%x7$$}?lAnZTYrYCW$?wHcHzw2)LA|LE*jwPZuU3Sw8Qr?6^(T}Oddvk2}efK zjLCV{Nm9)K9~&JX;rp0~#(Q1BM;{mQ)YP6Z_Urw-Wn)iO>gv%iCZdUMAFf008!6-OjBAOq;=6DKbmrR(L z<7Gfr^POar4)Am@J31DQn1~kq2aXC_r}G}=xZCdSpP2i)-7yg@{14m}ww~M5&1Jpb z7GYUaqD5xW7+f)^^%tc@Ka~^d)|uVtd^PyrF9-#6xSA;#nvn)OH5-SUx4IQ zqgi6jhHwy+IL`&@ckPLp#fz}ADA7{06xZca=ele<9_3Ki@;vs=)C?>Hbq$HA-*Gor zNmz5?!F7&jdoVxSt9gN&*H3s2Vka?MI)_Vp&q9g>S?TUD3k#UxzMpwjQ(GEi2rzES}%J++QN~2k;dG_%gr6 zmp-%HEi0U|)ow-T-BYj9taJyy65$RQa~AdXQ-&MX3%K!0nSSbGobxU~%i)IV^Q8+xhU$M>>Qt3RN)8dRthGO0~zgUg6gLx5p8;@kQsMa_?!R*T)i6 zHUo>VL?LTQijQ|=e#Lp8&r5w3l!F5V3x5)mLf1$G4mw?$K!J~ zXmrjwzO{VBU0M!NT{b#325}{fDdMs29jK(A*U*@ZkwtYQV z_q$ymzLUTP)dEf(B>2yqLmaN*?^YT{ZP1#0qA zHz5jngIsgDRu@$lS3!r@G*ZgejMqFXIXCjfa#D5LQCn|-Y{?*Y*SdJ{i32RM{b)j`r51p_wJv26zwP55P>9}e62nm#x+;zK}^~iho z<(O|dj>@+9w(DGE9ZB*#jBpZHGwNN!UCjpc&hq!vja$DGn)?>F{?X&!nb*!eJYnGs z>o(gzP_ET-*zS$gadUGYm$&qxZ|$LzxQ$S$ViGeH5LBx%F4MyrtV~k^YVaG?L3;U z;I1B>D~_l5u3mE*uCXZLo^aPmq&8%pIy&`}&&r4@t|Xd_Krg8PJ!xS}^TqR8d0xFT z9{t8!mx?Kq=#w+$wH8&JG^ObT=>87=>u9Fnm_b9I02{#1@%Z6-bMdnQ*~0yg@RcS% zz5Lq`gz#xHe)2L4j>)%|M__`FPA7-%FVM-zVcZwYFUX-U3s_#1{YtJ*uM0jb_*94` z?SktB&lb6neGTfq8)RH1l115%hXXV}^Z@LSDp?lQ>Dl1@1p(Th{XlMr9thrV!_*&K z7LCxqvTGv|`k(wIxeYb@~o;gjVLU{p-ovh)yfx zH=)**=BA|@3 zG%DOcAsQ&4L3wQYRg!T;5j#4zXj!y?vOyQnw}p&fh|_nh{+X;b_a^yAD54&|SbP6bKJ>r`%|mvHpb@oPBT@L7I# zdO%#CD-C}jja7lxDG#CRlpSHqQ3gx4Mp@FC|32tDjAhX{9V*W^BlKp7^Jl*!X&)~5 zO^`*yDi}Y4TBjFKp@g1KtWAWdGjV@G3B6IcHc>+N#2Gt5hv>PiJK=gH(yQZFxwx@? zVa7u-&f+Ke?B~sVmXszKZTkhlABN-`#cB_ zAJCMTjjYn;GB&Y;*-0(CJkquz+Ss!jF-Ob0RQ8?Xe}f0s7xOp4$}V z!FnLP0nHqbA=9bY&p61>Ps)uZ(^Jv00{UYv2YQBd>A}ePHkbn<8YScUL>8;-LC5KD zm>>moSC}QK7~>q7ZULdMf(;tT;gpV$o_!^mJ3=JGMe?Oc;(oSy8bet?J7ku8S0!6kLu6whH&4aMj@O zB@$hZ_3}7nEI1WT-zX)l3gf^jbhKx>q0k2J4B#Q1@eGmNCYaP&o9kowkwBAf)MtU7 z;hk&XfO$0vg;bq!mXGlQeLhgrE(YFLz5wWpPB+S^ofZO5E@}h%3YI}W%e)3S$y^EC zpSK2Rm2<8A9>#1h<4D1WboR5`%eYCj^BFIu<8(F(i|85e&7e>Atpom1zY}k;D+ua^nX7$BIHz zUG8Ro7^5=NH!|l1PcALy zsZ7gZ`KA%0wZgqduZKUjl|l;Pj6!s?abfEmR6=LCy4j_FQ|wZj>ME}-Eud1G z=_)VG+h-)H+0`w}`wO^*jt;#jpfW1vvje?G*F`@!%4vwp-4GqDR+3TY=$6LY)g$P) z^~|lw+nt}Q)zaI-aV~VKwdsmstW49XC4V<+=|-2UQol3mX{*Z}3VZxVQfjzk`BN?E zA4;FO+}vQUe>k0Ul%tywE%c9|2k~x=eSQHiBPodMDRV8*jiygr?ss|L8Ap?S>S#xK z0!)vk&t2}X=6A+V=)L0{-A3pdXwF#XmKzJo-qMbz7MHuGY&N)dm%9VHadd;rbwW3e zZgaUqNy~czJ?L`bvPIxF*)CgKK3^M8FT32a}Y8 z3G7!+rqf;Sp+JmIrl~IXXXs9$87}t&bf-|W%N1npS5Bn`E;lMGMyJx{F4t7BOPN4R zUGDq>g(lGT4Y)^hN+;y*Qck0ctDJ)y;%Rid%Qd0F)9GH9y9f=QPLI0WhyMM_8T7Qv z5p-wJi!OIeV!twxUURu~5;2-cZ@FB9v0pipc7Q|s%Z=%HCeNh3uJYH~eq|DU;c~BO zF`7jGayc`+OPNeYBjK~$I3ldz@Emu!J*YQ@DqQX#s5ga%y4-Q7_cQv5%S}eTpV6tz z*>H19&ZXK}G}%=?p0mt%7EO1#ExujKRGRN{@Af(v(tvRv>NOdSNU1d5dS&!TjA2i_eJCU)9GzT zN1qp-f1}f5Rg({PwA!(p}zhuJb59%$LO)<8NG zWXZlHH++9q4{g&CP-t%d9Cfe6LtSEeLxQWVz?%t${uBBeT<`ufOZz`@*VkrXl6&*S zP5#$fyU)1(*OdpF=`fifnb|p8mQA6!F7Un3qAoXplvpaB;_kR z@(1Cvvm?KrW`Z70>r`&|Zov*Zs)TR7vf@Wx!0y zjZ}vd#T_&PN9QN$fZ8713Y)>XuhX$&bFA2mAiM(n0*d3HI6)LAh~iXK&Q(SbpB*Q= zj`%b=g7{>4j#!@Ky5JM%c6DfCk}_N5vt2o#N4Kk$iG|9A;$fldlTV)`T?zmBka(iCRu{k~&SR%lTNDsr@o|w%SFNfq6EHy~;)6t`+Vo;o>0iv8jV*RjgF~ zYC}#&9g5hwfsMuMVbf8(K`p~9(W%N}pCJgN?`41?sBuT}qp_F1krwfo{B@ zrnS$)FR5!>dW_bkb|@c5-d62(+KTcI)M?5XT-Y~j%{lD!3S82+X;u*LQYa_-HB2WK z{ja)R(~`TCF7)F&btN&qlJXNeb!m)ih2~l@+NoV%lB@01jx5gA_DPc+%BDQzP3R|- zGw}B}Phf6TYnyFl9*Pd-vYcwIOIZbayTY+=SLzBT!06nfN!md)ISuk)!MU1(l+Ffy zuynq5Q2BfLCBUn(e;!08F4uM{FJq*4DqVtWu?Ox{Hk9mA_9=UftFI#<67GUqn8l%?et5!k%rxZ@1B8@jMtRmiN+@{BJyu&_|{3%M;}Dn(Frm?h(2rxnG&4tS`}NsG2rDhW+C{p3WV` zA=^7tJp`sh*;+cv+oi4b9p{~?T^>Bq+eN=oPV+XaT_tCFyOfbR(;#^ik}k@K{QZ&{ zp!X{Cyd6p-hNDAyIvGaVd1%tgIKSmhE0g?-pyj#Jq5QM-3P>KtY)C85l_;=$JHE_o zcPO96S3ohZWIq&bB{6DKT5xu2Q_jT*wJBXWc#xD2aui6Gi)6iMzYzIhk@F#~P2s~? zo5F{(HiZvkZ3-X4+7v!~HF`Kt9aQdr$h*M9!_nqB6y5Dv%j>_6FH+9LwRp3Z7k%7& zJ0zRDYh|3)N_wAyI-38+aXPKRXdpl4YgS*57yDj87LW2(i%o~J z*R0l>)pr7RG1R>4^F$j5x~t@5!HFWDD)e;0*&?|>=u3qDrO;Ohy-e_0-xHGXq23Cf zC2B|E4ZbnnE&0FlrPYs0AH!1Cpxy?Wp9rip#s(V|#>sN{EY`j!lwnasEiSs0l2Xih z<*6v+gMv$Bt>hOf9m<>0&-5phS^fun2eliFU;D6~R6K=#^LjVYix~rYRnAMkHEK>_ z7f{v!@w{0{Ah^xSWO%c;i3lT#1^5-2P|a#(#oI_1FF{?(DBRRukxBQ8EKsk=iq@sv zjw6Ywy=mU5cPTN9eTNb=cKKeAXT1?C-KRdk+LZH8Uz_X*ZPH3waHjVwtORX16+Ef8 z+479G$pmRr8Y5(E!w7Ngx8k0gR&FYc0n^yu(n>q%1>7?=tsGn8Gul9hj5cj~Q7%w3 z3XL+Q2z{FA-H!%3lm-5Byq1|prvRr5&cq2Yg3HITMueJy2JT-97apY%XecKd8ZA-I zHj=cA8u4O}v6`+24#uB;z3m^2*Oohhg>(p5fxp)pOtlmP4i`K|aGc0bp+d+fiR9;k zvuHRZ7tnNIE6ooy&@vmY8>N|Xv>0@gG&VydGbsbfOre{FZWlT&xQuS2?*hx{9;(c` zTO{|2%~qke3BF7ZQ+?JeBHt^LeM0XO`eUHoXdDm`Dcn~@;U*QKH9@~fl0ugWHV8Hf zo*>#8LeCVOEs}Pj(}GutWP{Lm3*IY|txVg-HW9rdqP;?s%AxqxmuX~{Uwwm4%u0%+ zS|rtwv}c{5a-dBjX@cartl1*LvyNKLkbIrBLg*EsOM)GsX9M4$mSC6AU7%kK+Iz+I z0TCU5Xi)Y6^<6qAn=}bR<7$5G4LUE|udzHS@-o3{(N;qn3{^uL3p9wlQLst0P0(H( zY7*@Xk9M6m+$qMQvPxm&P9Cp{HNd!DCPf!xXp(XN1YexyU_4$m7lJr?N_rVENgkpn^> z06jbE_j1F2?;Er^TJ8M+>8aDc z6$xdFf58Su+qj>8ujH$jsRz_NZIpJ8wiTO1m1lw{?p^Kuv-dmiKHukfL#~j9|2()6 zdGWoj&VS87zYDbC4aW4GCBQ!vGd}KT$!3w4#FxQ`U9Bzh&86 zycc6!S;}}#-i^TP%hm#)5zH-H2fCsBE?{2yeZZ+@9l-r%j{(msXZ&@5QO#mJM)1M{ zwrtL2Tp(JH;EV*@%rqEZ*B%>%qBhJ%|I%1ARp_U3Izj)*$MO?P8J{v4{iV+UmEzy{ zJ6}Bekdk@noN`;!RL@4wVb5#c8}xFYr=73zeLn}1{CcPNQ)7HB2K{9Z;CJ8#+C}kZ zW}s|YbbxFg4L9=50Ya+5mtzBE!wnU$ahwlF@EX2Q_aQXwJ{VSAhLyDjeJcTm+%ha> z<`2`K?c8{7%G-Hp)*(;lzs?`0ceYy#^-lFt-Pf7B2Gn@-q3(6#22!sY(#@`6r2R z4pDLD?T3mwmtDWWW77F^ceXYCb;wEShwHz3=f)3%_n_2U6v_ntA&wWM^zlaku(@#gzn={Qf z)hXW0%{P_U-Xww;Be>0*RF$GUn8W^6r|1eKy=tWWeHEW<{GoArdk8+>H`6(|-+S;&U2{UB=2K3`FPZFd$vMIyL=>7z6~ zsx|r&W~C%9ViZTxUIRaov_Di7NoN;(Ly@$JAIu_THe$rgbPPqrDB>aDpGZ32ODd8r z9=GdBVkg6WZUs)&(lQ<&xa35_PQk$W(67kS>LPTq*vpw(TAvyHt5Un#pCoAnCT?Ro zX`xUNQsv>IDCrBJ*XV=uZ)czGV*t%L&Pcs)B-LVcKcxCd_4DjQy1n=&9KH7P$fE>j zpzx7~S{N^+yJk)U*QOeT19L9DUw1Pq{JEV8sQ zbIi>Zc2y*ef7S5XCuZqnKfY)7M$+}@feMSE_`g=9kLvwbi6@6=tWo6AjeytZ&w?(P z9Z4S-NjGBP#`8?>PEiU>x~Vu~r<+i!66*Nyz;-b?`hUVmTqQQkTZf*{KhG^ zIeB_DbHl9{RjYc?qet2wHL*VTU!PdKnc+7K+cI_Qj#XaG%v_guF5K|5&2I1%AK;kV zAC>mnAC2G<8Q>_2#s|u{E-GpHNfpm+&#YoH^U=Dx+G1~tmoY7cRTNaZ3>1E$l7b?C zG?MCVB{OpU?aGkOch_h8I)AcpiJE!g-WTF$MeL7w-&FB413z20;OFkls{6{rCBwIE z-0<)h$z~#?Q}ez3Pq)Iz{hYTIL~>18T%EkNbL9QFg@hh##}UIlM0DQr i-~ path\to\PS4CheaterNeo\payloads\ps4debug.bin > path\to\PS4CheaterNeo\payloads\\[FW version]\ps4debug.bin -- It can be downloaded at the following URL(`Only ps4debug 6.72 has been tested`). +- It can be downloaded at the following URL(`Only ps4debug 6.72 and ctn123 version has been tested`). > [ps4debug 5.05 by jogolden](https://github.com/jogolden/ps4debug/releases) > [ps4debug 6.72 by GiantPluto](https://github.com/GiantPluto/ps4debug/releases) > [ps4debug 7.02 by ChendoChap](https://github.com/ChendoChap/ps4debug/tags) > [ps4debug 7.55 by Joonie86](https://github.com/Joonie86/ps4debug/releases) > [ps4debug 9.00 by Karo](https://twitter.com/i/web/status/1471590847707856905) -> [ps4debug all firmware (5.0X, 6.72, 7.02, 7.5X, 9.00) by ctn123](https://github.com/ctn123/PS4_Cheater/releases/) -> [ps5debug Coded by ctn123 & SiSTRo](https://github.com/GoldHEN/ps5debug/releases) +> [ps4debug all firmware (5.0X, 6.72, 7.02, 7.5X, 9.00) by ctn123](https://github.com/ctn123/PS4_Cheater/releases/) +> [ps5debug Coded by ctn123 & SiSTRo](https://github.com/GoldHEN/ps5debug/releases) ## Cheat window [🔼](#table-of-contents) @@ -524,8 +524,12 @@ Determines whether to enable `collapsible split container` ui in `Query and HexE Determines the opacity of the window, the maximum is 1 (opaque), `Default is 0.95`. (0.9.7.7) - `CheatGridViewGroupByEnabled`: Determines whether to enable the GroupByEnabled feature in CheatGridView. When enabled, Cheat items will be grouped. If you have a large number of Cheat items, you may consider disabling this feature to speed up Cheat loading. After setting this, you need to restart the program for it to take effect. `Default enabled` (0.9.9.6) +- `CheatGridGroupRefreshThreshold`: +To prevent excessive wait times during GroupRefresh, the GridView's GroupRefresh mechanism is activated only when the number of cheats is less than this value. `Default is 10000`. (1.0.1.3) - `PS4DBGMutexFactor`: It is not recommended to adjust this value, and changes take effect only after a restart. The Mutex factor determines the number of connections that PS4DBG can occupy during initialization. For ReadMemory, the number of connections is from 0 to (but not including) mutexFactor. For WriteMemory, the number of connections is from mutexFactor to (but not including) 2*mutexFactor. `Default value is 3` (0.9.9.2) +- `DisplayChangesListWhenSaving`: +Determines whether to display the list of change options when saving in Option windows. `Default enabled`. (1.0.1.3) ### Cheat - `CheatLock`: