diff --git a/BetterGiveUp/Assembly-CSharp.BetterGiveUp.mm.csproj b/BetterGiveUp/Assembly-CSharp.BetterGiveUp.mm.csproj deleted file mode 100644 index 01fef46..0000000 --- a/BetterGiveUp/Assembly-CSharp.BetterGiveUp.mm.csproj +++ /dev/null @@ -1,22 +0,0 @@ - - - net35 - Assembly-CSharp.BetterGiveUp.mm - 7EVENDAYS⇔HOLIDAYS - Forfeit and restart in mu3 - 1.6.0 - true - latest - x64 - - - - ..\Common\mscorlib.dll - ..\Common\UnityEngine.dll - - - - - - - diff --git a/BetterGiveUp/BetterGiveUp.csproj b/BetterGiveUp/BetterGiveUp.csproj new file mode 100644 index 0000000..22c60a2 --- /dev/null +++ b/BetterGiveUp/BetterGiveUp.csproj @@ -0,0 +1,7 @@ + + + Assembly-CSharp.BetterGiveUp.mm + Forfeit (red menu) and restart (yellow menu) + + + \ No newline at end of file diff --git a/BetterGiveUp/MU3.Game/patch_GameLED.cs b/BetterGiveUp/MU3.Game/patch_GameLED.cs index 191030e..2374d62 100644 --- a/BetterGiveUp/MU3.Game/patch_GameLED.cs +++ b/BetterGiveUp/MU3.Game/patch_GameLED.cs @@ -1,13 +1,8 @@ -#pragma warning disable CS0626 -#pragma warning disable CS0649 -#pragma warning disable IDE0051 -#pragma warning disable IDE1006 - -using System.Collections.Generic; +using System.Collections.Generic; namespace MU3.Game; -public class patch_GameLED: GameLED { +class patch_GameLED: GameLED { private patch_ButtonList _buttonList = new(); public extern void orig_initialize(); diff --git a/BetterGiveUp/MU3.Notes/patch_FieldObject.cs b/BetterGiveUp/MU3.Notes/patch_FieldObject.cs index ad62644..790342d 100644 --- a/BetterGiveUp/MU3.Notes/patch_FieldObject.cs +++ b/BetterGiveUp/MU3.Notes/patch_FieldObject.cs @@ -1,14 +1,9 @@ -#pragma warning disable CS0626 -#pragma warning disable CS0649 -#pragma warning disable IDE0051 -#pragma warning disable IDE1006 - -using UnityEngine; +using UnityEngine; namespace MU3.Notes; -public class patch_FieldObject: FieldObject { - public class patch_BarNotes { - public class patch_Bar: BarNotes.Bar { +class patch_FieldObject: FieldObject { + class patch_BarNotes { + class patch_Bar: BarNotes.Bar { public extern void orig_update(NotesManager mgr, float width = 1f); public new void update(NotesManager mgr, float width = 1f) { diff --git a/BetterGiveUp/MU3.Notes/patch_NotesManager.cs b/BetterGiveUp/MU3.Notes/patch_NotesManager.cs index 234c4e4..413f918 100644 --- a/BetterGiveUp/MU3.Notes/patch_NotesManager.cs +++ b/BetterGiveUp/MU3.Notes/patch_NotesManager.cs @@ -1,13 +1,8 @@ -#pragma warning disable CS0626 -#pragma warning disable CS0649 -#pragma warning disable IDE0051 -#pragma warning disable IDE1006 - -using UnityEngine; +using UnityEngine; namespace MU3.Notes; -public class patch_NotesManager: NotesManager { +class patch_NotesManager: NotesManager { public extern void orig_reset(); public extern Vector3 orig_getEnemyPos(); diff --git a/BetterGiveUp/MU3.Sequence/patch_PlayMusic.cs b/BetterGiveUp/MU3.Sequence/patch_PlayMusic.cs index f42fd7c..11faa97 100644 --- a/BetterGiveUp/MU3.Sequence/patch_PlayMusic.cs +++ b/BetterGiveUp/MU3.Sequence/patch_PlayMusic.cs @@ -1,9 +1,4 @@ -#pragma warning disable CS0626 -#pragma warning disable CS0649 -#pragma warning disable IDE0051 -#pragma warning disable IDE1006 - -using MU3.Battle; +using MU3.Battle; using MU3.Game; using MU3.Notes; using MU3.Util; @@ -12,7 +7,7 @@ using UnityEngine; namespace MU3.Sequence; -public class patch_PlayMusic: PlayMusic { +class patch_PlayMusic: PlayMusic { private static readonly TimeSpan HOLD_DURATION = TimeSpan.FromSeconds(1.0f); private static readonly TimeSpan ROLL_DURATION = TimeSpan.FromSeconds(0.5f); public static bool QuickSkip = false; diff --git a/BetterGiveUp/MU3/patch_Scene_32_PrePlayMusic_MusicSelect.cs b/BetterGiveUp/MU3/patch_Scene_32_PrePlayMusic_MusicSelect.cs index 79d7e13..caec8e9 100644 --- a/BetterGiveUp/MU3/patch_Scene_32_PrePlayMusic_MusicSelect.cs +++ b/BetterGiveUp/MU3/patch_Scene_32_PrePlayMusic_MusicSelect.cs @@ -1,14 +1,8 @@ -#pragma warning disable CS0626 -#pragma warning disable CS0649 -#pragma warning disable IDE0051 -#pragma warning disable IDE1006 -#pragma warning disable CS0414 - -using MU3.Sequence; +using MU3.Sequence; namespace MU3; -public class patch_Scene_32_PrePlayMusic_MusicSelect: Scene_32_PrePlayMusic_MusicSelect { +class patch_Scene_32_PrePlayMusic_MusicSelect: Scene_32_PrePlayMusic_MusicSelect { private bool _playVoice; private extern void orig_Enter_Select(); private void Enter_Select() { diff --git a/BetterGiveUp/MU3/patch_Scene_37_Result.cs b/BetterGiveUp/MU3/patch_Scene_37_Result.cs index d79dd1a..23f4b26 100644 --- a/BetterGiveUp/MU3/patch_Scene_37_Result.cs +++ b/BetterGiveUp/MU3/patch_Scene_37_Result.cs @@ -1,14 +1,9 @@ -#pragma warning disable CS0626 -#pragma warning disable CS0649 -#pragma warning disable IDE0051 -#pragma warning disable IDE1006 - using MU3.Sequence; using MU3.Util; namespace MU3; -public class patch_Scene_37_Result: Scene_37_Result { +class patch_Scene_37_Result: Scene_37_Result { private Mode mode_; private extern void orig_Init_Init(); private enum State { @@ -25,7 +20,6 @@ public class patch_Scene_37_Result: Scene_37_Result { CardCharaEnd, End } - private void Init_Init() { orig_Init_Init(); if(patch_PlayMusic.QuickSkip) { diff --git a/BetterGiveUp/MU3/patch_Scene_38_End.cs b/BetterGiveUp/MU3/patch_Scene_38_End.cs index c4cfe78..060dc85 100644 --- a/BetterGiveUp/MU3/patch_Scene_38_End.cs +++ b/BetterGiveUp/MU3/patch_Scene_38_End.cs @@ -1,15 +1,9 @@ -#pragma warning disable CS0626 -#pragma warning disable CS0649 -#pragma warning disable CS0414 -#pragma warning disable IDE0051 -#pragma warning disable IDE1006 - using MU3.Sequence; using MU3.Util; namespace MU3; -public class patch_Scene_38_End: Scene_38_End { +class patch_Scene_38_End: Scene_38_End { private Mode mode_; private extern void orig_Init_Init(); private int result_; diff --git a/DisableEncryption/DisableEncryption.csproj b/DisableEncryption/DisableEncryption.csproj new file mode 100644 index 0000000..2dc87c7 --- /dev/null +++ b/DisableEncryption/DisableEncryption.csproj @@ -0,0 +1,7 @@ + + + Assembly-CSharp.DisableEncryption.mm + Disable encryption + + + \ No newline at end of file diff --git a/DisableEncryption/MU3/patch_NetConfig.cs b/DisableEncryption/MU3/patch_NetConfig.cs new file mode 100644 index 0000000..1717938 --- /dev/null +++ b/DisableEncryption/MU3/patch_NetConfig.cs @@ -0,0 +1,28 @@ +using MonoMod; + +namespace MU3; + +[MonoModPatch("global::MU3.NetConfig")] +public static class patch_NetConfig { + private static int encryptVersion_; + + private static bool useTLS_; + + public static int EncryptVersion { + get { + return 0; + } + set { + encryptVersion_ = 0; + } + } + + public static bool UseTLS { + get { + return false; + } + set { + useTLS_ = false; + } + } +} diff --git a/DisableMaintenance/DisableMaintenance.csproj b/DisableMaintenance/DisableMaintenance.csproj new file mode 100644 index 0000000..a5b98d4 --- /dev/null +++ b/DisableMaintenance/DisableMaintenance.csproj @@ -0,0 +1,7 @@ + + + Assembly-CSharp.DisableMaintenance.mm + Disable maintenance + + + \ No newline at end of file diff --git a/DisableMaintenance/MU3.Operation/patch_ClosingManager.cs b/DisableMaintenance/MU3.Operation/patch_ClosingManager.cs new file mode 100644 index 0000000..4366696 --- /dev/null +++ b/DisableMaintenance/MU3.Operation/patch_ClosingManager.cs @@ -0,0 +1,27 @@ +namespace MU3.Operation; + +class patch_ClosingManager: ClosingManager { + public new int getRemainingMinutes() { + return int.MaxValue; + } + + public new int getClosedRemainingMinutes() { + return int.MaxValue; + } + + public new bool isShowRemainingMinutes() { + return false; + } + + public new bool isReceptionClosed() { + return false; + } + + public new bool isForceLogout() { + return false; + } + + public new CreditUseRestriction getCreditUseRestriction() { + return CreditUseRestriction.None; + } +} diff --git a/DisableMaintenance/MU3.Operation/patch_MaintenanceTimer.cs b/DisableMaintenance/MU3.Operation/patch_MaintenanceTimer.cs new file mode 100644 index 0000000..7b61333 --- /dev/null +++ b/DisableMaintenance/MU3.Operation/patch_MaintenanceTimer.cs @@ -0,0 +1,47 @@ +namespace MU3.Operation; + +class patch_MaintenanceTimer: MaintenanceTimer { + public new bool isUnderServerMaintenance() { + return false; + } + + public new int getServerMaintenanceSec() { + return int.MaxValue; + } + + public new int getAutoRebootSec() { + return int.MaxValue; + } + + public new bool isAutoRebootNeeded() { + return false; + } + + public new int getRemainingMinutes() { + return int.MaxValue; + } + + public new int getClosedRemainingMinutes() { + return int.MaxValue; + } + + public new bool isShowRemainingMinutes() { + return false; + } + + public new bool isClosed() { + return false; + } + + public new bool isForceLogout() { + return false; + } + + public new ClosingManager.CreditUseRestriction getCreditUseRestriction() { + return ClosingManager.CreditUseRestriction.None; + } + + public new bool isCoinAcceptable() { + return true; + } +} diff --git a/ExportChartData/Assembly-CSharp.ExportChartData.mm.csproj b/ExportChartData/Assembly-CSharp.ExportChartData.mm.csproj deleted file mode 100644 index 892908a..0000000 --- a/ExportChartData/Assembly-CSharp.ExportChartData.mm.csproj +++ /dev/null @@ -1,23 +0,0 @@ - - - net35 - Assembly-CSharp.ExportChartData.mm - 7EVENDAYS⇔HOLIDAYS - Export mu3 chart data - 1.3.0 - true - latest - x64 - - - - ..\Common\mscorlib.dll - ..\Common\UnityEngine.dll - - - - - - - - diff --git a/ExportChartData/MU3.Data/patch_DataManager.cs b/ExportChartData/MU3.Data/patch_DataManager.cs deleted file mode 100644 index 0d2df3a..0000000 --- a/ExportChartData/MU3.Data/patch_DataManager.cs +++ /dev/null @@ -1,63 +0,0 @@ -#pragma warning disable CS0626 -#pragma warning disable CS0649 -#pragma warning disable IDE0051 -#pragma warning disable IDE1006 - -using System.IO; - -namespace MU3.Data; - -public class patch_DataManager: DataManager { - private extern void orig_linkFumenAnalysisData(); - private const string SEPARATOR = "$"; - private string PrintHeader() { - return string.Join(SEPARATOR, new string[] { - "id", - "name", - "difficulty", - "name for sort", - "artist", - "genre", - "internal level", - "charter", - "max platinum score", - "release date", - "release version", - "bpm", - "location" - }); - } - private string PrintLine(FumenData fumen, MusicData mus, int level) { - return string.Join(SEPARATOR, new string[] { - mus.id.ToString(), - mus.name, - level.ToString(), - mus.nameForSort, - mus.artistName, - mus.genreName, - fumen.fumenConst.ToString(), - fumen.notesDesignerName ?? "", - fumen.platinumScoreMax.ToString(), - mus.ReleaseVersion.ToUniversalTime().ToString(), - mus.versionTitle, - fumen.bpm.ToString(), - fumen.fumenFile.Substring(fumen.fumenFile.LastIndexOf('A')) - }); - } - - private void linkFumenAnalysisData() { - orig_linkFumenAnalysisData(); - using StreamWriter writer = new("charts.csv"); - writer.WriteLine(PrintHeader()); - foreach(var mus in allMusicData) { - int i = 0; - foreach(var fumen in mus.fumenData) { - if(fumen.isExist) { - writer.WriteLine(PrintLine(fumen, mus, i)); - } - i += 1; - } - } - UnityEngine.Debug.Log("[ExportChartData] Written to charts.csv"); - } -} \ No newline at end of file diff --git a/InfiniteGP/Assembly-CSharp.InfiniteGP.mm.csproj b/InfiniteGP/Assembly-CSharp.InfiniteGP.mm.csproj deleted file mode 100644 index 1eb3262..0000000 --- a/InfiniteGP/Assembly-CSharp.InfiniteGP.mm.csproj +++ /dev/null @@ -1,23 +0,0 @@ - - - net35 - Assembly-CSharp.InfiniteGP.mm - 7EVENDAYS⇔HOLIDAYS - Infinite GP in mu3 - 1.6.0 - true - latest - x64 - - - - ..\Common\mscorlib.dll - ..\Common\UnityEngine.dll - ..\Common\UnityEngine.UI.dll - - - - - - - \ No newline at end of file diff --git a/InfiniteGP/InfiniteGP.csproj b/InfiniteGP/InfiniteGP.csproj new file mode 100644 index 0000000..5c702f3 --- /dev/null +++ b/InfiniteGP/InfiniteGP.csproj @@ -0,0 +1,7 @@ + + + Assembly-CSharp.InfiniteGP.mm + Remove credits and GP + + + \ No newline at end of file diff --git a/InfiniteGP/MU3.User/patch_UserManager.cs b/InfiniteGP/MU3.User/patch_UserManager.cs index df5d889..fe6d02f 100644 --- a/InfiniteGP/MU3.User/patch_UserManager.cs +++ b/InfiniteGP/MU3.User/patch_UserManager.cs @@ -1,9 +1,6 @@ -#pragma warning disable CS0649 -#pragma warning disable IDE1006 +namespace MU3.User; -namespace MU3.User; - -public class patch_UserManager: UserManager { +class patch_UserManager: UserManager { public new const int DefaultGP = 666; private int _gp; private OnUpdate _onUpdateGP; diff --git a/InfiniteGP/MU3/patch_Scene_25_Login.cs b/InfiniteGP/MU3/patch_Scene_25_Login.cs index 43b4ec0..05466ea 100644 --- a/InfiniteGP/MU3/patch_Scene_25_Login.cs +++ b/InfiniteGP/MU3/patch_Scene_25_Login.cs @@ -1,13 +1,10 @@ -#pragma warning disable CS0649 -#pragma warning disable CS0626 - using MU3.Util; namespace MU3; -public class patch_Scene_25_Login: Scene_25_Login { - private enum State { +class patch_Scene_25_Login: Scene_25_Login { + public enum State { Login = 2 } private Mode mode_; diff --git a/InfiniteGP/MU3/patch_UIMoneyExchange.cs b/InfiniteGP/MU3/patch_UIMoneyExchange.cs index 43ec509..fb99561 100644 --- a/InfiniteGP/MU3/patch_UIMoneyExchange.cs +++ b/InfiniteGP/MU3/patch_UIMoneyExchange.cs @@ -1,12 +1,9 @@ -#pragma warning disable CS0626 -#pragma warning disable CS0649 - using MU3.CustomUI; using UnityEngine; namespace MU3; -public class patch_UICredit: UICredit { +class patch_UICredit: UICredit { private Animator gpAnimator_; private GameObject creditRoot_; private MU3UICounter credit_; diff --git a/LoadBoost/LoadBoost.csproj b/LoadBoost/LoadBoost.csproj new file mode 100644 index 0000000..44300da --- /dev/null +++ b/LoadBoost/LoadBoost.csproj @@ -0,0 +1,7 @@ + + + Assembly-CSharp.LoadBoost.mm + Speed up startup + + + \ No newline at end of file diff --git a/LoadBoost/MU3.Data/patch_DataManager.cs b/LoadBoost/MU3.Data/patch_DataManager.cs new file mode 100644 index 0000000..5064ca4 --- /dev/null +++ b/LoadBoost/MU3.Data/patch_DataManager.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; + +namespace MU3.Data; + +public class patch_DataManager: DataManager { + private Dictionary _fumenAnalysisData; + + private void InitCache() { + if(File.Exists("data_fumen_analysis_cache.bin")) { + System.Console.WriteLine("Loading FumenAnalysisData cache..."); + _fumenAnalysisData = new Dictionary(); + using(FileStream input = File.OpenRead("data_fumen_analysis_cache.bin")) { + using BinaryReader binaryReader = new BinaryReader(input); + while(binaryReader.BaseStream.Position < binaryReader.BaseStream.Length) { + int key = binaryReader.ReadInt32(); + bool isExist = binaryReader.ReadBoolean(); + int bpm = binaryReader.ReadInt32(); + int platinumScoreMax = binaryReader.ReadInt32(); + string notesDesignerName = binaryReader.ReadString(); + _fumenAnalysisData.Add(key, new FumenAnalysisData { + isExist = isExist, + bpm = bpm, + platinumScoreMax = platinumScoreMax, + notesDesignerName = notesDesignerName + }); + } + } + System.Console.WriteLine("Success"); + } else { + _fumenAnalysisData = new Dictionary(); + } + } + + private void SaveCache() { + System.Console.WriteLine($"Saving FumenAnalysisData cache...{Enumerable.First>((IEnumerable>)_fumenAnalysisData).Key},{Enumerable.First>((IEnumerable>)_fumenAnalysisData).Value.notesDesignerName}"); + if(File.Exists("data_fumen_analysis_cache.bin")) { + File.Delete("data_fumen_analysis_cache.bin"); + } + using(FileStream fileStream = File.OpenWrite("data_fumen_analysis_cache.bin")) { + using BinaryWriter binaryWriter = new BinaryWriter(fileStream); + foreach(KeyValuePair fumenAnalysisDatum in _fumenAnalysisData) { + binaryWriter.Write(fumenAnalysisDatum.Key); + binaryWriter.Write(fumenAnalysisDatum.Value.isExist); + binaryWriter.Write(fumenAnalysisDatum.Value.bpm); + binaryWriter.Write(fumenAnalysisDatum.Value.platinumScoreMax); + binaryWriter.Write(fumenAnalysisDatum.Value.notesDesignerName); + } + fileStream.Flush(); + } + System.Console.WriteLine("Success"); + } + + private extern void orig_makeFumenAnalysisDataList(); + + private void makeFumenAnalysisDataList() { + try { + if(DataStudioManager.needSave || !File.Exists("data_fumen_analysis_cache.bin")) { + orig_makeFumenAnalysisDataList(); + SaveCache(); + } else { + InitCache(); + } + } catch(Exception value) { + System.Console.WriteLine(value); + } + } +} diff --git a/LoadBoost/MU3.Data/patch_DataStudioManager.cs b/LoadBoost/MU3.Data/patch_DataStudioManager.cs new file mode 100644 index 0000000..e0f670d --- /dev/null +++ b/LoadBoost/MU3.Data/patch_DataStudioManager.cs @@ -0,0 +1,60 @@ +using System.Collections.Generic; +using System.IO; +using System.Runtime.Serialization.Formatters.Binary; + +namespace MU3.Data; + +public class DataStudioManager { + public static bool needSave; + + private static Dictionary _dataCache; + + private static extern bool orig_Deserialize(string filePath, out T dsr) where T : new(); + + private static void InitCache() { + if(File.Exists("data_cache.bin")) { + System.Console.WriteLine("Loading cache..."); + using FileStream serializationStream = File.OpenRead("data_cache.bin"); + _dataCache = (Dictionary)new BinaryFormatter().Deserialize(serializationStream); + return; + } + _dataCache = new Dictionary(); + } + + private static void SaveCache() { + if(File.Exists("data_cache.bin")) { + File.Delete("data_cache.bin"); + } + using FileStream serializationStream = File.OpenWrite("data_cache.bin"); + new BinaryFormatter().Serialize(serializationStream, _dataCache); + } + + private static bool Deserialize(string filePath, out T dsr) where T : new() { + if(_dataCache == null) { + InitCache(); + } + if(_dataCache.ContainsKey(filePath)) { + dsr = (T)_dataCache[filePath]; + return true; + } + if(orig_Deserialize(filePath, out dsr)) { + needSave = true; + _dataCache.Add(filePath, dsr); + return true; + } + return false; + } + + public extern bool orig_IsLoaded(); + + public bool IsLoaded() { + if(orig_IsLoaded()) { + if(needSave) { + System.Console.WriteLine("Saving cache..."); + SaveCache(); + } + return true; + } + return false; + } +} diff --git a/LoadBoost/MU3.Sequence/patch_Initialize.cs b/LoadBoost/MU3.Sequence/patch_Initialize.cs new file mode 100644 index 0000000..a1154e6 --- /dev/null +++ b/LoadBoost/MU3.Sequence/patch_Initialize.cs @@ -0,0 +1,16 @@ +using MU3.SceneObject; + +namespace MU3.Sequence; + +public class patch_Initialize: Initialize { + private Scene_12_Initialize _initializeObject; + + private void Execute_InitQRReader() { + _initializeObject.setQRCodeReaderStatus("SKIP"); + setNextState(EState.CheckDelivery); + } + + private void Enter_Warning() { + setNextState(EState.StateEnd); + } +} diff --git a/LockSelectionTime/Assembly-CSharp.LockSelectionTime.mm.csproj b/LockSelectionTime/Assembly-CSharp.LockSelectionTime.mm.csproj deleted file mode 100644 index 6f1d601..0000000 --- a/LockSelectionTime/Assembly-CSharp.LockSelectionTime.mm.csproj +++ /dev/null @@ -1,23 +0,0 @@ - - - net35 - Assembly-CSharp.LockSelectionTime.mm - 7EVENDAYS⇔HOLIDAYS - Lock selection time in mu3 - 1.5.0 - true - latest - x64 - - - - ..\Common\mscorlib.dll - ..\Common\UnityEngine.dll - ..\Common\UnityEngine.UI.dll - - - - - - - \ No newline at end of file diff --git a/LockSelectionTime/LockSelectionTime.csproj b/LockSelectionTime/LockSelectionTime.csproj new file mode 100644 index 0000000..5a5081e --- /dev/null +++ b/LockSelectionTime/LockSelectionTime.csproj @@ -0,0 +1,7 @@ + + + Assembly-CSharp.LockSelectionTime.mm + Disable all timers + + + \ No newline at end of file diff --git a/LockSelectionTime/MU3/patch_SystemUI.cs b/LockSelectionTime/MU3/patch_SystemUI.cs index ab03f6f..ea64caa 100644 --- a/LockSelectionTime/MU3/patch_SystemUI.cs +++ b/LockSelectionTime/MU3/patch_SystemUI.cs @@ -1,9 +1,7 @@ -#pragma warning disable CS0626 - namespace MU3; -public class patch_SystemUI: SystemUI { - public class patch_Timer: SystemUI.Timer { +class patch_SystemUI: SystemUI { + class patch_Timer: Timer { public patch_Timer(UITimer timer) : base(timer) { /* nop */ } public new void execute() { /* nop */ } public extern bool orig_get_show(); diff --git a/LockSelectionTime/MU3/patch_UITimer.cs b/LockSelectionTime/MU3/patch_UITimer.cs index 04e26c8..8f42fe8 100644 --- a/LockSelectionTime/MU3/patch_UITimer.cs +++ b/LockSelectionTime/MU3/patch_UITimer.cs @@ -1,10 +1,8 @@ -#pragma warning disable CS0626 - using UnityEngine; namespace MU3; -public class patch_UITimer: UITimer { +class patch_UITimer: UITimer { public new void update() { /* nop */ } public new void update(float externalCounter) { /* nop */ } public extern void orig_initialize(float counter); diff --git a/MiscMods.sln b/MiscMods.sln deleted file mode 100644 index a1043bb..0000000 --- a/MiscMods.sln +++ /dev/null @@ -1,79 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.9.34728.123 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.BetterGiveUp.mm", "BetterGiveUp\Assembly-CSharp.BetterGiveUp.mm.csproj", "{003AD3C6-07CA-4824-B4BD-4BEF6F3D8997}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.NaiveRating.mm", "NaiveRating\Assembly-CSharp.NaiveRating.mm.csproj", "{1FEA698E-DF5E-46CF-8023-F2B2F57885C5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.ExportChartData.mm", "ExportChartData\Assembly-CSharp.ExportChartData.mm.csproj", "{8BFC37B1-C6C8-492A-B8DC-99BD1F1B9576}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.SkipNotice.mm", "SkipNotice\Assembly-CSharp.SkipNotice.mm.csproj", "{A1F32CB9-56C2-458A-B369-C61BD3A6AFBB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.SkipPreMusicRitual.mm", "SkipPreMusicRitual\Assembly-CSharp.SkipPreMusicRitual.mm.csproj", "{BB9CB905-9989-466C-9A91-D2F323005237}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.InfiniteGP.mm", "InfiniteGP\Assembly-CSharp.InfiniteGP.mm.csproj", "{990DCB96-7A47-45B9-B7CB-A6B2A1B6864A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.LockSelectionTime.mm", "LockSelectionTime\Assembly-CSharp.LockSelectionTime.mm.csproj", "{66DE85AD-58AD-467C-B1C0-6B98BB27265D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.SkipLoginReward.mm", "SkipLoginReward\Assembly-CSharp.SkipLoginReward.mm.csproj", "{6E078B7E-7965-4CFF-9590-5C27A009BA7A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.Pause.mm", "Pause\Assembly-CSharp.Pause.mm.csproj", "{627B3AA0-25E2-4C3E-A211-66BAB0E997E2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Assembly-CSharp.UnlockAndSetJewelBoostNine.mm", "UnlockAndSetJewelBoostNine\Assembly-CSharp.UnlockAndSetJewelBoostNine.mm.csproj", "{70C775D7-8C47-4CFE-B91D-6AAEB17389F2}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {003AD3C6-07CA-4824-B4BD-4BEF6F3D8997}.Debug|x64.ActiveCfg = Debug|x64 - {003AD3C6-07CA-4824-B4BD-4BEF6F3D8997}.Debug|x64.Build.0 = Debug|x64 - {003AD3C6-07CA-4824-B4BD-4BEF6F3D8997}.Release|x64.ActiveCfg = Release|x64 - {003AD3C6-07CA-4824-B4BD-4BEF6F3D8997}.Release|x64.Build.0 = Release|x64 - {1FEA698E-DF5E-46CF-8023-F2B2F57885C5}.Debug|x64.ActiveCfg = Debug|x64 - {1FEA698E-DF5E-46CF-8023-F2B2F57885C5}.Debug|x64.Build.0 = Debug|x64 - {1FEA698E-DF5E-46CF-8023-F2B2F57885C5}.Release|x64.ActiveCfg = Release|x64 - {1FEA698E-DF5E-46CF-8023-F2B2F57885C5}.Release|x64.Build.0 = Release|x64 - {8BFC37B1-C6C8-492A-B8DC-99BD1F1B9576}.Debug|x64.ActiveCfg = Debug|x64 - {8BFC37B1-C6C8-492A-B8DC-99BD1F1B9576}.Debug|x64.Build.0 = Debug|x64 - {8BFC37B1-C6C8-492A-B8DC-99BD1F1B9576}.Release|x64.ActiveCfg = Release|x64 - {8BFC37B1-C6C8-492A-B8DC-99BD1F1B9576}.Release|x64.Build.0 = Release|x64 - {A1F32CB9-56C2-458A-B369-C61BD3A6AFBB}.Debug|x64.ActiveCfg = Debug|x64 - {A1F32CB9-56C2-458A-B369-C61BD3A6AFBB}.Debug|x64.Build.0 = Debug|x64 - {A1F32CB9-56C2-458A-B369-C61BD3A6AFBB}.Release|x64.ActiveCfg = Release|x64 - {A1F32CB9-56C2-458A-B369-C61BD3A6AFBB}.Release|x64.Build.0 = Release|x64 - {BB9CB905-9989-466C-9A91-D2F323005237}.Debug|x64.ActiveCfg = Debug|x64 - {BB9CB905-9989-466C-9A91-D2F323005237}.Debug|x64.Build.0 = Debug|x64 - {BB9CB905-9989-466C-9A91-D2F323005237}.Release|x64.ActiveCfg = Release|x64 - {BB9CB905-9989-466C-9A91-D2F323005237}.Release|x64.Build.0 = Release|x64 - {990DCB96-7A47-45B9-B7CB-A6B2A1B6864A}.Debug|x64.ActiveCfg = Debug|x64 - {990DCB96-7A47-45B9-B7CB-A6B2A1B6864A}.Debug|x64.Build.0 = Debug|x64 - {990DCB96-7A47-45B9-B7CB-A6B2A1B6864A}.Release|x64.ActiveCfg = Release|x64 - {990DCB96-7A47-45B9-B7CB-A6B2A1B6864A}.Release|x64.Build.0 = Release|x64 - {66DE85AD-58AD-467C-B1C0-6B98BB27265D}.Debug|x64.ActiveCfg = Debug|x64 - {66DE85AD-58AD-467C-B1C0-6B98BB27265D}.Debug|x64.Build.0 = Debug|x64 - {66DE85AD-58AD-467C-B1C0-6B98BB27265D}.Release|x64.ActiveCfg = Release|x64 - {66DE85AD-58AD-467C-B1C0-6B98BB27265D}.Release|x64.Build.0 = Release|x64 - {6E078B7E-7965-4CFF-9590-5C27A009BA7A}.Debug|x64.ActiveCfg = Debug|x64 - {6E078B7E-7965-4CFF-9590-5C27A009BA7A}.Debug|x64.Build.0 = Debug|x64 - {6E078B7E-7965-4CFF-9590-5C27A009BA7A}.Release|x64.ActiveCfg = Release|x64 - {6E078B7E-7965-4CFF-9590-5C27A009BA7A}.Release|x64.Build.0 = Release|x64 - {627B3AA0-25E2-4C3E-A211-66BAB0E997E2}.Debug|x64.ActiveCfg = Debug|x64 - {627B3AA0-25E2-4C3E-A211-66BAB0E997E2}.Debug|x64.Build.0 = Debug|x64 - {627B3AA0-25E2-4C3E-A211-66BAB0E997E2}.Release|x64.ActiveCfg = Release|x64 - {627B3AA0-25E2-4C3E-A211-66BAB0E997E2}.Release|x64.Build.0 = Release|x64 - {70C775D7-8C47-4CFE-B91D-6AAEB17389F2}.Debug|x64.ActiveCfg = Debug|x64 - {70C775D7-8C47-4CFE-B91D-6AAEB17389F2}.Debug|x64.Build.0 = Debug|x64 - {70C775D7-8C47-4CFE-B91D-6AAEB17389F2}.Release|x64.ActiveCfg = Release|x64 - {70C775D7-8C47-4CFE-B91D-6AAEB17389F2}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {D9317002-F66D-4CDE-8FF5-FF2A0D8DC021} - EndGlobalSection -EndGlobal diff --git a/Pause/Assembly-CSharp.Pause.mm.csproj b/Mu3Mods.csproj similarity index 82% rename from Pause/Assembly-CSharp.Pause.mm.csproj rename to Mu3Mods.csproj index 3ad10cd..7e89726 100644 --- a/Pause/Assembly-CSharp.Pause.mm.csproj +++ b/Mu3Mods.csproj @@ -1,13 +1,12 @@ - + net35 - Assembly-CSharp.Pause.mm 7EVENDAYS⇔HOLIDAYS - Pause in mu3 - 1.6.0 + 2.0.2 true latest x64 + IDE0044,IDE0051,IDE0052,IDE1006,CS0414,CS0649,CS0626 @@ -15,10 +14,11 @@ ..\Common\UnityEngine.dll ..\Common\UnityEngine.UI.dll ..\Common\Assembly-CSharp-firstpass.dll + - + \ No newline at end of file diff --git a/Mu3Mods.sln b/Mu3Mods.sln new file mode 100644 index 0000000..d2924d7 --- /dev/null +++ b/Mu3Mods.sln @@ -0,0 +1,121 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.9.34728.123 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BetterGiveUp", "BetterGiveUp\BetterGiveUp.csproj", "{003AD3C6-07CA-4824-B4BD-4BEF6F3D8997}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NaiveRating", "NaiveRating\NaiveRating.csproj", "{1FEA698E-DF5E-46CF-8023-F2B2F57885C5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkipNotice", "SkipNotice\SkipNotice.csproj", "{A1F32CB9-56C2-458A-B369-C61BD3A6AFBB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SkipPreMusicRitual", "SkipPreMusicRitual\SkipPreMusicRitual.csproj", "{BB9CB905-9989-466C-9A91-D2F323005237}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InfiniteGP", "InfiniteGP\InfiniteGP.csproj", "{990DCB96-7A47-45B9-B7CB-A6B2A1B6864A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LockSelectionTime", "LockSelectionTime\LockSelectionTime.csproj", "{66DE85AD-58AD-467C-B1C0-6B98BB27265D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pause", "Pause\Pause.csproj", "{627B3AA0-25E2-4C3E-A211-66BAB0E997E2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnlockAndSetJewelBoostNine", "UnlockAndSetJewelBoostNine\UnlockAndSetJewelBoostNine.csproj", "{70C775D7-8C47-4CFE-B91D-6AAEB17389F2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SortByInternalDifficulty", "SortByInternalDifficulty\SortByInternalDifficulty.csproj", "{0BF799DF-8837-4372-9F36-705CDC22374C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LoadBoost", "LoadBoost\LoadBoost.csproj", "{56B75395-ED26-479B-B59F-DABB74513335}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisableEncryption", "DisableEncryption\DisableEncryption.csproj", "{3F05931E-4444-4616-A0AC-047809821B0E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnlockMasterDifficulty", "UnlockMasterDifficulty\UnlockMasterDifficulty.csproj", "{965FCDBC-12EA-4F31-AAF6-9C4C3B9F7022}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnlockFrameRate", "UnlockFrameRate\UnlockFrameRate.csproj", "{0C3E8145-F91B-4F1F-97D1-17E12D49891B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnlockAllMusic", "UnlockAllMusic\UnlockAllMusic.csproj", "{C8948C3E-0434-429E-AFE6-4FB2DF246872}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisableMaintenance", "DisableMaintenance\DisableMaintenance.csproj", "{6C91EB92-3A30-43B5-8954-E84C610C1D67}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnlockGameEvents", "UnlockGameEvents\UnlockGameEvents.csproj", "{3B9B843D-DCA0-41FE-B642-6BCB187BBD5D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnlockMemoryChapters", "UnlockMemoryChapters\UnlockMemoryChapters.csproj", "{3A217A12-6082-491B-89F6-C1D13AD69A19}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {003AD3C6-07CA-4824-B4BD-4BEF6F3D8997}.Debug|x64.ActiveCfg = Debug|x64 + {003AD3C6-07CA-4824-B4BD-4BEF6F3D8997}.Debug|x64.Build.0 = Debug|x64 + {003AD3C6-07CA-4824-B4BD-4BEF6F3D8997}.Release|x64.ActiveCfg = Release|x64 + {003AD3C6-07CA-4824-B4BD-4BEF6F3D8997}.Release|x64.Build.0 = Release|x64 + {1FEA698E-DF5E-46CF-8023-F2B2F57885C5}.Debug|x64.ActiveCfg = Debug|x64 + {1FEA698E-DF5E-46CF-8023-F2B2F57885C5}.Debug|x64.Build.0 = Debug|x64 + {1FEA698E-DF5E-46CF-8023-F2B2F57885C5}.Release|x64.ActiveCfg = Release|x64 + {1FEA698E-DF5E-46CF-8023-F2B2F57885C5}.Release|x64.Build.0 = Release|x64 + {A1F32CB9-56C2-458A-B369-C61BD3A6AFBB}.Debug|x64.ActiveCfg = Debug|x64 + {A1F32CB9-56C2-458A-B369-C61BD3A6AFBB}.Debug|x64.Build.0 = Debug|x64 + {A1F32CB9-56C2-458A-B369-C61BD3A6AFBB}.Release|x64.ActiveCfg = Release|x64 + {A1F32CB9-56C2-458A-B369-C61BD3A6AFBB}.Release|x64.Build.0 = Release|x64 + {BB9CB905-9989-466C-9A91-D2F323005237}.Debug|x64.ActiveCfg = Debug|x64 + {BB9CB905-9989-466C-9A91-D2F323005237}.Debug|x64.Build.0 = Debug|x64 + {BB9CB905-9989-466C-9A91-D2F323005237}.Release|x64.ActiveCfg = Release|x64 + {BB9CB905-9989-466C-9A91-D2F323005237}.Release|x64.Build.0 = Release|x64 + {990DCB96-7A47-45B9-B7CB-A6B2A1B6864A}.Debug|x64.ActiveCfg = Debug|x64 + {990DCB96-7A47-45B9-B7CB-A6B2A1B6864A}.Debug|x64.Build.0 = Debug|x64 + {990DCB96-7A47-45B9-B7CB-A6B2A1B6864A}.Release|x64.ActiveCfg = Release|x64 + {990DCB96-7A47-45B9-B7CB-A6B2A1B6864A}.Release|x64.Build.0 = Release|x64 + {66DE85AD-58AD-467C-B1C0-6B98BB27265D}.Debug|x64.ActiveCfg = Debug|x64 + {66DE85AD-58AD-467C-B1C0-6B98BB27265D}.Debug|x64.Build.0 = Debug|x64 + {66DE85AD-58AD-467C-B1C0-6B98BB27265D}.Release|x64.ActiveCfg = Release|x64 + {66DE85AD-58AD-467C-B1C0-6B98BB27265D}.Release|x64.Build.0 = Release|x64 + {627B3AA0-25E2-4C3E-A211-66BAB0E997E2}.Debug|x64.ActiveCfg = Debug|x64 + {627B3AA0-25E2-4C3E-A211-66BAB0E997E2}.Debug|x64.Build.0 = Debug|x64 + {627B3AA0-25E2-4C3E-A211-66BAB0E997E2}.Release|x64.ActiveCfg = Release|x64 + {627B3AA0-25E2-4C3E-A211-66BAB0E997E2}.Release|x64.Build.0 = Release|x64 + {70C775D7-8C47-4CFE-B91D-6AAEB17389F2}.Debug|x64.ActiveCfg = Debug|x64 + {70C775D7-8C47-4CFE-B91D-6AAEB17389F2}.Debug|x64.Build.0 = Debug|x64 + {70C775D7-8C47-4CFE-B91D-6AAEB17389F2}.Release|x64.ActiveCfg = Release|x64 + {70C775D7-8C47-4CFE-B91D-6AAEB17389F2}.Release|x64.Build.0 = Release|x64 + {0BF799DF-8837-4372-9F36-705CDC22374C}.Debug|x64.ActiveCfg = Debug|x64 + {0BF799DF-8837-4372-9F36-705CDC22374C}.Debug|x64.Build.0 = Debug|x64 + {0BF799DF-8837-4372-9F36-705CDC22374C}.Release|x64.ActiveCfg = Release|x64 + {0BF799DF-8837-4372-9F36-705CDC22374C}.Release|x64.Build.0 = Release|x64 + {56B75395-ED26-479B-B59F-DABB74513335}.Debug|x64.ActiveCfg = Debug|x64 + {56B75395-ED26-479B-B59F-DABB74513335}.Debug|x64.Build.0 = Debug|x64 + {56B75395-ED26-479B-B59F-DABB74513335}.Release|x64.ActiveCfg = Release|x64 + {56B75395-ED26-479B-B59F-DABB74513335}.Release|x64.Build.0 = Release|x64 + {3F05931E-4444-4616-A0AC-047809821B0E}.Debug|x64.ActiveCfg = Debug|x64 + {3F05931E-4444-4616-A0AC-047809821B0E}.Debug|x64.Build.0 = Debug|x64 + {3F05931E-4444-4616-A0AC-047809821B0E}.Release|x64.ActiveCfg = Release|x64 + {3F05931E-4444-4616-A0AC-047809821B0E}.Release|x64.Build.0 = Release|x64 + {965FCDBC-12EA-4F31-AAF6-9C4C3B9F7022}.Debug|x64.ActiveCfg = Debug|x64 + {965FCDBC-12EA-4F31-AAF6-9C4C3B9F7022}.Debug|x64.Build.0 = Debug|x64 + {965FCDBC-12EA-4F31-AAF6-9C4C3B9F7022}.Release|x64.ActiveCfg = Release|x64 + {965FCDBC-12EA-4F31-AAF6-9C4C3B9F7022}.Release|x64.Build.0 = Release|x64 + {0C3E8145-F91B-4F1F-97D1-17E12D49891B}.Debug|x64.ActiveCfg = Debug|x64 + {0C3E8145-F91B-4F1F-97D1-17E12D49891B}.Debug|x64.Build.0 = Debug|x64 + {0C3E8145-F91B-4F1F-97D1-17E12D49891B}.Release|x64.ActiveCfg = Release|x64 + {0C3E8145-F91B-4F1F-97D1-17E12D49891B}.Release|x64.Build.0 = Release|x64 + {C8948C3E-0434-429E-AFE6-4FB2DF246872}.Debug|x64.ActiveCfg = Debug|x64 + {C8948C3E-0434-429E-AFE6-4FB2DF246872}.Debug|x64.Build.0 = Debug|x64 + {C8948C3E-0434-429E-AFE6-4FB2DF246872}.Release|x64.ActiveCfg = Release|x64 + {C8948C3E-0434-429E-AFE6-4FB2DF246872}.Release|x64.Build.0 = Release|x64 + {6C91EB92-3A30-43B5-8954-E84C610C1D67}.Debug|x64.ActiveCfg = Debug|x64 + {6C91EB92-3A30-43B5-8954-E84C610C1D67}.Debug|x64.Build.0 = Debug|x64 + {6C91EB92-3A30-43B5-8954-E84C610C1D67}.Release|x64.ActiveCfg = Release|x64 + {6C91EB92-3A30-43B5-8954-E84C610C1D67}.Release|x64.Build.0 = Release|x64 + {3B9B843D-DCA0-41FE-B642-6BCB187BBD5D}.Debug|x64.ActiveCfg = Debug|x64 + {3B9B843D-DCA0-41FE-B642-6BCB187BBD5D}.Debug|x64.Build.0 = Debug|x64 + {3B9B843D-DCA0-41FE-B642-6BCB187BBD5D}.Release|x64.ActiveCfg = Release|x64 + {3B9B843D-DCA0-41FE-B642-6BCB187BBD5D}.Release|x64.Build.0 = Release|x64 + {3A217A12-6082-491B-89F6-C1D13AD69A19}.Debug|x64.ActiveCfg = Debug|x64 + {3A217A12-6082-491B-89F6-C1D13AD69A19}.Debug|x64.Build.0 = Debug|x64 + {3A217A12-6082-491B-89F6-C1D13AD69A19}.Release|x64.ActiveCfg = Release|x64 + {3A217A12-6082-491B-89F6-C1D13AD69A19}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {D9317002-F66D-4CDE-8FF5-FF2A0D8DC021} + EndGlobalSection +EndGlobal diff --git a/NaiveRating/Assembly-CSharp.NaiveRating.mm.csproj b/NaiveRating/Assembly-CSharp.NaiveRating.mm.csproj deleted file mode 100644 index 752d61e..0000000 --- a/NaiveRating/Assembly-CSharp.NaiveRating.mm.csproj +++ /dev/null @@ -1,24 +0,0 @@ - - - net35 - Assembly-CSharp.NaiveRating.mm - 7EVENDAYS⇔HOLIDAYS - Better rating for mu3 - 1.5.0 - true - latest - x64 - - - - ..\Common\mscorlib.dll - ..\Common\UnityEngine.dll - ..\Common\UnityEngine.UI.dll - - - - - - - - \ No newline at end of file diff --git a/NaiveRating/MU3.CustomUI/patch_MU3UICounter.cs b/NaiveRating/MU3.CustomUI/patch_MU3UICounter.cs new file mode 100644 index 0000000..71534e0 --- /dev/null +++ b/NaiveRating/MU3.CustomUI/patch_MU3UICounter.cs @@ -0,0 +1,18 @@ +namespace MU3.CustomUI; +class patch_MU3UICounter: MU3UICounter { + protected extern void orig_calcNumFiguresFloat(double value); + protected new void calcNumFiguresFloat(double value) { + orig_calcNumFiguresFloat(value); + if(isDispSuffix) { + pushFigureFront(10); + } + } + public bool isDispSuffix { get; set; } + protected void pushFigureFront(byte c) { + for(int i = numFigures_; i > 0; --i) { + figures_[i] = figures_[i - 1]; + } + figures_[0] = c; + numFigures_ += 1; + } +} diff --git a/NaiveRating/MU3.Data/patch_GameData.cs b/NaiveRating/MU3.Data/patch_GameData.cs index 7bad8b0..cb159f0 100644 --- a/NaiveRating/MU3.Data/patch_GameData.cs +++ b/NaiveRating/MU3.Data/patch_GameData.cs @@ -1,15 +1,14 @@ -#pragma warning disable CS0626 -#pragma warning disable CS0649 -#pragma warning disable IDE0051 -#pragma warning disable IDE1006 - using MU3.DB; namespace MU3.Data; -public class patch_GameData: GameData { +class patch_GameData: GameData { public extern static RatingColorID orig_getRatingColorIDFromRating100(int rating100); public static new RatingColorID getRatingColorIDFromRating100(int rating100) { - return orig_getRatingColorIDFromRating100(NaiveRating.Get()); + if(NaiveRating.IsEnabled()) { + return orig_getRatingColorIDFromRating100(NaiveRating.Get()); + } else { + return orig_getRatingColorIDFromRating100(rating100); + } } } \ No newline at end of file diff --git a/NaiveRating/MU3.SceneObject/patch_ANM_CMN_User.cs b/NaiveRating/MU3.SceneObject/patch_ANM_CMN_User.cs new file mode 100644 index 0000000..f3099c8 --- /dev/null +++ b/NaiveRating/MU3.SceneObject/patch_ANM_CMN_User.cs @@ -0,0 +1,11 @@ +using MU3.CustomUI; + +namespace MU3.SceneObject; +class patch_ANM_CMN_UserDeta_01: ANM_CMN_UserDeta_01 { + private MU3UICounter rating; + public extern void orig_setUserDetail(); + public new void setUserDetail() { + ((patch_MU3UICounter)rating).isDispSuffix = NaiveRating.IsEnabled(); + orig_setUserDetail(); + } +} diff --git a/NaiveRating/MU3.User/patch_UserManager.cs b/NaiveRating/MU3.User/patch_UserManager.cs deleted file mode 100644 index 43fa544..0000000 --- a/NaiveRating/MU3.User/patch_UserManager.cs +++ /dev/null @@ -1,16 +0,0 @@ -#pragma warning disable CS0626 -#pragma warning disable CS0649 -#pragma warning disable IDE0051 -#pragma warning disable IDE1006 - -using MU3.Game; - -namespace MU3.User; - -public class patch_UserManager: UserManager { - public extern void orig_updateUserRating(SessionInfo sessionInfo, SessionResult result); - public new void updateUserRating(SessionInfo sessionInfo, SessionResult result) { - NaiveRating.PrevRating = NaiveRating.Get(); - orig_updateUserRating(sessionInfo, result); - } -} \ No newline at end of file diff --git a/NaiveRating/MU3.User/patch_UserOption.cs b/NaiveRating/MU3.User/patch_UserOption.cs new file mode 100644 index 0000000..ae2dc7f --- /dev/null +++ b/NaiveRating/MU3.User/patch_UserOption.cs @@ -0,0 +1,36 @@ +using MonoMod; + +namespace MU3.User; + +class patch_UserOption: UserOption { + [MonoModEnumReplace] + public enum patch_eRating { + OFF = 0, + Default = 1, + ON = 1, + Naive = 2, + MAX = 2 + } + class patch_DataSet: DataSet { + private patch_eRating rating = patch_eRating.ON; + public extern bool orig_isMax(OptionName id); + public new bool isMax(OptionName id) { + if(id == OptionName.Rating) { + return rating == patch_eRating.MAX; + } + return orig_isMax(id); + } + public new patch_eRating Rating { + get => rating; + set { + if(patch_eRating.MAX < value) { + rating = patch_eRating.MAX; + } else if(value < patch_eRating.OFF) { + rating = patch_eRating.OFF; + } else { + rating = value; + } + } + } + } +} \ No newline at end of file diff --git a/NaiveRating/MU3.User/patch_UserUtil.cs b/NaiveRating/MU3.User/patch_UserUtil.cs index 4b08ab5..be89be2 100644 --- a/NaiveRating/MU3.User/patch_UserUtil.cs +++ b/NaiveRating/MU3.User/patch_UserUtil.cs @@ -1,15 +1,15 @@ -#pragma warning disable CS0626 -#pragma warning disable CS0649 -#pragma warning disable IDE0051 -#pragma warning disable IDE1006 - using MonoMod; namespace MU3.User; [MonoModPatch("global::MU3.User.UserUtil")] public static class patch_UserUtil { + public extern static float orig_toRatingFloat(int rating); public static float toRatingFloat(int rating) { - return NaiveRating.Get() * 0.01f + 1E-05f; + if(NaiveRating.IsEnabled()) { + return orig_toRatingFloat(NaiveRating.Get()); + } else { + return orig_toRatingFloat(rating); + } } } \ No newline at end of file diff --git a/NaiveRating/MU3/patch_ANM_SWH_Profile.cs b/NaiveRating/MU3/patch_ANM_SWH_Profile.cs index b42c227..caf8364 100644 --- a/NaiveRating/MU3/patch_ANM_SWH_Profile.cs +++ b/NaiveRating/MU3/patch_ANM_SWH_Profile.cs @@ -1,21 +1,23 @@ -#pragma warning disable CS0626 - using MU3.User; using MU3.Util; namespace MU3; -public class patch_ANM_SWH_Profile: ANM_SWH_Profile { +class patch_ANM_SWH_Profile: ANM_SWH_Profile { public extern void orig_setUpLogin(); // Fixes login display public new void setUpLogin() { UserManager instance = Singleton.instance; - var prev = instance.userPreview; - var temp = prev; - temp.dispRating = 0; - instance.userPreview = temp; - orig_setUpLogin(); - instance.userPreview = prev; + var up = instance.userPreview; + if(NaiveRating.IsEnabled()) { + up.dispRating = 0; + instance.userPreview = up; + orig_setUpLogin(); + up.dispRating = 2; + instance.userPreview = up; + } else { + orig_setUpLogin(); + } } } \ No newline at end of file diff --git a/NaiveRating/MU3/patch_OptionSelecterController.cs b/NaiveRating/MU3/patch_OptionSelecterController.cs new file mode 100644 index 0000000..ffa0615 --- /dev/null +++ b/NaiveRating/MU3/patch_OptionSelecterController.cs @@ -0,0 +1,23 @@ +using MU3.CustomUI; +using MU3.User; +using MU3.Util; + +namespace MU3; +class patch_OptionSelecterController: OptionSelecterController { + private chengeParamFuncArray[] cpFuncArray = new chengeParamFuncArray[35]; + public extern void orig_init(UserOption.OptionName id); + private extern void orig_chengeParamOther(int currentParam); + public new void init(UserOption.OptionName id) { + orig_init(id); + cpFuncArray[33].max = 2; + } + private void chengeParamOther(int currentParam) { + if(myOptionId == UserOption.OptionName.Rating) { + transform.Find("NUL_SWH_Option_00/NUL_Select/PAT_OnOff").GetComponent().patternNumber = currentParam != 0 ? 0f : 1f; + Singleton.instance.userOption.customSet.Rating = (UserOption.eRating)currentParam; + SingletonMonoBehaviour.instance.userData.setUserDetail(); + } else { + orig_chengeParamOther(currentParam); + } + } +} diff --git a/NaiveRating/MU3/patch_Scene_32_PrePlayMusic_Confirm.cs b/NaiveRating/MU3/patch_Scene_32_PrePlayMusic_Confirm.cs new file mode 100644 index 0000000..059a84d --- /dev/null +++ b/NaiveRating/MU3/patch_Scene_32_PrePlayMusic_Confirm.cs @@ -0,0 +1,10 @@ +namespace MU3; + +// It doesn't have to be PrePlayMusic_Confirm, but it prev rating has to be stored at some point +class patch_Scene_32_PrePlayMusic_Confirm: Scene_32_PrePlayMusic_Confirm { + private extern void orig_Enter_Select(); + private void Enter_Select() { + NaiveRating.SavePrev(); + orig_Enter_Select(); + } +} \ No newline at end of file diff --git a/NaiveRating/MU3/patch_Scene_37_Result_Score.cs b/NaiveRating/MU3/patch_Scene_37_Result_Score.cs deleted file mode 100644 index be365d4..0000000 --- a/NaiveRating/MU3/patch_Scene_37_Result_Score.cs +++ /dev/null @@ -1,27 +0,0 @@ -#pragma warning disable CS0626 -#pragma warning disable CS0649 -#pragma warning disable IDE0051 -#pragma warning disable IDE1006 - -using MU3.Sequence; - -namespace MU3; - -public class patch_Scene_37_Result_Score: Scene_37_Result_Score { - private PlayInfo playInfo_; - private extern void orig_TechRating_Init(); - - // Fixes rating+/rating- display - private void TechRating_Init() { - var origRating = playInfo_.sessionResult.rating_; - var origPrevRating = playInfo_.sessionResult.prevRating_; - - playInfo_.sessionResult.rating_ = NaiveRating.Get(); - playInfo_.sessionResult.prevRating_ = NaiveRating.PrevRating; - - orig_TechRating_Init(); - - playInfo_.sessionResult.rating_ = origRating; - playInfo_.sessionResult.prevRating_ = origPrevRating; - } -} \ No newline at end of file diff --git a/NaiveRating/MU3/patch_UIResultBattlePoint.cs b/NaiveRating/MU3/patch_UIResultBattlePoint.cs new file mode 100644 index 0000000..db9df6b --- /dev/null +++ b/NaiveRating/MU3/patch_UIResultBattlePoint.cs @@ -0,0 +1,47 @@ +using MU3.CustomUI; +using MU3.Sequence; +using MU3.User; +using UnityEngine; + +namespace MU3; +class patch_UIResultBattlePoint: UIResultBattlePoint { + private Animator animator_; + private MU3UICounter counterScore_; + private MU3UIImageChanger imageHeader_; + private MU3UICounter counterScorePlus_; + private MU3UICounter counterScoreMinus_; + private GameObject hideScore_; + + private extern void orig_disable(MU3UICounter counter); + private void disable(MU3UICounter counter) => orig_disable(counter); + public extern void orig_initTechRating(PlayInfo playInfo); + public new void initTechRating(PlayInfo playInfo) { + ((patch_MU3UICounter)counterScore_).isDispSuffix = NaiveRating.IsEnabled(); + if(!NaiveRating.IsEnabled()) { + orig_initTechRating(playInfo); + return; + } + int prevRating = NaiveRating.PrevRating; + int rating1 = NaiveRating.Get(); + if((bool)hideScore_) { + hideScore_.SetActive(false); + } + counterScore_.Counter = (double)UserUtil.toRatingFloat(rating1); + int ratingPatternNo = UserUtil.toRatingPatternNo(rating1); + counterScore_.SpriteIndex = ratingPatternNo; + imageHeader_.patternNumber = (float)ratingPatternNo; + int rating2 = rating1 - prevRating; + if(rating2 == 0) { + disable(counterScorePlus_); + disable(counterScoreMinus_); + animator_.SetInteger(MU3.Sys.Const.AnimatorID_State, 2); + } else if(0 < rating2) { + disable(counterScoreMinus_); + if((bool)counterScorePlus_) { + counterScorePlus_.Counter = rating2 * 0.01f + 1E-05f; + } + animator_.SetInteger(MU3.Sys.Const.AnimatorID_State, 0); + } + animator_.SetTrigger(MU3.Sys.Const.AnimatorID_In); + } +} diff --git a/NaiveRating/MU3/NaiveRating.cs b/NaiveRating/NaiveRating.cs similarity index 82% rename from NaiveRating/MU3/NaiveRating.cs rename to NaiveRating/NaiveRating.cs index 6cf3bbc..f09b94b 100644 --- a/NaiveRating/MU3/NaiveRating.cs +++ b/NaiveRating/NaiveRating.cs @@ -1,8 +1,3 @@ -#pragma warning disable CS0626 -#pragma warning disable CS0649 -#pragma warning disable IDE0051 -#pragma warning disable IDE1006 - using MU3.Data; using MU3.DataStudio; using MU3.User; @@ -10,10 +5,8 @@ using MU3.Util; using System.Collections.Generic; using System.Linq; -namespace MU3; - public static class NaiveRating { - public static int PrevRating { get; set; } + public static int PrevRating { get; private set; } // Adapted from MU3.User.UserRating.calcBest() private static RatingList calcSane() { @@ -53,4 +46,10 @@ public static class NaiveRating { } return res / 45; } + public static bool IsEnabled() { + return Singleton.instance.userOption.customSet.Rating == (UserOption.eRating)patch_UserOption.patch_eRating.Naive; + } + public static void SavePrev() { + PrevRating = Get(); + } } \ No newline at end of file diff --git a/NaiveRating/NaiveRating.csproj b/NaiveRating/NaiveRating.csproj new file mode 100644 index 0000000..8bf04e3 --- /dev/null +++ b/NaiveRating/NaiveRating.csproj @@ -0,0 +1,7 @@ + + + Assembly-CSharp.NaiveRating.mm + Best45 rating + + + \ No newline at end of file diff --git a/Pause/MU3.Battle/patch_GameEngine.cs b/Pause/MU3.Battle/patch_GameEngine.cs index c2cf2fe..d213448 100644 --- a/Pause/MU3.Battle/patch_GameEngine.cs +++ b/Pause/MU3.Battle/patch_GameEngine.cs @@ -1,10 +1,8 @@ -#pragma warning disable CS0626 - using MU3.Sequence; namespace MU3.Battle; -public class patch_GameEngine: GameEngine { +class patch_GameEngine: GameEngine { public extern void orig_reset(); public new void reset() { orig_reset(); diff --git a/Pause/MU3.Game/patch_GameBGM.cs b/Pause/MU3.Game/patch_GameBGM.cs index 0c94ca9..e1701b5 100644 --- a/Pause/MU3.Game/patch_GameBGM.cs +++ b/Pause/MU3.Game/patch_GameBGM.cs @@ -1,11 +1,9 @@ -#pragma warning disable CS0649 - using MU3.Sound; using MU3.Util; namespace MU3.Game; -public class patch_GameBGM: GameBGM { +class patch_GameBGM: GameBGM { private patch_SoundManager psm => ((patch_SoundManager)Singleton.instance); private HandleInfo _handle; public void pause(bool val) { diff --git a/Pause/MU3.Sequence/patch_PlayMusic.cs b/Pause/MU3.Sequence/patch_PlayMusic.cs index ed648a7..d6a8383 100644 --- a/Pause/MU3.Sequence/patch_PlayMusic.cs +++ b/Pause/MU3.Sequence/patch_PlayMusic.cs @@ -1,16 +1,11 @@ -#pragma warning disable CS0626 -#pragma warning disable CS0649 -#pragma warning disable IDE0051 -#pragma warning disable IDE1006 - -using MU3.Battle; +using MU3.Battle; using MU3.Game; using MU3.Notes; using MU3.Util; namespace MU3.Sequence; -public class patch_PlayMusic: PlayMusic { +class patch_PlayMusic: PlayMusic { private static readonly float PAUSE_CD = 5f; private static readonly float UNPAUSE_CD = 0.5f; private GameEngine _gameEngine; @@ -27,7 +22,7 @@ public class patch_PlayMusic: PlayMusic { } public override bool updateState(float deltaTime = -1f) { pauseTimer += deltaTime; - if(Singleton.instance.getStateOn(UIInput.Key.Service)) { + if(Singleton.instance.getStateOn(UIInput.Key.Service) && !Singleton.instance.getStateOn(UIInput.Key.Test)) { if((!Paused && pauseTimer >= PAUSE_CD) || (Paused && pauseTimer >= UNPAUSE_CD)) { Paused = !Paused; pgm.pause(Paused); diff --git a/Pause/MU3.Sound/patch_SoundManager.cs b/Pause/MU3.Sound/patch_SoundManager.cs index 01f28b9..d28b2a1 100644 --- a/Pause/MU3.Sound/patch_SoundManager.cs +++ b/Pause/MU3.Sound/patch_SoundManager.cs @@ -1,9 +1,6 @@ -#pragma warning disable CS0626 -#pragma warning disable CS0649 - namespace MU3.Sound; -public class patch_SoundManager: SoundManager { +class patch_SoundManager: SoundManager { private extern HandleInfo orig_getHandle(Priority priority); private HandleInfo getHandle(Priority priority) => orig_getHandle(priority); private patch_SoundPlayer[] _soundPlayers; diff --git a/Pause/MU3.Sound/patch_SoundPlayer.cs b/Pause/MU3.Sound/patch_SoundPlayer.cs index 60d8569..cd6e6a1 100644 --- a/Pause/MU3.Sound/patch_SoundPlayer.cs +++ b/Pause/MU3.Sound/patch_SoundPlayer.cs @@ -1,6 +1,3 @@ -#pragma warning disable CS0626 -#pragma warning disable CS0649 - namespace MU3.Sound; class patch_SoundPlayer: SoundPlayer { diff --git a/Pause/Pause.csproj b/Pause/Pause.csproj new file mode 100644 index 0000000..4d49fd0 --- /dev/null +++ b/Pause/Pause.csproj @@ -0,0 +1,7 @@ + + + Assembly-CSharp.Pause.mm + Enables pausing the game with the service button + + + \ No newline at end of file diff --git a/Pause/patch_GameDeviceManager.cs b/Pause/patch_GameDeviceManager.cs index bcc9559..289155d 100644 --- a/Pause/patch_GameDeviceManager.cs +++ b/Pause/patch_GameDeviceManager.cs @@ -1,8 +1,6 @@ -#pragma warning disable CS0626 - using MU3.Sequence; -public class patch_GameDeviceManager: GameDeviceManager { +class patch_GameDeviceManager: GameDeviceManager { private extern void orig_update(); private void update() { if(!patch_PlayMusic.Paused) { diff --git a/README.md b/README.md index 13475dc..0470fdf 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ ## µ3 mods -Miscellaneous mods for µ3/SDDT. Suggestions/PRs are welcome. +Miscellaneous mods for Ongeki. Suggestions/PRs are welcome. Visit [the wiki](https://gitea.tendokyu.moe/akanyan/mu3-mods/wiki) for more information. ### Supported versions -- 1.39 -- 1.40 -- 1.45 \ No newline at end of file +- 1.45 + +1.39/1.40 should work but they are generally untested. \ No newline at end of file diff --git a/SkipLoginReward/Assembly-CSharp.SkipLoginReward.mm.csproj b/SkipLoginReward/Assembly-CSharp.SkipLoginReward.mm.csproj deleted file mode 100644 index c91fc4f..0000000 --- a/SkipLoginReward/Assembly-CSharp.SkipLoginReward.mm.csproj +++ /dev/null @@ -1,22 +0,0 @@ - - - net35 - Assembly-CSharp.SkipLoginReward.mm - 7EVENDAYS⇔HOLIDAYS - Skip bullshit in mu3 that some individuals may consider useful - 1.5.1 - true - latest - x64 - - - - ..\Common\mscorlib.dll - ..\Common\UnityEngine.dll - - - - - - - diff --git a/SkipLoginReward/MU3/patch_Scene_30_NoticeReward.cs b/SkipLoginReward/MU3/patch_Scene_30_NoticeReward.cs deleted file mode 100644 index 975aaa4..0000000 --- a/SkipLoginReward/MU3/patch_Scene_30_NoticeReward.cs +++ /dev/null @@ -1,18 +0,0 @@ -#pragma warning disable CS0649 -#pragma warning disable IDE0051 -#pragma warning disable IDE1006 - -using MU3.Util; - -namespace MU3; - -public class patch_Scene_30_NoticeReward: Scene_30_NoticeReward { - private Mode _mode; - private enum State { - RankingReward = 2, - FadeOut = 8, - } - private void RankingReward_Init() { - _mode.set(State.FadeOut); - } -} \ No newline at end of file diff --git a/SkipNotice/Assembly-CSharp.SkipNotice.mm.csproj b/SkipNotice/Assembly-CSharp.SkipNotice.mm.csproj deleted file mode 100644 index 01a88bb..0000000 --- a/SkipNotice/Assembly-CSharp.SkipNotice.mm.csproj +++ /dev/null @@ -1,22 +0,0 @@ - - - net35 - Assembly-CSharp.SkipNotice.mm - 7EVENDAYS⇔HOLIDAYS - Skip bullshit in mu3 - 1.5.1 - true - latest - x64 - - - - ..\Common\mscorlib.dll - ..\Common\UnityEngine.dll - - - - - - - \ No newline at end of file diff --git a/SkipNotice/MU3/patch_Scene_30_NoticeReward.cs b/SkipNotice/MU3/patch_Scene_30_NoticeReward.cs index 59e969a..27efb18 100644 --- a/SkipNotice/MU3/patch_Scene_30_NoticeReward.cs +++ b/SkipNotice/MU3/patch_Scene_30_NoticeReward.cs @@ -1,20 +1,26 @@ -#pragma warning disable CS0649 -#pragma warning disable IDE0051 -#pragma warning disable IDE1006 - using MU3.Util; namespace MU3; -public class patch_Scene_30_NoticeReward: Scene_30_NoticeReward { +class patch_Scene_30_NoticeReward: Scene_30_NoticeReward { private Mode _mode; + public static bool Skipped { get; private set; } private enum State { RankingReward = 2, FadeOut = 8, } private void Start() { + Skipped = false; _mode = new Mode(this); _mode.set(State.RankingReward); SingletonMonoBehaviour.instance.Panel.pushState(0, show: true); } + private void Update() { + if(_mode.get() < (int)State.FadeOut && Singleton.instance.getStateOn(UIInput.Key.MenuLeft)) { + Skipped = true; + _mode.set(State.FadeOut); + } else { + _mode.update(); + } + } } \ No newline at end of file diff --git a/SkipNotice/MU3/patch_UIGetRewards.cs b/SkipNotice/MU3/patch_UIGetRewards.cs new file mode 100644 index 0000000..30f7b61 --- /dev/null +++ b/SkipNotice/MU3/patch_UIGetRewards.cs @@ -0,0 +1,18 @@ +namespace MU3; +class patch_UIGetRewards: UIGetRewards { + private extern void orig_invokeOnFinish(); + private extern void orig_startNextItem(); + private void invokeOnFinish() => orig_invokeOnFinish(); + private void startNextItem() { + if(!patch_Scene_30_NoticeReward.Skipped) { + orig_startNextItem(); + } + } + void Update() { + // The panel state will still be screwed up for some reason but it won't crash + // This could be improved + if(patch_Scene_30_NoticeReward.Skipped) { + invokeOnFinish(); + } + } +} diff --git a/SkipNotice/SkipNotice.csproj b/SkipNotice/SkipNotice.csproj new file mode 100644 index 0000000..bd36f2f --- /dev/null +++ b/SkipNotice/SkipNotice.csproj @@ -0,0 +1,7 @@ + + + Assembly-CSharp.SkipNotice.mm + Skip event/safety notices + + + \ No newline at end of file diff --git a/SkipPreMusicRitual/Assembly-CSharp.SkipPreMusicRitual.mm.csproj b/SkipPreMusicRitual/Assembly-CSharp.SkipPreMusicRitual.mm.csproj deleted file mode 100644 index 49ec052..0000000 --- a/SkipPreMusicRitual/Assembly-CSharp.SkipPreMusicRitual.mm.csproj +++ /dev/null @@ -1,22 +0,0 @@ - - - net35 - Assembly-CSharp.SkipPreMusicRitual.mm - 7EVENDAYS⇔HOLIDAYS - Skip more bullshit in mu3 - 1.3.0 - true - latest - x64 - - - - ..\Common\mscorlib.dll - ..\Common\UnityEngine.dll - - - - - - - diff --git a/SkipPreMusicRitual/MU3.Battle/patch_GameEngine.cs b/SkipPreMusicRitual/MU3.Battle/patch_GameEngine.cs deleted file mode 100644 index b9230cc..0000000 --- a/SkipPreMusicRitual/MU3.Battle/patch_GameEngine.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace MU3.Battle; - -public class patch_GameEngine: GameEngine { - public new bool isStartCutsceneFinish() { - return true; - } -} \ No newline at end of file diff --git a/SkipPreMusicRitual/MU3.Sequence/patch_PlayMusic.cs b/SkipPreMusicRitual/MU3.Sequence/patch_PlayMusic.cs index 1c9a514..6f8799b 100644 --- a/SkipPreMusicRitual/MU3.Sequence/patch_PlayMusic.cs +++ b/SkipPreMusicRitual/MU3.Sequence/patch_PlayMusic.cs @@ -1,19 +1,20 @@ -#pragma warning disable CS0626 -#pragma warning disable CS0649 -#pragma warning disable IDE0051 -#pragma warning disable IDE1006 - using MU3.Battle; +using MU3.Util; namespace MU3.Sequence; -public class patch_PlayMusic: PlayMusic { +class patch_PlayMusic: PlayMusic { private GameEngine _gameEngine; private extern void orig_Execute_StartCutscene(); + public static bool ForceSkipped { get; private set; } private void Execute_StartCutscene() { orig_Execute_StartCutscene(); - _gameEngine.skipStartCutscene(); - setNextState(EState.Countdown); + ForceSkipped = false; + if(Singleton.instance.config.isQuickStart || Singleton.instance.getStateOn(UIInput.Key.MenuLeft)) { + ForceSkipped = true; + _gameEngine.skipStartCutscene(); + setNextState(EState.Countdown); + } } } \ No newline at end of file diff --git a/SkipPreMusicRitual/MU3/patch_BattleUI.cs b/SkipPreMusicRitual/MU3/patch_BattleUI.cs index 4fbfa69..636fa00 100644 --- a/SkipPreMusicRitual/MU3/patch_BattleUI.cs +++ b/SkipPreMusicRitual/MU3/patch_BattleUI.cs @@ -1,11 +1,15 @@ -using MU3.Util; +using MonoMod; +using MU3.Sequence; +using MU3.Util; using System; using UnityEngine; namespace MU3; -public class patch_BattleUI: BattleUI { - private System.Collections.IEnumerator playReadyProc(Action onFinish) { +class patch_BattleUI: BattleUI { + [MonoModIgnore] + private extern System.Collections.IEnumerator playReadyProc(Action onFinish); + private System.Collections.IEnumerator playReadyProcSkipped(Action onFinish) { if(!SystemUI.Exists) { onFinish(); yield break; @@ -17,6 +21,15 @@ public class patch_BattleUI: BattleUI { time -= Time.deltaTime; } onFinish(); - systemUI.removeCanvas(MU3.Graphics.Const.SortOrder.UI); + systemUI.removeCanvas(Graphics.Const.SortOrder.UI); + } + + public new void playReady(Action onFinish) { + if(patch_PlayMusic.ForceSkipped) { + StartCoroutine(playReadyProcSkipped(onFinish)); + } else { + StartCoroutine(playReadyProc(onFinish)); + } + } } \ No newline at end of file diff --git a/SkipPreMusicRitual/SkipPreMusicRitual.csproj b/SkipPreMusicRitual/SkipPreMusicRitual.csproj new file mode 100644 index 0000000..f75d9df --- /dev/null +++ b/SkipPreMusicRitual/SkipPreMusicRitual.csproj @@ -0,0 +1,7 @@ + + + Assembly-CSharp.SkipPreMusicRitual.mm + Skip "Are you ready? Let's shoot" + + + diff --git a/SortByInternalDifficulty/InternalSortPreview.cs b/SortByInternalDifficulty/InternalSortPreview.cs new file mode 100644 index 0000000..75bdc75 --- /dev/null +++ b/SortByInternalDifficulty/InternalSortPreview.cs @@ -0,0 +1,649 @@ +public static class InternalSortPreview { + // This really shouldn't be a png but it's just one texture + public static byte[] Bytes = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x79, 0x08, 0x02, 0x00, 0x00, 0x00, 0x96, 0x41, 0x0b, + 0x66, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0x7d, 0x79, 0x9c, 0x5d, + 0x45, 0x99, 0xf6, 0xf3, 0x56, 0xd5, 0xd9, 0xee, 0x3d, 0x77, 0xe9, 0xdb, 0x7b, 0xf6, 0x74, 0x36, + 0x02, 0x49, 0x20, 0x40, 0x00, 0x59, 0x12, 0xf6, 0x45, 0x50, 0x50, 0xc1, 0x05, 0x18, 0x44, 0x70, + 0x54, 0xd4, 0xc1, 0x9f, 0x8c, 0x0b, 0xa3, 0xb8, 0x7c, 0xae, 0x88, 0x8a, 0xe8, 0x8c, 0xe3, 0x38, + 0xa0, 0xe8, 0xa7, 0xce, 0xb8, 0x7e, 0x20, 0xca, 0x22, 0x20, 0x10, 0x96, 0x18, 0x20, 0x92, 0x10, + 0x76, 0xb2, 0xef, 0xbd, 0xdf, 0xbe, 0xfb, 0x3d, 0x4b, 0x55, 0x7d, 0x7f, 0xdc, 0x5e, 0x6e, 0x87, + 0xee, 0x24, 0xae, 0xb1, 0xd3, 0xe7, 0xf9, 0xd5, 0x1f, 0xdd, 0xe7, 0x9e, 0x7b, 0x96, 0xb7, 0x9e, + 0x7a, 0xeb, 0xa9, 0xb7, 0xde, 0xaa, 0x4b, 0x9f, 0x79, 0x1b, 0x22, 0xec, 0x03, 0xc4, 0x38, 0x00, + 0xad, 0x64, 0x64, 0x8a, 0x43, 0x06, 0x8c, 0x00, 0x40, 0x44, 0x86, 0xd8, 0x0f, 0xf5, 0x89, 0x00, + 0xe8, 0xc8, 0x10, 0x87, 0x10, 0x94, 0x06, 0x00, 0x16, 0x19, 0x22, 0xc2, 0x24, 0xf5, 0xfd, 0x91, + 0x09, 0x22, 0x44, 0xd4, 0x8f, 0x10, 0x21, 0xa2, 0x7e, 0x84, 0x08, 0x11, 0xf5, 0x23, 0x44, 0x88, + 0xa8, 0x1f, 0x21, 0x42, 0x44, 0xfd, 0x08, 0x11, 0x22, 0xea, 0x47, 0x88, 0x10, 0x51, 0x3f, 0x42, + 0x84, 0x88, 0xfa, 0x11, 0x22, 0x44, 0xd4, 0x8f, 0x10, 0x21, 0xa2, 0x7e, 0x84, 0x08, 0x11, 0xf5, + 0x23, 0x44, 0x88, 0xa8, 0x1f, 0x21, 0x42, 0x44, 0xfd, 0x08, 0x11, 0x22, 0xea, 0x47, 0x88, 0x10, + 0x51, 0x3f, 0x42, 0x84, 0xbf, 0x3a, 0x46, 0xad, 0xd2, 0xfa, 0xef, 0xfb, 0x09, 0x80, 0x54, 0xd1, + 0x9a, 0x24, 0x00, 0x90, 0x8a, 0xdd, 0x79, 0xc7, 0xff, 0x1e, 0xb1, 0x78, 0x19, 0x54, 0x31, 0xa8, + 0x96, 0x26, 0xc4, 0x33, 0x2b, 0x12, 0x00, 0xb8, 0x30, 0x0a, 0x85, 0xc2, 0x79, 0xe7, 0x5d, 0xd8, + 0xd3, 0xdb, 0x5f, 0x3b, 0x6e, 0xf0, 0xa8, 0x3e, 0x01, 0xe0, 0x9a, 0x73, 0xc7, 0xa1, 0x7e, 0x57, + 0x0e, 0x00, 0x74, 0xc4, 0x7c, 0x00, 0xc0, 0xfb, 0xde, 0xf3, 0xae, 0xe3, 0x4e, 0x7e, 0xa3, 0x29, + 0x42, 0xa0, 0x51, 0x2b, 0x35, 0x31, 0x1e, 0x5a, 0x0b, 0x00, 0x50, 0x61, 0x63, 0x9b, 0xfb, 0xe9, + 0xcf, 0x7e, 0xfe, 0xf2, 0x2b, 0x3f, 0x50, 0x3b, 0x4c, 0x14, 0xd5, 0xe7, 0xde, 0xe0, 0xa7, 0x2e, + 0x1a, 0xf9, 0x67, 0xe5, 0x0b, 0x14, 0x51, 0xbf, 0x86, 0xb6, 0xd6, 0x96, 0x5f, 0xfd, 0xf2, 0xa7, + 0x6e, 0x22, 0x05, 0x55, 0x05, 0x34, 0x11, 0x26, 0x46, 0x91, 0x9a, 0xb4, 0x26, 0x80, 0x18, 0xe6, + 0xcc, 0x5f, 0xbc, 0x76, 0xcd, 0x93, 0x1b, 0x37, 0x6f, 0x89, 0x6a, 0x73, 0x18, 0xf5, 0x6c, 0x8f, + 0xb4, 0xfe, 0xd8, 0xf8, 0xce, 0x2d, 0x37, 0x65, 0x9a, 0xa6, 0x40, 0x0e, 0xeb, 0x1c, 0x3d, 0xa1, + 0x0a, 0x10, 0x06, 0x4e, 0x2c, 0xfe, 0xf5, 0x5b, 0xbe, 0x11, 0x8b, 0xc5, 0xa2, 0xda, 0xdc, 0xff, + 0x30, 0x57, 0x6b, 0xad, 0x23, 0x9f, 0x0f, 0xbc, 0xf9, 0x4d, 0xe7, 0x9f, 0x7b, 0xe1, 0x25, 0x5a, + 0x96, 0xa1, 0x42, 0x28, 0x05, 0xa5, 0xa0, 0x30, 0x31, 0x0a, 0xd3, 0x43, 0x45, 0x31, 0x5d, 0x98, + 0xbf, 0xe0, 0x88, 0xcf, 0xdc, 0xf0, 0x91, 0xa8, 0x42, 0xa3, 0x08, 0xcf, 0x01, 0xa1, 0xa9, 0x29, + 0xf3, 0xcd, 0x9b, 0xbf, 0x68, 0x3b, 0x31, 0x0a, 0xab, 0xf5, 0x6e, 0x61, 0xe2, 0x15, 0x1d, 0x70, + 0xf2, 0xae, 0xf9, 0xc0, 0x75, 0xcb, 0x8e, 0x5d, 0x1a, 0x55, 0x6b, 0x44, 0xfd, 0xfd, 0xe3, 0xd3, + 0x9f, 0xbc, 0x6e, 0xea, 0x8c, 0x23, 0x42, 0x3f, 0x0f, 0x9a, 0x98, 0x8c, 0xaf, 0x97, 0x3d, 0xaa, + 0x92, 0x48, 0xa6, 0xbe, 0xf1, 0xf5, 0x2f, 0x46, 0xd5, 0x1a, 0x51, 0x7f, 0x3f, 0x38, 0xe5, 0xa4, + 0xe3, 0xdf, 0x75, 0xf5, 0xbf, 0x28, 0xe5, 0x2b, 0x19, 0x4c, 0x70, 0xde, 0xeb, 0xc1, 0xce, 0x4a, + 0x66, 0x8f, 0x3b, 0xe1, 0xf4, 0x6b, 0x3f, 0x70, 0x55, 0x54, 0xb9, 0x11, 0xf5, 0xf7, 0x85, 0x6f, + 0x7f, 0xe3, 0x46, 0x37, 0x91, 0xe4, 0x61, 0xd1, 0xe0, 0x0a, 0x5a, 0x4f, 0xec, 0xa2, 0x34, 0x94, + 0x46, 0x18, 0x18, 0xa6, 0xfe, 0xec, 0xe7, 0xbe, 0x3c, 0xb7, 0x63, 0x46, 0x54, 0xbf, 0x11, 0xf5, + 0xc7, 0xc6, 0xf5, 0xd7, 0xbd, 0xff, 0xf0, 0xa5, 0x27, 0x22, 0xe8, 0x07, 0x81, 0xb4, 0x9e, 0xf0, + 0x5e, 0xbf, 0xd6, 0x00, 0x00, 0xf8, 0x85, 0x86, 0x4c, 0xe6, 0xe6, 0xaf, 0x7c, 0x3a, 0xaa, 0xe2, + 0x88, 0xfa, 0x63, 0x60, 0xc1, 0xbc, 0x39, 0x1f, 0xff, 0xd4, 0xe7, 0xb8, 0x08, 0x21, 0xfd, 0x09, + 0x3c, 0xb4, 0x1d, 0xbb, 0x0d, 0x28, 0xaf, 0x5a, 0x3e, 0xfb, 0xfc, 0x4b, 0xde, 0x72, 0xd1, 0x79, + 0x51, 0x45, 0x47, 0xd4, 0xdf, 0x1b, 0xdf, 0xfa, 0xe6, 0x17, 0xd2, 0xe9, 0x06, 0x78, 0x45, 0x00, + 0xd0, 0x0a, 0x7a, 0xe2, 0x0b, 0x9e, 0xba, 0xa2, 0xb5, 0xb6, 0x9c, 0xd8, 0x57, 0x6e, 0xba, 0xc9, + 0x8d, 0x47, 0x61, 0xfe, 0x88, 0xfa, 0x75, 0xb8, 0xe2, 0xd2, 0xb7, 0x9d, 0x7a, 0xfa, 0xf9, 0xda, + 0xeb, 0xd1, 0x50, 0x4a, 0xc9, 0x5a, 0x99, 0xe8, 0x2f, 0xa5, 0x95, 0x1c, 0x2e, 0xa6, 0x2e, 0xeb, + 0x4a, 0xdf, 0xcc, 0xd9, 0x0b, 0x6e, 0xfc, 0xd2, 0x0d, 0x51, 0x75, 0xd7, 0x20, 0x34, 0x08, 0x00, + 0x41, 0x03, 0x58, 0xbe, 0x7c, 0x39, 0x80, 0x52, 0xa9, 0x34, 0xa9, 0x4c, 0xd0, 0x90, 0x8c, 0x7f, + 0xfd, 0xa6, 0x4f, 0x99, 0x96, 0xa3, 0xab, 0x05, 0x10, 0x63, 0x4e, 0x1a, 0x00, 0x60, 0x01, 0x13, + 0x3b, 0xf1, 0x85, 0x30, 0x98, 0x77, 0xa4, 0xc3, 0x32, 0x05, 0x25, 0x68, 0xc9, 0x83, 0xfe, 0x2b, + 0xae, 0x7c, 0xff, 0xa3, 0x4f, 0xac, 0xdb, 0xb0, 0x61, 0xc3, 0xa0, 0xe7, 0x63, 0x93, 0xcb, 0xf7, + 0x69, 0x3c, 0x33, 0x62, 0x9f, 0xff, 0xf3, 0x0e, 0x01, 0x40, 0xa9, 0x10, 0xc0, 0xfb, 0x6e, 0xd9, + 0x03, 0x20, 0x08, 0x82, 0x49, 0x65, 0x0e, 0xc3, 0xa0, 0xd6, 0x34, 0x23, 0xbb, 0x05, 0x5a, 0xaa, + 0x4a, 0xaf, 0xca, 0xbf, 0xa2, 0x8a, 0x3b, 0xb4, 0x5f, 0x98, 0xe8, 0x5d, 0x22, 0x31, 0x06, 0x80, + 0x39, 0xcd, 0x14, 0x9f, 0xce, 0x62, 0xd3, 0xc8, 0x69, 0xd5, 0x95, 0x2e, 0x10, 0xef, 0x29, 0x50, + 0xa5, 0x52, 0x99, 0x6c, 0xa4, 0xaf, 0xe1, 0xf6, 0x8f, 0x77, 0x8c, 0x78, 0xfd, 0xfa, 0x0f, 0x3c, + 0xcf, 0x03, 0x90, 0x48, 0x24, 0x0e, 0xfd, 0xd6, 0x3f, 0x94, 0xaf, 0x61, 0x9a, 0x66, 0x22, 0xe1, + 0x40, 0x4b, 0xd9, 0xfd, 0x87, 0x70, 0xfb, 0xaf, 0xc3, 0xe2, 0x36, 0x66, 0x36, 0xc0, 0x6a, 0x64, + 0x4e, 0x3b, 0xf1, 0xd8, 0x28, 0x7f, 0x31, 0x51, 0x7c, 0xfd, 0x08, 0xf5, 0xa1, 0x2a, 0xdd, 0x41, + 0xee, 0x25, 0x78, 0x59, 0xc6, 0x14, 0x6b, 0x58, 0xca, 0xdb, 0x4f, 0x67, 0x0d, 0x4b, 0x5a, 0x9c, + 0x52, 0x2e, 0xc7, 0xc2, 0x10, 0x00, 0x88, 0x26, 0xaf, 0xe2, 0x15, 0x35, 0x7f, 0x5f, 0x83, 0x65, + 0x59, 0x00, 0xc2, 0x30, 0x3c, 0xe4, 0x5f, 0x5b, 0xd5, 0x92, 0x90, 0x99, 0x0c, 0xbd, 0x72, 0xcc, + 0x7b, 0xde, 0x7b, 0xf1, 0x56, 0x78, 0x7d, 0xbc, 0x7d, 0x85, 0x33, 0xfb, 0xed, 0x14, 0x6f, 0x45, + 0x75, 0x00, 0x32, 0x50, 0xb2, 0x0c, 0x48, 0x60, 0x82, 0xa6, 0xba, 0x4b, 0xc6, 0x6d, 0xf0, 0x63, + 0x20, 0x6c, 0x70, 0x5b, 0x66, 0x5f, 0x0d, 0xb6, 0xfd, 0xda, 0xdb, 0x7a, 0xad, 0x68, 0x3f, 0x8d, + 0x8e, 0xf8, 0x80, 0x4e, 0x34, 0x85, 0x7d, 0xfd, 0x5a, 0xca, 0xc9, 0xe6, 0xfb, 0xeb, 0xd9, 0x3e, + 0xca, 0xeb, 0x4f, 0x2e, 0x43, 0x90, 0xd6, 0x08, 0x93, 0xbb, 0xbe, 0x5f, 0xde, 0xf6, 0xa0, 0x35, + 0xef, 0x52, 0x63, 0xe6, 0x9b, 0x54, 0xd8, 0x1f, 0x6c, 0xbf, 0x27, 0xdc, 0x79, 0xbf, 0xcc, 0x6d, + 0x80, 0x56, 0x14, 0xd6, 0x82, 0x83, 0x13, 0x54, 0xf1, 0x6b, 0x2d, 0x08, 0xc4, 0x78, 0xac, 0x59, + 0x34, 0x1d, 0x46, 0x4d, 0x67, 0x5b, 0x8b, 0xae, 0xd3, 0xb2, 0x52, 0x5d, 0xfb, 0x05, 0x7e, 0xdf, + 0x59, 0xd6, 0xb1, 0x5f, 0xd1, 0x6d, 0x67, 0x07, 0xb9, 0x1c, 0x42, 0x7f, 0xd2, 0x86, 0x3a, 0x0e, + 0xfd, 0xdf, 0xd2, 0x62, 0x60, 0x0a, 0x6a, 0x34, 0x29, 0x24, 0x08, 0x1a, 0x61, 0x7c, 0xfd, 0xbb, + 0x55, 0x90, 0x8d, 0x9f, 0x71, 0x07, 0x64, 0xa1, 0xb2, 0xe6, 0x06, 0xb5, 0xf3, 0x41, 0x59, 0x29, + 0x68, 0xa3, 0x04, 0x15, 0xc0, 0x00, 0xab, 0xf7, 0xf7, 0x13, 0x25, 0xa1, 0xb5, 0x6e, 0x4d, 0x8a, + 0x92, 0x12, 0x12, 0xaa, 0xba, 0x3b, 0xec, 0x7f, 0x09, 0x5b, 0x7e, 0x4f, 0x22, 0x6e, 0x1d, 0xf6, + 0xde, 0xd8, 0x09, 0xdf, 0x44, 0x76, 0x8d, 0xb7, 0xfa, 0x43, 0x76, 0xc7, 0xa5, 0xea, 0xb0, 0xeb, + 0xc3, 0x12, 0xa3, 0x91, 0x79, 0x8c, 0xfa, 0xcb, 0xd0, 0x21, 0x9f, 0xc3, 0x7b, 0xe8, 0x53, 0x5f, + 0x2a, 0x29, 0x21, 0x99, 0xc9, 0x58, 0xc0, 0x40, 0xd0, 0x5a, 0x92, 0x99, 0xd6, 0xc1, 0x80, 0xfb, + 0xec, 0x55, 0x66, 0x6a, 0x96, 0x79, 0xc4, 0x77, 0x82, 0xad, 0x77, 0x54, 0x9f, 0xbb, 0x19, 0xe5, + 0x1e, 0xa5, 0xaa, 0xb0, 0x15, 0x08, 0xe0, 0x00, 0xed, 0xe5, 0xee, 0x69, 0xa2, 0x56, 0xaf, 0x96, + 0x1a, 0x15, 0x54, 0x7d, 0x8d, 0xde, 0xea, 0xfa, 0x9b, 0xfc, 0xcd, 0x3f, 0x4b, 0x9c, 0x7a, 0x9b, + 0x75, 0xf6, 0xfd, 0xde, 0xca, 0xb7, 0xc5, 0xb4, 0xce, 0x76, 0x7c, 0xc6, 0x50, 0x59, 0xad, 0x47, + 0x22, 0xb9, 0x5a, 0x68, 0xe9, 0x4b, 0x06, 0x76, 0xc8, 0x4b, 0x80, 0x31, 0xa8, 0x4f, 0x9c, 0x01, + 0x08, 0x43, 0x05, 0x80, 0x71, 0x53, 0xf3, 0x04, 0x00, 0x92, 0x05, 0x7d, 0x90, 0x54, 0x2f, 0x41, + 0x02, 0xa8, 0x3d, 0x06, 0x53, 0x0a, 0x61, 0x7e, 0xe8, 0x83, 0xfd, 0x87, 0xde, 0xc3, 0x20, 0xd4, + 0x5a, 0xc7, 0xda, 0x63, 0xe8, 0xc5, 0x00, 0x1b, 0x70, 0xa4, 0x63, 0x59, 0x2d, 0x20, 0x26, 0xd6, + 0xbf, 0x4b, 0xb8, 0xd3, 0xcd, 0x25, 0x5f, 0xae, 0xae, 0xfb, 0x78, 0x75, 0xfd, 0x1d, 0xcc, 0xce, + 0x92, 0x6d, 0x30, 0xcd, 0x46, 0xaf, 0xe4, 0x9b, 0xd8, 0xc1, 0xcd, 0xc1, 0x5e, 0xab, 0xf6, 0x12, + 0x16, 0x01, 0x00, 0xcb, 0xcb, 0xde, 0x67, 0x0b, 0xf7, 0xbc, 0xc1, 0x39, 0xf5, 0xbb, 0xd6, 0x8a, + 0x9f, 0x96, 0x1f, 0xba, 0x80, 0xfb, 0x09, 0x31, 0xff, 0xc3, 0xbe, 0xdf, 0x0f, 0xc0, 0x54, 0xc8, + 0xa1, 0x90, 0x52, 0x09, 0x34, 0x53, 0xae, 0xaf, 0x6c, 0x86, 0x66, 0x8d, 0xfd, 0xe3, 0xb5, 0x01, + 0xad, 0x39, 0x00, 0xce, 0x02, 0x00, 0x92, 0x4c, 0xcd, 0xdd, 0x21, 0x67, 0xe3, 0x1d, 0x9c, 0xf7, + 0xad, 0xaf, 0x3b, 0x61, 0xe9, 0xb0, 0x0a, 0x59, 0xc5, 0x50, 0xe0, 0xfe, 0x80, 0xa8, 0x1f, 0x4a, + 0x05, 0x80, 0xcc, 0x34, 0x00, 0xca, 0xad, 0x63, 0xc5, 0x8d, 0x00, 0x20, 0xe2, 0x06, 0x82, 0x51, + 0x86, 0xfd, 0xbb, 0x0d, 0x4d, 0x6a, 0x8f, 0x4e, 0x8c, 0x82, 0x42, 0x60, 0xcf, 0x40, 0x62, 0x31, + 0x44, 0x0a, 0x61, 0x6e, 0x7f, 0x3d, 0x3f, 0x05, 0x41, 0xe0, 0x17, 0xfd, 0xd4, 0x9c, 0x54, 0xea, + 0xe5, 0x54, 0xfe, 0xf1, 0x1e, 0xf5, 0x66, 0x05, 0x80, 0x88, 0xe3, 0xa5, 0x4f, 0x70, 0x06, 0xfb, + 0xe8, 0x9b, 0xaa, 0x6b, 0xaf, 0xaf, 0xae, 0xfb, 0x29, 0x8b, 0x97, 0x89, 0x0b, 0x60, 0x68, 0x86, + 0xe3, 0x10, 0x1a, 0xcd, 0xec, 0xfd, 0xa7, 0xd6, 0xcc, 0x21, 0x55, 0xda, 0x55, 0x7e, 0xe8, 0xaa, + 0xd8, 0xe9, 0xdf, 0x8f, 0x9d, 0x76, 0x97, 0xff, 0xd0, 0x79, 0x15, 0xf7, 0x64, 0xbb, 0xfd, 0x18, + 0xdf, 0xef, 0x23, 0x70, 0x0d, 0x45, 0x0f, 0x20, 0x39, 0xcd, 0xd5, 0xcb, 0x45, 0xcf, 0x8e, 0x1e, + 0xd7, 0x70, 0x39, 0xdf, 0x87, 0xbf, 0xa3, 0x1a, 0xef, 0x15, 0x6f, 0xd4, 0xa4, 0x79, 0xdf, 0x2a, + 0x54, 0xbb, 0x00, 0x18, 0xc2, 0x38, 0x48, 0x83, 0x9b, 0x11, 0x59, 0x6b, 0x89, 0x72, 0x8e, 0x1d, + 0xc6, 0x9b, 0x96, 0x02, 0x80, 0x97, 0x3d, 0x20, 0xea, 0x6b, 0xad, 0x39, 0xe7, 0x8a, 0x27, 0x91, + 0x7f, 0x91, 0xf5, 0xaf, 0x4a, 0x3a, 0x8c, 0xc5, 0x92, 0xaa, 0xda, 0xcb, 0x2c, 0x46, 0xfa, 0xe0, + 0xb4, 0x66, 0xd2, 0x43, 0x55, 0xc8, 0x95, 0x52, 0x2f, 0x0f, 0xec, 0x5a, 0x07, 0x67, 0x36, 0x5a, + 0xce, 0x27, 0x54, 0xb5, 0x2c, 0x8f, 0xf7, 0xad, 0x20, 0x08, 0x8a, 0xc5, 0x62, 0x53, 0x47, 0x53, + 0x7c, 0x6b, 0x9c, 0xdd, 0xcc, 0xc4, 0x14, 0xd3, 0x2f, 0xfa, 0x96, 0x6c, 0x45, 0x75, 0x0d, 0xba, + 0xee, 0x73, 0xce, 0xb9, 0x27, 0xd8, 0xf6, 0x8b, 0xea, 0xba, 0xff, 0x65, 0xf1, 0x32, 0xbd, 0xa6, + 0x76, 0x09, 0xe1, 0x6b, 0xf8, 0x43, 0x7b, 0x91, 0x89, 0xfe, 0xdc, 0xce, 0x41, 0xef, 0x9f, 0xac, + 0xfa, 0xcf, 0xbd, 0x92, 0x1e, 0x75, 0x50, 0xef, 0xfd, 0xa1, 0x26, 0x01, 0x02, 0xc5, 0x85, 0x2e, + 0x75, 0x97, 0x1f, 0xba, 0x2a, 0x79, 0xe9, 0x0e, 0x77, 0xe1, 0x0d, 0x6a, 0xcb, 0xe7, 0x0b, 0xee, + 0xdd, 0x8e, 0x63, 0x42, 0xca, 0x3c, 0x4a, 0x0d, 0x5b, 0x53, 0xec, 0x77, 0x2c, 0xdd, 0x92, 0xd6, + 0x0b, 0x74, 0xef, 0xce, 0x5e, 0x17, 0x2e, 0x63, 0x0c, 0x34, 0xc6, 0xdd, 0x38, 0x0b, 0x14, 0x8f, + 0x03, 0x96, 0xec, 0x7a, 0x20, 0x1d, 0xbe, 0x44, 0x86, 0xcd, 0x62, 0x49, 0x00, 0x84, 0xea, 0x41, + 0xe2, 0xc9, 0x88, 0x0a, 0x50, 0xc2, 0x49, 0x55, 0xd6, 0xc9, 0x6d, 0x8f, 0x17, 0xec, 0x65, 0x68, + 0x3c, 0x41, 0xa0, 0x08, 0x19, 0xec, 0x8b, 0xfa, 0x35, 0xde, 0x07, 0xcc, 0x65, 0x3b, 0x7f, 0x96, + 0x76, 0xfa, 0x83, 0x74, 0x23, 0xab, 0xf6, 0xa9, 0x9e, 0x27, 0x82, 0xdd, 0x0f, 0x6b, 0x2f, 0x4b, + 0x5c, 0x1e, 0xa4, 0x57, 0x02, 0x00, 0xb2, 0x9a, 0x78, 0x6a, 0x01, 0x25, 0x97, 0x36, 0x66, 0xa6, + 0x4b, 0x6f, 0xd7, 0xc0, 0xf6, 0xff, 0xac, 0xb6, 0xbc, 0xdd, 0x89, 0xa5, 0x55, 0x30, 0xb0, 0x77, + 0x05, 0x43, 0x87, 0x61, 0x58, 0x2a, 0x95, 0x52, 0xb3, 0x1b, 0xdd, 0x6d, 0x2e, 0x7d, 0x57, 0x61, + 0x00, 0x72, 0x81, 0xef, 0xe5, 0x3d, 0x87, 0xdb, 0xe8, 0xfc, 0x1a, 0x66, 0x5e, 0xad, 0xb5, 0xae, + 0x3c, 0x7d, 0x03, 0x73, 0xca, 0xc4, 0xf7, 0xc9, 0x5d, 0xc2, 0x01, 0xe8, 0x7d, 0xfd, 0x27, 0xb5, + 0x01, 0xda, 0x57, 0x1b, 0xd0, 0x07, 0xf6, 0x5d, 0x3d, 0xd6, 0xd7, 0xf4, 0x18, 0x67, 0xeb, 0xb1, + 0x6e, 0xcc, 0xa8, 0xc6, 0xfe, 0xea, 0xe3, 0x6f, 0xb6, 0x4f, 0xfc, 0x79, 0x6c, 0xe3, 0xff, 0xab, + 0xf6, 0xfe, 0xb2, 0xdc, 0xf8, 0x66, 0x33, 0xd7, 0xa7, 0xa0, 0x72, 0x8d, 0x85, 0x74, 0x3e, 0xc1, + 0xbe, 0x1d, 0x34, 0x7c, 0xa0, 0x01, 0x0b, 0xd0, 0xbb, 0xb3, 0xd7, 0x55, 0xae, 0x61, 0xbd, 0xc6, + 0x91, 0x6b, 0xa5, 0x84, 0xab, 0xc3, 0x40, 0xee, 0xfa, 0x49, 0x43, 0x2c, 0x34, 0xe2, 0x19, 0x99, + 0xdf, 0x1a, 0x76, 0xaf, 0x0e, 0xbb, 0xff, 0x48, 0xba, 0xf7, 0x20, 0xf2, 0x04, 0x80, 0x76, 0xa6, + 0x23, 0x7d, 0xac, 0x68, 0x98, 0x6b, 0x26, 0xda, 0x53, 0xc5, 0x3f, 0xe6, 0x76, 0x6d, 0x0a, 0xa7, + 0x5d, 0x2e, 0x78, 0x69, 0x2f, 0x25, 0x26, 0xf6, 0xea, 0xc1, 0xa4, 0x68, 0xd0, 0x5b, 0x6e, 0x4b, + 0x27, 0xaa, 0x46, 0xe3, 0xe2, 0xd2, 0xaa, 0xaf, 0x85, 0xdd, 0x4f, 0x81, 0xf9, 0xc4, 0xca, 0x80, + 0x44, 0xb8, 0x7f, 0x1a, 0xe8, 0x3a, 0xbd, 0x45, 0x07, 0x14, 0x22, 0xd0, 0xe3, 0x5c, 0x53, 0xef, + 0x1d, 0x5c, 0xf1, 0xfb, 0xd5, 0xc0, 0xd6, 0x30, 0x5c, 0xc9, 0x63, 0x53, 0x63, 0xc7, 0x7d, 0xb8, + 0xa1, 0xb5, 0xb9, 0x7b, 0xeb, 0x2d, 0xc1, 0x9c, 0xeb, 0xb4, 0x68, 0x40, 0xd0, 0xcf, 0x01, 0x62, + 0x04, 0x40, 0x49, 0x2d, 0xfd, 0xb0, 0x32, 0x50, 0x69, 0x9c, 0xde, 0x98, 0xd8, 0x94, 0xd0, 0xdf, + 0x09, 0x8d, 0xdd, 0x46, 0x6e, 0x5a, 0xff, 0x86, 0xd8, 0xf6, 0x86, 0xec, 0xec, 0x29, 0xc6, 0x3a, + 0xd9, 0xeb, 0x59, 0x47, 0xbd, 0xd3, 0x5b, 0xf3, 0x11, 0x2a, 0x66, 0x91, 0xe0, 0x7f, 0x92, 0x5e, + 0x18, 0x37, 0xd6, 0x49, 0x38, 0x30, 0x6f, 0x3d, 0x4a, 0x76, 0x1e, 0xb8, 0x87, 0xa7, 0xfd, 0x35, + 0x8f, 0xf1, 0xda, 0x9c, 0x1e, 0xcb, 0x5b, 0x43, 0x29, 0x00, 0xe4, 0x70, 0xef, 0x95, 0x07, 0x8c, + 0x86, 0x67, 0xcc, 0x69, 0x9f, 0x6c, 0x78, 0xe5, 0x5b, 0xd5, 0xcc, 0xc5, 0xe1, 0x6e, 0xa6, 0x35, + 0xdf, 0xe3, 0xf6, 0xd3, 0x74, 0x6a, 0xed, 0x6a, 0xc7, 0xcd, 0x81, 0x71, 0x8d, 0xd1, 0xd4, 0xd1, + 0xd4, 0xd7, 0xd9, 0x67, 0x49, 0xcb, 0x76, 0x6c, 0x00, 0x34, 0x2c, 0x74, 0x79, 0xbc, 0x1c, 0x48, + 0x7b, 0xfb, 0xb7, 0x9b, 0xda, 0xe7, 0x71, 0x46, 0xe5, 0xd5, 0x5f, 0x0b, 0x07, 0x36, 0x10, 0x0b, + 0xc1, 0x3c, 0xc6, 0x82, 0xbf, 0xc1, 0x78, 0x49, 0xef, 0x9f, 0x7b, 0xc3, 0xe7, 0x78, 0x59, 0xd9, + 0xfb, 0x6a, 0xa8, 0x4d, 0xa3, 0xf5, 0x68, 0xe7, 0xe8, 0xeb, 0x44, 0x75, 0x4f, 0xcf, 0xc6, 0xff, + 0x50, 0xf3, 0xaf, 0xd5, 0x72, 0x14, 0x83, 0x47, 0x6d, 0x46, 0x72, 0xec, 0x1b, 0xbf, 0x6c, 0x74, + 0xfe, 0x3a, 0x65, 0xf7, 0x0a, 0xb7, 0xb5, 0xf2, 0xc0, 0x35, 0x18, 0x78, 0x89, 0xec, 0x32, 0x63, + 0x01, 0x11, 0x88, 0x31, 0xd0, 0xd8, 0x45, 0xa3, 0xee, 0xdf, 0x91, 0x47, 0x64, 0xf5, 0x5f, 0xa9, + 0x3f, 0x67, 0xf4, 0xa5, 0x68, 0x9c, 0xcb, 0xd6, 0x1d, 0x67, 0x0c, 0xb5, 0x3e, 0x97, 0x49, 0x12, + 0x9e, 0x0e, 0xfa, 0xfd, 0x4d, 0x8f, 0x9b, 0x8d, 0x0b, 0xe3, 0x53, 0x17, 0x95, 0x76, 0x3e, 0x8c, + 0xcc, 0x49, 0x90, 0x65, 0xce, 0x08, 0x80, 0x56, 0x3a, 0xf0, 0xfc, 0x52, 0x77, 0x29, 0xd1, 0x94, + 0x48, 0x67, 0xd3, 0xd5, 0xff, 0xa8, 0xc6, 0x3a, 0xad, 0xfc, 0x94, 0xfc, 0x73, 0xa9, 0x97, 0xb4, + 0x8b, 0x8e, 0x53, 0x66, 0x8b, 0x1d, 0xf7, 0xf1, 0xf8, 0x22, 0xd6, 0xd4, 0x51, 0x79, 0xf2, 0x6a, + 0x58, 0x12, 0x8c, 0xc6, 0xb4, 0x23, 0x41, 0x79, 0x21, 0xb6, 0xf5, 0xb8, 0xb6, 0x11, 0x9a, 0xa2, + 0xa6, 0xb7, 0x06, 0x4f, 0x2b, 0x7a, 0x66, 0xb6, 0xe4, 0x94, 0x3c, 0x73, 0xb8, 0x68, 0xb0, 0x72, + 0xd5, 0xec, 0x2b, 0x3a, 0xae, 0x13, 0x30, 0x1a, 0x8a, 0x0c, 0x69, 0xec, 0xce, 0x26, 0x8a, 0x15, + 0xcb, 0x12, 0x6a, 0xa0, 0x64, 0x17, 0x2a, 0x56, 0xa9, 0x6a, 0x96, 0xaa, 0x66, 0xc9, 0x33, 0x2b, + 0xbe, 0x61, 0x09, 0x59, 0x0e, 0xc4, 0xce, 0x7e, 0x37, 0xe1, 0x04, 0x7c, 0x44, 0xcf, 0x8d, 0x81, + 0x62, 0xd5, 0xdc, 0xd6, 0x9d, 0x70, 0xcc, 0xd0, 0x10, 0xaa, 0x66, 0xdb, 0xb2, 0x6f, 0x64, 0x8b, + 0x76, 0xd1, 0xb3, 0x4a, 0x9e, 0x51, 0xf6, 0x0c, 0xce, 0x95, 0xe0, 0x7a, 0x34, 0xb1, 0x69, 0x57, + 0xbf, 0xfb, 0xc2, 0x8e, 0x54, 0x57, 0xce, 0x8e, 0x59, 0x15, 0xdb, 0xc4, 0xd8, 0x23, 0x34, 0x02, + 0xfc, 0x50, 0x2b, 0xdf, 0x9a, 0xfa, 0x3e, 0xdd, 0xf9, 0x6c, 0x6c, 0xe1, 0x3c, 0x65, 0xa7, 0xf4, + 0x63, 0x41, 0x37, 0x7a, 0x73, 0xa9, 0x62, 0xc6, 0x4c, 0x7b, 0x55, 0xcf, 0x7f, 0xca, 0x37, 0x63, + 0x26, 0xeb, 0x60, 0xa5, 0x7c, 0x09, 0x80, 0x30, 0x04, 0x0d, 0xeb, 0x3f, 0x33, 0xc5, 0xb6, 0x7c, + 0xbd, 0xb1, 0xbd, 0x43, 0x97, 0xba, 0x2b, 0x2b, 0x3f, 0xa9, 0xaa, 0x5b, 0x99, 0x55, 0x25, 0x1e, + 0x32, 0x36, 0xd8, 0xb4, 0xea, 0xef, 0x43, 0x00, 0x0d, 0x59, 0x66, 0xd8, 0x3e, 0xf5, 0xf1, 0xd8, + 0xfa, 0xe3, 0x1a, 0x63, 0xa4, 0x5d, 0x8f, 0xb7, 0x8f, 0x90, 0x56, 0x75, 0xe7, 0xd4, 0x1d, 0x25, + 0xee, 0x13, 0xaf, 0xa8, 0xfc, 0x6e, 0x7f, 0xcb, 0xfd, 0x76, 0xc7, 0x99, 0x8e, 0x2d, 0x4a, 0x9d, + 0xcf, 0xb1, 0xc6, 0x13, 0xd6, 0xdc, 0xfd, 0xb9, 0xb1, 0xbd, 0x3e, 0xcf, 0xaf, 0xe7, 0xf9, 0xe7, + 0xcc, 0xf9, 0xcb, 0x4b, 0x77, 0xbf, 0x43, 0x97, 0xbb, 0x28, 0xc9, 0xa1, 0x68, 0xcc, 0x36, 0xa6, + 0x14, 0xd5, 0x8d, 0xfb, 0xf5, 0x18, 0xd1, 0x85, 0x61, 0xba, 0xe8, 0xda, 0x83, 0xeb, 0x03, 0xf0, + 0x04, 0x34, 0xe2, 0x96, 0xd8, 0x38, 0xce, 0x95, 0x34, 0x19, 0x0a, 0xbc, 0xbf, 0xb4, 0xea, 0x4b, + 0xee, 0xeb, 0xbf, 0xd9, 0xd8, 0x98, 0xee, 0xdb, 0xf9, 0x23, 0x4c, 0xbd, 0x14, 0x32, 0xab, 0x95, + 0xf6, 0xab, 0x7e, 0x21, 0x5b, 0x48, 0x64, 0x12, 0x2d, 0x53, 0x5b, 0xa8, 0x9b, 0x8c, 0xcb, 0x8c, + 0xde, 0xdf, 0xf4, 0x3e, 0x5b, 0x78, 0x9e, 0x31, 0x3e, 0xe7, 0x84, 0x39, 0xf1, 0x16, 0x43, 0xdb, + 0x73, 0x98, 0xbb, 0x30, 0x78, 0xf5, 0x0e, 0x78, 0x45, 0x38, 0x62, 0x1f, 0x6e, 0xb6, 0x2b, 0x6b, + 0x2f, 0xbd, 0xb1, 0xfd, 0xd1, 0x0f, 0xf5, 0x2d, 0x9d, 0xdd, 0x3f, 0x7c, 0xb8, 0xe4, 0x99, 0x1f, + 0xfd, 0xd1, 0xd4, 0x1f, 0x3f, 0x6a, 0xa3, 0x81, 0x0d, 0x7b, 0xfa, 0x6b, 0x4f, 0x28, 0xcf, 0x6b, + 0x0d, 0x6f, 0x7d, 0xdc, 0xfa, 0xcd, 0x87, 0xc3, 0xc6, 0x44, 0x65, 0xf0, 0xcc, 0xaa, 0xf5, 0xf1, + 0xff, 0x6d, 0x9b, 0xd3, 0x2c, 0x5f, 0x37, 0xaf, 0x7c, 0xf1, 0x77, 0x93, 0x30, 0x39, 0x38, 0xd5, + 0x6a, 0x68, 0x7a, 0x5a, 0xdd, 0xf9, 0xde, 0xae, 0xce, 0xac, 0x79, 0xd5, 0x8f, 0x13, 0xab, 0x3e, + 0x1e, 0xb6, 0xa4, 0xca, 0xaf, 0xd5, 0x26, 0xb5, 0x23, 0xdb, 0x7b, 0x13, 0xdf, 0xb8, 0xa7, 0xf1, + 0xb6, 0xfb, 0xcc, 0xbb, 0x3f, 0x65, 0x2e, 0x5f, 0xd8, 0x05, 0xa0, 0x1a, 0x88, 0x2f, 0xdf, 0x39, + 0xed, 0x96, 0xbb, 0x2c, 0x24, 0x09, 0x80, 0x9d, 0x54, 0x77, 0x5c, 0xd9, 0x7f, 0xd2, 0x82, 0x1e, + 0x62, 0x83, 0x2e, 0x4f, 0x6b, 0xfc, 0xe1, 0xd5, 0xe6, 0x73, 0xbf, 0x90, 0x82, 0x02, 0xa0, 0xdf, + 0x72, 0x4a, 0xfc, 0xa6, 0x4b, 0x77, 0x34, 0xa7, 0xc6, 0xee, 0x5c, 0x28, 0xc6, 0x83, 0xde, 0x7b, + 0x94, 0xb7, 0x87, 0xc7, 0xce, 0x65, 0x2c, 0xb4, 0x3b, 0xec, 0xf8, 0x1c, 0x77, 0x51, 0xf3, 0xe1, + 0xbc, 0xc3, 0x70, 0x4a, 0x96, 0x96, 0x1a, 0x12, 0x6a, 0x8f, 0x8a, 0x3d, 0x17, 0x93, 0x87, 0xcb, + 0x52, 0xbe, 0x24, 0x84, 0x30, 0x4c, 0x13, 0x00, 0x59, 0x0d, 0x72, 0xcf, 0x5d, 0x0d, 0x0d, 0x4d, + 0x5c, 0xd8, 0xc5, 0x27, 0x3e, 0xaf, 0x29, 0x47, 0x96, 0x1e, 0x21, 0x0a, 0x8d, 0x9e, 0x60, 0x78, + 0xcd, 0xad, 0xb5, 0xdc, 0x57, 0x94, 0x64, 0xcc, 0x58, 0xc3, 0x98, 0x8c, 0xd1, 0x12, 0x8c, 0xa0, + 0xe8, 0x35, 0x27, 0x0d, 0x3f, 0x88, 0x1d, 0x68, 0xbf, 0xab, 0xf8, 0xd0, 0xc7, 0x92, 0x17, 0xfc, + 0x30, 0x53, 0x5a, 0x97, 0xed, 0x59, 0x39, 0xae, 0xe0, 0x11, 0x5d, 0xf7, 0xca, 0xc4, 0xa2, 0xdc, + 0xea, 0x9b, 0x79, 0xb9, 0x0b, 0x49, 0x0e, 0x36, 0x94, 0xfc, 0xa7, 0xc3, 0xbd, 0xee, 0xcd, 0xeb, + 0xea, 0x6a, 0xcc, 0xa6, 0x31, 0xea, 0x9d, 0xf5, 0xe8, 0x73, 0x0e, 0x40, 0x17, 0x0c, 0xaf, 0x2c, + 0xdd, 0xbb, 0x4b, 0x13, 0x7c, 0x30, 0xee, 0x6e, 0x0e, 0x14, 0x1f, 0xf9, 0x58, 0xf2, 0xdc, 0xef, + 0x35, 0x94, 0xd7, 0x67, 0xc3, 0x1c, 0xe3, 0xcc, 0xf3, 0xbd, 0x52, 0xa1, 0x14, 0x73, 0x92, 0xed, + 0xb3, 0xda, 0x82, 0xbb, 0x82, 0xd5, 0x37, 0xaf, 0x3e, 0xea, 0x8b, 0x47, 0xe5, 0x57, 0x94, 0xaa, + 0xbf, 0xf1, 0x16, 0x9d, 0xbf, 0xa8, 0x69, 0x71, 0x13, 0x71, 0x22, 0x77, 0x11, 0x98, 0x29, 0x3b, + 0x9f, 0x81, 0xd8, 0x4f, 0x47, 0x1c, 0x6a, 0x86, 0x6e, 0x94, 0x3c, 0x3e, 0xd8, 0x72, 0x49, 0x03, + 0xe4, 0xf9, 0xfc, 0xc7, 0xeb, 0x8c, 0xeb, 0xdf, 0x54, 0x3d, 0x73, 0xb1, 0x5f, 0x7b, 0x4c, 0x05, + 0xb4, 0x24, 0xca, 0xc5, 0x0a, 0x5b, 0x7f, 0x6b, 0x7c, 0xed, 0x96, 0xe4, 0x19, 0x8b, 0x2b, 0xb5, + 0x2a, 0xdf, 0xb0, 0xc7, 0xbd, 0x73, 0x35, 0xfb, 0x9f, 0x6b, 0x4b, 0x2f, 0xed, 0x36, 0xa1, 0x70, + 0xe7, 0x3f, 0xe7, 0x13, 0xf6, 0xe0, 0xcb, 0x08, 0xae, 0xa6, 0x64, 0xca, 0xdb, 0x7b, 0xac, 0xae, + 0xad, 0xcc, 0x0f, 0x87, 0xae, 0xff, 0x1a, 0x33, 0xfa, 0x92, 0x7d, 0xef, 0xa1, 0x86, 0xdb, 0xee, + 0x33, 0x00, 0x56, 0xf6, 0x06, 0x5b, 0x9a, 0x1f, 0xf2, 0x5b, 0x9e, 0xb2, 0xde, 0x7e, 0x2a, 0xfd, + 0xd3, 0x49, 0x39, 0x83, 0xc3, 0x10, 0x6a, 0x5e, 0x5b, 0x81, 0x31, 0xad, 0x87, 0xbe, 0x9f, 0x2f, + 0xd9, 0x9f, 0xbe, 0x23, 0xb9, 0x7c, 0x89, 0xbc, 0xf9, 0xb2, 0xde, 0xdd, 0x59, 0xeb, 0x8d, 0x5f, + 0x4a, 0x9e, 0x34, 0xaf, 0xed, 0xaa, 0x33, 0x3a, 0xc7, 0x66, 0x1a, 0x33, 0xb5, 0xac, 0x84, 0xfd, + 0x0f, 0x9b, 0xd6, 0xdb, 0x65, 0xd8, 0xef, 0x55, 0x3c, 0xfb, 0xa4, 0x38, 0x15, 0x69, 0xd7, 0x47, + 0x37, 0x6f, 0xcd, 0x55, 0xfc, 0x2e, 0xdf, 0x5d, 0xec, 0xce, 0xf8, 0xe0, 0x8c, 0x38, 0x8b, 0xab, + 0x67, 0x95, 0xb1, 0xcc, 0xc8, 0xf5, 0xe5, 0x52, 0x29, 0x49, 0xc2, 0xa9, 0x96, 0xcb, 0x76, 0xe9, + 0x79, 0xab, 0xe3, 0xb8, 0xc2, 0xca, 0x7f, 0xd6, 0x94, 0x83, 0x29, 0x86, 0x03, 0x03, 0x9a, 0x74, + 0xbd, 0xd7, 0x52, 0x0a, 0xf1, 0x38, 0x00, 0x94, 0xca, 0x60, 0x0c, 0x5a, 0xc1, 0x8a, 0x61, 0x30, + 0xac, 0xc0, 0x51, 0x8b, 0x9b, 0x84, 0x01, 0x02, 0x09, 0x00, 0xb6, 0x00, 0x04, 0x10, 0x82, 0x9c, + 0x21, 0x79, 0xe8, 0x03, 0x01, 0xc8, 0x46, 0xa5, 0x3c, 0x5a, 0x0d, 0x2b, 0x70, 0x03, 0x66, 0x12, + 0xc4, 0xe0, 0x17, 0x31, 0x94, 0x8f, 0x34, 0x5a, 0x21, 0xd7, 0xae, 0x61, 0x91, 0xcc, 0xf6, 0x94, + 0x9f, 0xbe, 0xc5, 0x39, 0xf6, 0x83, 0xa9, 0xad, 0xf7, 0x8e, 0x4b, 0x7d, 0x2b, 0x93, 0x02, 0x1b, + 0xf0, 0xb6, 0x3d, 0x48, 0x09, 0xa6, 0xd5, 0x70, 0xd2, 0xeb, 0x70, 0x64, 0x0c, 0x5a, 0x83, 0x0d, + 0x39, 0x74, 0x25, 0x51, 0xdb, 0x9c, 0xb3, 0xa6, 0x4d, 0x06, 0xdb, 0x03, 0x06, 0x0f, 0x6a, 0x35, + 0xf2, 0x29, 0x23, 0x28, 0x0d, 0xfe, 0x1a, 0xf3, 0x2b, 0x0d, 0x5d, 0x77, 0x7c, 0xaf, 0x7f, 0x01, + 0x04, 0x0a, 0x5a, 0xc3, 0x14, 0x43, 0x6d, 0x80, 0x46, 0xa2, 0x3d, 0x64, 0x31, 0x55, 0xde, 0x13, + 0x6c, 0x5d, 0x65, 0x4f, 0x99, 0xa7, 0xfb, 0x1f, 0x91, 0x53, 0xcf, 0x28, 0xf6, 0x05, 0xc9, 0xa9, + 0xcd, 0xf6, 0xbd, 0x4c, 0x66, 0x65, 0xbe, 0x92, 0x2f, 0x3f, 0x59, 0xf6, 0xb6, 0x7a, 0x74, 0x8c, + 0xd5, 0x7a, 0xca, 0x8c, 0xd4, 0xb4, 0x86, 0x18, 0x8f, 0xc1, 0xf3, 0x90, 0x1b, 0x00, 0x80, 0xd2, + 0x5a, 0x08, 0x31, 0x44, 0xdd, 0x7d, 0x75, 0x40, 0xf5, 0xd1, 0x9d, 0xc1, 0xbf, 0x0d, 0x1c, 0x3f, + 0xa7, 0x7c, 0xc2, 0xbc, 0xae, 0x61, 0xfb, 0x12, 0x51, 0xa1, 0x62, 0x2f, 0x3f, 0x5a, 0x7f, 0x7f, + 0xa5, 0x7b, 0xc2, 0x82, 0x7e, 0xd7, 0x0a, 0x94, 0xa2, 0x95, 0x2f, 0xc5, 0xd0, 0xaa, 0x8e, 0x9b, + 0x97, 0xdb, 0xdc, 0xdd, 0xb4, 0x68, 0xba, 0x3e, 0x61, 0x5e, 0xb7, 0x6b, 0x07, 0x75, 0x5f, 0x19, + 0xa3, 0x92, 0xf6, 0x82, 0xc1, 0xd4, 0xfb, 0xce, 0xea, 0x7b, 0xc3, 0x31, 0xf6, 0x69, 0x9f, 0xca, + 0x0c, 0x3f, 0x4c, 0xd5, 0xe7, 0xe8, 0xa5, 0x63, 0x3b, 0x68, 0xc1, 0x94, 0x9c, 0x29, 0x54, 0xc2, + 0xf1, 0x0c, 0x2e, 0xeb, 0x9b, 0xcd, 0xee, 0xac, 0xfb, 0xd4, 0x73, 0xc6, 0xaf, 0xff, 0xad, 0x7f, + 0xc1, 0xb4, 0xfc, 0xec, 0x56, 0xbc, 0x75, 0x79, 0xec, 0x81, 0x17, 0xac, 0x2b, 0x56, 0xc0, 0x32, + 0xea, 0xef, 0x55, 0x3f, 0xca, 0xf0, 0x54, 0xe1, 0x65, 0x34, 0x03, 0xeb, 0x2b, 0xc1, 0xe2, 0x46, + 0x30, 0x16, 0xf6, 0x15, 0x77, 0xdd, 0xd9, 0x69, 0xcf, 0xb7, 0x1b, 0x96, 0x35, 0xec, 0xf9, 0xed, + 0x9e, 0xde, 0x07, 0x7a, 0x97, 0xfe, 0xfe, 0xc8, 0x54, 0x31, 0x96, 0xfd, 0x43, 0x98, 0x3e, 0x35, + 0x99, 0xed, 0xd2, 0x89, 0x66, 0x27, 0x56, 0x7c, 0x88, 0x92, 0x33, 0xc3, 0xce, 0x35, 0x61, 0xd7, + 0x0e, 0xd1, 0xc0, 0xb5, 0x0a, 0x47, 0xfc, 0xe0, 0x50, 0x05, 0x69, 0x0d, 0x0d, 0x30, 0x8e, 0x4a, + 0x75, 0x38, 0x68, 0x0e, 0x00, 0x95, 0xf2, 0x28, 0xb6, 0xc8, 0x21, 0x1f, 0xa7, 0x34, 0x4a, 0x3e, + 0x28, 0x00, 0x23, 0xa8, 0xfc, 0x68, 0xb6, 0x94, 0x41, 0x35, 0x5e, 0x0d, 0xd1, 0x4f, 0x03, 0xbe, + 0x0f, 0xdf, 0x87, 0xe0, 0x23, 0xf6, 0xd4, 0x1a, 0x52, 0x43, 0x8c, 0x9a, 0x9b, 0x21, 0x68, 0xf0, + 0x14, 0x0f, 0xb6, 0xac, 0xb4, 0x17, 0x5c, 0x62, 0x26, 0xa7, 0x8e, 0x4b, 0x7d, 0x16, 0x6f, 0x91, + 0x9d, 0x4f, 0x41, 0x56, 0x35, 0x19, 0x7b, 0xbb, 0x5c, 0xc2, 0xae, 0x3e, 0xbc, 0xb8, 0x33, 0x71, + 0xe6, 0x91, 0x05, 0x46, 0xf0, 0x7c, 0xfc, 0xe4, 0xd1, 0xcc, 0xa6, 0x4e, 0x01, 0x20, 0x93, 0xd0, + 0xc7, 0xce, 0x29, 0xa5, 0xe3, 0xfe, 0x51, 0xb3, 0x43, 0xad, 0xb1, 0x66, 0xa3, 0x19, 0x84, 0xec, + 0xd9, 0x6d, 0xf1, 0x9d, 0xbd, 0x1c, 0xc0, 0xb4, 0x46, 0x79, 0xee, 0xd1, 0x7d, 0xab, 0x5f, 0x4d, + 0x5f, 0x7c, 0xe2, 0x40, 0xfd, 0xa6, 0xa7, 0x55, 0x1f, 0xbf, 0x5f, 0x9f, 0xe8, 0x1a, 0x30, 0xde, + 0x79, 0x7a, 0x3f, 0x67, 0xd0, 0x1a, 0x7f, 0x78, 0xd9, 0xfc, 0xe3, 0xe6, 0xf8, 0x35, 0xe7, 0x66, + 0x4d, 0x01, 0x0d, 0x6c, 0xda, 0x83, 0xaf, 0xdd, 0x99, 0x0e, 0xc2, 0xf0, 0x43, 0x6f, 0x28, 0x2e, + 0x9a, 0xf1, 0x9a, 0xbe, 0x45, 0x6b, 0x00, 0xc1, 0x8e, 0xdf, 0x5a, 0xd3, 0x3e, 0x1a, 0xe4, 0x37, + 0x05, 0xa9, 0x93, 0x9b, 0x3a, 0x9a, 0xe3, 0xaf, 0x18, 0xfd, 0x77, 0xf7, 0xc7, 0xde, 0xed, 0xa8, + 0x94, 0x42, 0x08, 0x1d, 0xea, 0x74, 0x63, 0x52, 0x4f, 0xd1, 0xd4, 0xc8, 0x48, 0x13, 0xee, 0x7c, + 0x1e, 0xd5, 0x10, 0xcb, 0xa6, 0x87, 0x5b, 0x36, 0xc2, 0xa0, 0x03, 0xe8, 0x7a, 0xc6, 0x8a, 0x70, + 0x06, 0xb8, 0x7b, 0x5d, 0x62, 0xf7, 0x80, 0x3b, 0x34, 0xa0, 0x91, 0x2b, 0x16, 0x66, 0xa7, 0x35, + 0x16, 0x2e, 0x7f, 0x5d, 0xf9, 0x3d, 0xb7, 0xbb, 0x9f, 0xee, 0x4d, 0x2c, 0x9c, 0xda, 0x3f, 0x50, + 0xb2, 0xbf, 0xb3, 0xca, 0xba, 0xe1, 0x64, 0xaf, 0xa6, 0x7f, 0x9e, 0xdf, 0xcc, 0x7e, 0xf2, 0xd8, + 0x8c, 0x9a, 0xe6, 0x96, 0x1a, 0x1d, 0xcd, 0x95, 0x53, 0x16, 0x76, 0xee, 0xff, 0xf6, 0x84, 0xf6, + 0x86, 0x92, 0x1e, 0x1a, 0x68, 0xd0, 0xa0, 0xf4, 0xb7, 0xe1, 0xf3, 0x8f, 0xdc, 0x63, 0x7f, 0xe4, + 0x9e, 0xa9, 0x6d, 0x96, 0xfe, 0x97, 0x93, 0xaa, 0xef, 0x3c, 0xb5, 0x3b, 0x1d, 0x1f, 0x09, 0x26, + 0xf6, 0x16, 0x05, 0xa0, 0xa7, 0x37, 0x79, 0x00, 0x0c, 0x8e, 0xa5, 0xb3, 0xc2, 0xef, 0x3e, 0x6e, + 0x48, 0x35, 0xfe, 0x94, 0x09, 0xb4, 0xac, 0xbc, 0x0a, 0xa6, 0xc3, 0x67, 0xd6, 0x56, 0xfa, 0x85, + 0xbd, 0xbc, 0xcd, 0x34, 0x2d, 0x59, 0x91, 0x99, 0x13, 0x32, 0x73, 0xbf, 0x38, 0x37, 0x73, 0x46, + 0xe6, 0x99, 0x77, 0x3c, 0xd3, 0xff, 0x60, 0xae, 0x61, 0x79, 0x1c, 0xd7, 0xa3, 0xb1, 0x2d, 0xc9, + 0x8f, 0xb1, 0xf2, 0xdd, 0x05, 0xde, 0xf7, 0xb2, 0xdd, 0x76, 0x98, 0xb7, 0xfe, 0x36, 0xb2, 0xa0, + 0x95, 0x1e, 0x33, 0x16, 0xb6, 0xbd, 0x07, 0x9b, 0xba, 0x70, 0xda, 0x22, 0x10, 0x43, 0xc5, 0xc7, + 0x4f, 0x56, 0xa6, 0x36, 0x77, 0x19, 0x04, 0x6a, 0x4c, 0xa8, 0xa3, 0x3b, 0xca, 0xcd, 0xa9, 0xea, + 0xa2, 0x19, 0x5a, 0x6b, 0x3c, 0xf9, 0xaa, 0x01, 0x60, 0xed, 0xa6, 0xe4, 0xae, 0x7e, 0x0e, 0x60, + 0x46, 0xb3, 0x3c, 0xf3, 0xc8, 0xbe, 0x3f, 0x6e, 0x4a, 0xbf, 0xf9, 0xf8, 0x01, 0x51, 0xc7, 0xcd, + 0x8a, 0x8f, 0x07, 0x9f, 0x4d, 0x0e, 0x94, 0xf8, 0x65, 0xcb, 0xb3, 0x65, 0x1f, 0xb7, 0x3e, 0xd0, + 0xd8, 0x35, 0xc0, 0x1b, 0x13, 0xfa, 0x9a, 0x73, 0x7a, 0x5c, 0x07, 0x00, 0xc2, 0x10, 0xab, 0x5e, + 0xb6, 0x1f, 0x7b, 0xc9, 0xfd, 0xe8, 0x9b, 0x7a, 0x4d, 0x3e, 0x5a, 0x40, 0x32, 0x80, 0xf9, 0xe1, + 0xae, 0xdf, 0x9b, 0x1d, 0x6f, 0xde, 0x57, 0x84, 0x27, 0xdc, 0xf9, 0x28, 0x59, 0x78, 0x2d, 0xef, + 0x01, 0xf4, 0x15, 0xed, 0x8d, 0x7b, 0x9c, 0x33, 0x97, 0x14, 0x88, 0x50, 0xf2, 0xf0, 0x83, 0xc7, + 0xe3, 0x5f, 0xbd, 0xac, 0x3f, 0x15, 0xf3, 0x4d, 0xa1, 0x0b, 0x65, 0xe3, 0xf6, 0x87, 0x5b, 0x6e, + 0x9c, 0xba, 0x5b, 0x03, 0x3f, 0x7c, 0xa4, 0xe9, 0xdc, 0xa3, 0x2a, 0x5b, 0x7a, 0x8c, 0x2b, 0x56, + 0x64, 0x05, 0x57, 0x96, 0x21, 0xfd, 0xc0, 0x58, 0xbf, 0xdd, 0x7e, 0xd3, 0xf1, 0x30, 0xf9, 0x88, + 0xb7, 0xc9, 0x97, 0xf1, 0xeb, 0x35, 0x09, 0x80, 0xfe, 0xe9, 0x34, 0x08, 0x60, 0x4f, 0x16, 0xdf, + 0xb8, 0xb7, 0x09, 0xc0, 0xbb, 0xce, 0xc8, 0x9a, 0x02, 0x81, 0xc4, 0x4f, 0x1f, 0xcf, 0x9c, 0x7d, + 0x54, 0x29, 0x93, 0xf4, 0x6e, 0x7f, 0xc8, 0xfd, 0xe2, 0xa5, 0x45, 0xc7, 0x1a, 0x43, 0x29, 0x85, + 0x03, 0x2f, 0x94, 0xcb, 0x65, 0xe1, 0xb4, 0xf0, 0xb8, 0x95, 0x78, 0xd5, 0x34, 0xfe, 0x53, 0x16, + 0xf2, 0x55, 0x9b, 0x7b, 0xc3, 0x52, 0x92, 0x71, 0xc6, 0x38, 0x43, 0x1e, 0x78, 0x18, 0xde, 0x4b, + 0x6b, 0xc5, 0x89, 0xf3, 0xb9, 0x5d, 0x08, 0xd1, 0xcf, 0xe8, 0x4f, 0x98, 0x95, 0x1b, 0x55, 0xab, + 0x55, 0xba, 0xed, 0x3e, 0x03, 0xed, 0x83, 0x64, 0x9c, 0x19, 0x57, 0xb3, 0x5a, 0xec, 0x19, 0xcd, + 0xb9, 0x15, 0x0b, 0x73, 0xb0, 0xe3, 0xab, 0x5e, 0x89, 0xcf, 0x6f, 0xcf, 0xae, 0xd9, 0x9c, 0xda, + 0xb5, 0x4d, 0x9c, 0x7d, 0xf5, 0x80, 0xa8, 0x49, 0x91, 0x2a, 0xfd, 0xeb, 0xbd, 0x26, 0xf8, 0xe0, + 0x68, 0xec, 0xea, 0xc5, 0xfa, 0xf8, 0xb9, 0xac, 0x7e, 0xf4, 0x02, 0xa2, 0x03, 0x0c, 0xe5, 0x33, + 0xae, 0x30, 0x2d, 0xbc, 0xfa, 0x88, 0xec, 0xe5, 0x27, 0x0f, 0xbc, 0xb2, 0xdb, 0x7e, 0xdf, 0xad, + 0x4e, 0x53, 0xb2, 0xe9, 0x1d, 0x27, 0xef, 0x62, 0x43, 0x81, 0x3d, 0x19, 0x02, 0xd0, 0xa6, 0x50, + 0xb5, 0xf7, 0x4b, 0xda, 0xaa, 0x18, 0xee, 0x2f, 0x6c, 0xa2, 0x03, 0xb4, 0xa0, 0x9a, 0xec, 0xf6, + 0x56, 0xf7, 0xb0, 0xb4, 0x15, 0x6b, 0x49, 0x00, 0xe0, 0x0e, 0x37, 0x1a, 0x0d, 0x91, 0x10, 0x00, + 0x64, 0x49, 0xc1, 0x02, 0xf2, 0xe0, 0xdf, 0x63, 0xae, 0xa5, 0xec, 0xf9, 0x56, 0xa9, 0xd3, 0x90, + 0xa5, 0x3e, 0x9d, 0x7b, 0x9a, 0x8c, 0x71, 0xe3, 0x5d, 0x7d, 0x45, 0x6c, 0xee, 0x8c, 0x9f, 0xba, + 0xa8, 0xc4, 0x80, 0x62, 0x05, 0xb7, 0xaf, 0x74, 0x6f, 0xb9, 0xb2, 0x2f, 0xe1, 0x04, 0xa6, 0xd0, + 0x03, 0x45, 0xe3, 0x07, 0x0f, 0xb7, 0x7d, 0xfe, 0xd2, 0x3d, 0x4a, 0xe1, 0x07, 0x0f, 0x37, 0xbf, + 0xf1, 0xd8, 0xd2, 0xee, 0xac, 0x71, 0xe9, 0x8a, 0x2c, 0x67, 0xca, 0x36, 0x64, 0xc5, 0x37, 0x5e, + 0xd8, 0xe1, 0x5c, 0x78, 0xdc, 0x40, 0xbd, 0xf7, 0xcd, 0x97, 0x70, 0xe7, 0x1a, 0xd7, 0x11, 0x74, + 0xe9, 0xf2, 0x6c, 0xb6, 0x48, 0xcf, 0xef, 0xb4, 0xfe, 0xf9, 0x8c, 0x5c, 0xa3, 0xeb, 0x0d, 0x0f, + 0xe2, 0x4b, 0x3e, 0xee, 0x78, 0x3a, 0xf3, 0xcc, 0x76, 0x7e, 0xdd, 0x85, 0x83, 0xa4, 0xae, 0x67, + 0x3f, 0x59, 0x14, 0xf6, 0xfe, 0xd1, 0x9c, 0x73, 0xc9, 0x3e, 0xa7, 0xb4, 0x8a, 0xbb, 0x48, 0x8c, + 0x9f, 0xf5, 0x50, 0xeb, 0xab, 0x08, 0x00, 0xed, 0x29, 0xd1, 0xb3, 0x5b, 0x12, 0x09, 0x47, 0x36, + 0x26, 0xe4, 0x31, 0x73, 0xfa, 0xab, 0x41, 0xe3, 0xee, 0xac, 0x05, 0xc0, 0x57, 0x6c, 0x56, 0xab, + 0xff, 0xd3, 0x55, 0xee, 0xba, 0xad, 0x29, 0x4e, 0x7a, 0x66, 0x8b, 0xdf, 0x96, 0xae, 0x12, 0xb1, + 0xc1, 0x31, 0xfc, 0x90, 0xee, 0x6f, 0x4e, 0xe1, 0x03, 0xe7, 0xe4, 0x7f, 0xf8, 0x68, 0x0a, 0x40, + 0x35, 0xc0, 0xcf, 0x56, 0xb5, 0x5e, 0xb1, 0xdc, 0x7b, 0xec, 0x25, 0xb3, 0xd6, 0x2f, 0x2b, 0x85, + 0x4a, 0x20, 0x5a, 0x1a, 0x54, 0xa3, 0x8b, 0x0d, 0x9d, 0x66, 0xd9, 0x87, 0x33, 0xe6, 0xaa, 0x29, + 0x15, 0x04, 0xbe, 0x1f, 0x9f, 0x72, 0x5a, 0xb2, 0x9a, 0x62, 0xdf, 0xf6, 0xcb, 0x7d, 0x9e, 0xd2, + 0xba, 0xd7, 0x18, 0x48, 0x86, 0xd6, 0xc8, 0x39, 0x5b, 0x80, 0xc7, 0x01, 0x13, 0xac, 0xcd, 0x85, + 0xa1, 0x41, 0x6a, 0x48, 0xe7, 0xb0, 0x7d, 0x70, 0x7d, 0x5c, 0xaf, 0xec, 0xaa, 0x1f, 0xbd, 0x27, + 0xbf, 0xe2, 0x88, 0x81, 0x41, 0x11, 0x42, 0x3a, 0x6e, 0x07, 0x00, 0x5a, 0xd3, 0xe5, 0x8f, 0x9c, + 0xea, 0xfd, 0xec, 0x29, 0xeb, 0xfc, 0x63, 0x62, 0xff, 0xf3, 0x87, 0xf8, 0xc9, 0x4b, 0xe4, 0xbc, + 0x29, 0xf9, 0xda, 0xa5, 0xe6, 0xcc, 0x93, 0x77, 0x5f, 0xbb, 0x27, 0x6e, 0x0f, 0xce, 0x8a, 0x98, + 0x22, 0x74, 0xac, 0x3f, 0x33, 0x2d, 0x7c, 0x7a, 0x63, 0xee, 0xe5, 0xeb, 0x65, 0x3a, 0x5e, 0x75, + 0xed, 0x60, 0xc9, 0x2c, 0xfe, 0xc2, 0xce, 0xa9, 0x0f, 0xbd, 0x60, 0x5c, 0x72, 0x22, 0x33, 0x87, + 0xa6, 0x5c, 0x4c, 0x43, 0x03, 0xa8, 0x04, 0xbc, 0xa6, 0x39, 0x7b, 0x0a, 0xa2, 0xc5, 0x1a, 0xef, + 0x5d, 0xea, 0xb8, 0xc1, 0xa1, 0xb9, 0xd2, 0x9e, 0x0c, 0xb6, 0x84, 0x68, 0x81, 0xd5, 0x6e, 0xf5, + 0xaf, 0xee, 0xdf, 0xf0, 0xb1, 0x0d, 0x3d, 0x0f, 0xf5, 0x24, 0x16, 0x26, 0x66, 0x5f, 0xde, 0xb6, + 0x76, 0xf5, 0xc6, 0x64, 0x4b, 0xac, 0x31, 0x9f, 0x30, 0xbf, 0x26, 0x70, 0xa3, 0x72, 0xe7, 0xad, + 0xa8, 0xec, 0x78, 0x46, 0xf9, 0x15, 0x6e, 0xef, 0x3b, 0x3a, 0x2c, 0x86, 0x6f, 0xb5, 0xb9, 0xc4, + 0x9e, 0xdd, 0x9a, 0x88, 0x5b, 0xba, 0x29, 0x29, 0x97, 0xce, 0xce, 0xe6, 0xaa, 0xac, 0x7b, 0xc0, + 0xf0, 0x42, 0x46, 0x44, 0x33, 0x9a, 0x83, 0x9f, 0xaf, 0x4e, 0xae, 0xdd, 0x92, 0xe2, 0xa4, 0x3b, + 0xda, 0xbc, 0x86, 0xb8, 0x37, 0x2c, 0x31, 0x87, 0x43, 0xf5, 0x2d, 0x69, 0x5c, 0x73, 0x76, 0xe1, + 0xe7, 0x4f, 0x24, 0xb5, 0x46, 0xa9, 0x6a, 0x6f, 0xed, 0x13, 0x77, 0xaf, 0x49, 0x2f, 0x9e, 0xe5, + 0x4f, 0x6b, 0xee, 0xa9, 0x69, 0x9e, 0x54, 0x0c, 0xef, 0x3f, 0xa7, 0xff, 0xb3, 0xbf, 0x68, 0x1e, + 0xe7, 0x41, 0x48, 0x15, 0x77, 0xef, 0x2f, 0x91, 0x41, 0xcb, 0x7d, 0x65, 0x85, 0x8c, 0xd0, 0x85, + 0x1b, 0x82, 0x35, 0x26, 0xb5, 0x6b, 0xe9, 0x54, 0x5c, 0xb9, 0x0e, 0xce, 0x3b, 0xda, 0x7f, 0xf8, + 0xf9, 0x86, 0x50, 0xd1, 0xf9, 0x4b, 0xbd, 0x64, 0x4c, 0x39, 0x16, 0x1a, 0x5d, 0xc5, 0x08, 0x49, + 0x47, 0x01, 0x7c, 0xe4, 0x8b, 0x34, 0x1c, 0xfb, 0x84, 0x10, 0x54, 0x3b, 0xfe, 0xec, 0xd6, 0x86, + 0xb5, 0xdb, 0xac, 0xe3, 0xe7, 0x57, 0x7b, 0x0b, 0xb1, 0x42, 0x45, 0xa4, 0xe2, 0xa1, 0x6d, 0xe2, + 0x0d, 0xcb, 0x0a, 0xb7, 0x3d, 0x98, 0x09, 0x42, 0x94, 0x83, 0x7d, 0x4f, 0x5f, 0xeb, 0x9e, 0xad, + 0x6b, 0xc3, 0xc3, 0x9b, 0x9a, 0xcf, 0x69, 0x2a, 0xdf, 0x55, 0xb0, 0x76, 0xc1, 0xa9, 0xb8, 0x54, + 0x8b, 0xaf, 0xd9, 0x28, 0x6b, 0xca, 0xf7, 0x84, 0x0d, 0xbb, 0x64, 0xb1, 0xbd, 0x68, 0x18, 0x05, + 0x9d, 0x2f, 0x91, 0x3d, 0x15, 0x69, 0x4b, 0x17, 0x3d, 0xe2, 0xfb, 0x72, 0x86, 0xba, 0x4e, 0xb0, + 0xee, 0x95, 0x29, 0x92, 0x70, 0x54, 0xc6, 0xad, 0xec, 0x6d, 0x5b, 0xae, 0x2e, 0x5a, 0x56, 0xfa, + 0xda, 0x7d, 0x4d, 0x77, 0x3d, 0xdd, 0xf8, 0xcb, 0x35, 0xe2, 0x3f, 0x2e, 0x2b, 0xc6, 0xad, 0xa0, + 0x76, 0x9d, 0xa4, 0x85, 0xb4, 0xeb, 0x25, 0xec, 0x60, 0x1f, 0x23, 0x7c, 0xad, 0xf7, 0xb9, 0x0f, + 0xb8, 0x1e, 0x9c, 0x50, 0xe8, 0x2f, 0xc4, 0xef, 0x5f, 0x9f, 0xba, 0xf0, 0x98, 0xd0, 0xb5, 0x03, + 0x83, 0x29, 0xdb, 0xa0, 0x72, 0x40, 0x5a, 0x91, 0x62, 0x14, 0x84, 0xcc, 0x32, 0x64, 0xc6, 0x0d, + 0x00, 0x6c, 0xee, 0xb4, 0x17, 0x4c, 0x41, 0x25, 0xc0, 0x63, 0x1b, 0xf8, 0x61, 0xad, 0x7a, 0x9f, + 0x79, 0x68, 0x96, 0xe4, 0x0a, 0x55, 0xcf, 0xf2, 0xf2, 0xe0, 0x49, 0x65, 0x70, 0xc8, 0x90, 0x2c, + 0x2a, 0x6d, 0xcc, 0x17, 0x5e, 0x18, 0x88, 0xcd, 0x8d, 0x2d, 0xfd, 0xe5, 0xd1, 0xfd, 0xdb, 0xca, + 0xfe, 0x2f, 0x7c, 0xb3, 0x29, 0x83, 0x3d, 0x96, 0xff, 0x31, 0x5f, 0x97, 0xf4, 0xd6, 0x1d, 0x4f, + 0xa7, 0x63, 0xcc, 0xd6, 0xfb, 0xed, 0x28, 0x87, 0xe3, 0x60, 0x70, 0x0d, 0xca, 0xb8, 0x3a, 0x6e, + 0xe9, 0x86, 0xb8, 0x4a, 0x38, 0x38, 0x7b, 0x49, 0xf0, 0xc8, 0x0b, 0x8d, 0xf9, 0x0a, 0xbd, 0xf1, + 0x58, 0x2f, 0x6e, 0xc3, 0x31, 0x07, 0xd9, 0x92, 0xb0, 0x35, 0x88, 0x83, 0xc6, 0x60, 0x8b, 0x29, + 0xa8, 0x66, 0xa3, 0xe6, 0x94, 0x7f, 0xc3, 0x45, 0xa5, 0xb9, 0x6d, 0xa5, 0x9f, 0xad, 0x6a, 0xdc, + 0xd6, 0xe5, 0x1e, 0x36, 0xbd, 0x58, 0x33, 0x2b, 0xaf, 0x9d, 0x40, 0xe3, 0x93, 0x77, 0xdf, 0xd4, + 0x27, 0x3b, 0x03, 0xaf, 0x73, 0xcc, 0xef, 0x72, 0xce, 0x72, 0x15, 0xb6, 0x27, 0x17, 0x33, 0xb8, + 0x0e, 0x42, 0x6a, 0x77, 0x71, 0xc4, 0x8c, 0x6a, 0x63, 0xc2, 0x63, 0xa4, 0x4d, 0x8e, 0x63, 0xe7, + 0x14, 0xde, 0xfb, 0xfd, 0x29, 0x55, 0x1f, 0xb7, 0xbf, 0xa7, 0x93, 0x31, 0x4c, 0x69, 0xc0, 0x92, + 0x59, 0x15, 0x83, 0x2b, 0x43, 0x84, 0xd9, 0xa2, 0x95, 0xaf, 0xb2, 0xce, 0xac, 0xeb, 0x58, 0x61, + 0xd2, 0xf1, 0x62, 0xd6, 0x48, 0xec, 0x1f, 0x44, 0x5a, 0xa3, 0xe4, 0xf1, 0x20, 0xa4, 0xff, 0x7e, + 0x30, 0xf5, 0xab, 0x55, 0xfc, 0x1d, 0x27, 0xa5, 0x85, 0xe8, 0xb7, 0x84, 0xf2, 0x02, 0x71, 0xd5, + 0xe9, 0x39, 0xa5, 0xd4, 0x5d, 0x4f, 0xc7, 0x63, 0xd6, 0xb8, 0x46, 0xe6, 0xdc, 0x28, 0xf7, 0x6e, + 0xdf, 0xf8, 0xe4, 0xd3, 0xcb, 0x56, 0x2c, 0xcb, 0x50, 0xa6, 0x78, 0x63, 0x91, 0x2b, 0xa6, 0x6b, + 0x7e, 0x9d, 0x40, 0x09, 0x1e, 0x3b, 0x36, 0x6e, 0x2d, 0xb2, 0x82, 0xa7, 0x03, 0xae, 0xa7, 0x4a, + 0xb5, 0x9d, 0xd1, 0x4c, 0xc6, 0x66, 0x6a, 0xf9, 0x2a, 0x8c, 0x7d, 0xe7, 0x42, 0x29, 0x80, 0xee, + 0x5a, 0x9b, 0xd9, 0x91, 0x6d, 0x10, 0x4c, 0x03, 0x7a, 0x6a, 0x43, 0xa9, 0xa3, 0xb5, 0x88, 0x90, + 0xee, 0x7d, 0x36, 0xdd, 0x5b, 0x4c, 0x71, 0xa6, 0x01, 0x70, 0x0a, 0x3a, 0x5a, 0x0a, 0x8b, 0x67, + 0x0e, 0x70, 0xa6, 0x66, 0x37, 0x17, 0x97, 0xcd, 0xcd, 0x7c, 0xf8, 0x7b, 0x4d, 0x68, 0x28, 0x9e, + 0xb9, 0x24, 0xc7, 0x48, 0x2b, 0x4d, 0x9c, 0xf4, 0xda, 0x57, 0xf8, 0x2f, 0x56, 0xcf, 0x4c, 0xd8, + 0x83, 0x8d, 0x2a, 0x6e, 0x55, 0x5f, 0x37, 0xbf, 0x57, 0x08, 0x0d, 0xb0, 0x5f, 0x3c, 0xd9, 0x3a, + 0xad, 0xa1, 0x85, 0x08, 0x20, 0x35, 0xb7, 0x25, 0x7f, 0xe4, 0xac, 0xfe, 0x61, 0xe9, 0x32, 0x66, + 0x83, 0xcc, 0x95, 0xc5, 0xb5, 0xbf, 0x8c, 0x6f, 0xd8, 0x6d, 0xbc, 0xf5, 0xc4, 0x7c, 0x57, 0xce, + 0xf8, 0xea, 0xef, 0xac, 0x2f, 0xbd, 0xb9, 0x6a, 0x70, 0xf5, 0xf2, 0xae, 0xcc, 0x7f, 0x3d, 0x98, + 0xfa, 0xc4, 0x45, 0x5d, 0xd3, 0x9a, 0x8a, 0x67, 0x1d, 0xd7, 0x70, 0xed, 0x2f, 0xdc, 0x1f, 0x38, + 0x2d, 0x9b, 0xbb, 0xf9, 0xef, 0xd7, 0x88, 0xdb, 0x3e, 0x98, 0x17, 0x62, 0x1f, 0x7a, 0x8a, 0x78, + 0xd3, 0x72, 0x68, 0x4d, 0x5a, 0x81, 0x06, 0x13, 0x16, 0xbc, 0x4e, 0xaf, 0xf5, 0xe2, 0x66, 0xad, + 0x74, 0xef, 0x03, 0xbd, 0xdc, 0x61, 0x61, 0xb7, 0xc2, 0x46, 0xb0, 0x69, 0x0c, 0x57, 0x53, 0xee, + 0xa8, 0xea, 0x0b, 0xab, 0x9e, 0xa1, 0x72, 0xdf, 0xcc, 0xc5, 0x33, 0xfc, 0xda, 0x1b, 0xb2, 0xb1, + 0xb9, 0x46, 0x8c, 0xe5, 0x2a, 0xc6, 0x9e, 0x2c, 0x19, 0x82, 0x3c, 0x9f, 0xcf, 0x48, 0xd2, 0xe2, + 0x99, 0x5e, 0x32, 0xe6, 0x1b, 0x5c, 0x99, 0x02, 0xc7, 0xcd, 0x2b, 0xbe, 0xff, 0x07, 0x6d, 0x7e, + 0x88, 0xdb, 0xdf, 0x33, 0x20, 0x15, 0x4d, 0x6d, 0xc4, 0x91, 0xb3, 0x2a, 0x82, 0x2b, 0x43, 0x84, + 0x3d, 0x79, 0x2b, 0x5f, 0x65, 0x5d, 0x03, 0xae, 0x65, 0xee, 0xc5, 0x96, 0xc1, 0xce, 0xb8, 0xec, + 0x59, 0x5e, 0xc0, 0x1d, 0x4b, 0xc5, 0x2c, 0x54, 0x42, 0xa3, 0x6b, 0xc0, 0x8a, 0x5b, 0x81, 0xeb, + 0xa8, 0x1a, 0x9d, 0xc6, 0x36, 0x9d, 0xd4, 0x3c, 0xde, 0xbc, 0x1f, 0xea, 0xf3, 0x29, 0x27, 0xf9, + 0x5d, 0x2f, 0x0a, 0x6b, 0x8c, 0x76, 0xdc, 0x92, 0xf4, 0x02, 0x95, 0xba, 0xfd, 0xa1, 0x16, 0xcb, + 0xd4, 0x27, 0x2d, 0x28, 0x9e, 0xbf, 0x44, 0xfd, 0x7c, 0x55, 0x83, 0xe0, 0x48, 0x39, 0xea, 0xb2, + 0xe5, 0x9d, 0xad, 0xe9, 0xca, 0x05, 0x4b, 0x02, 0x0d, 0xb4, 0x67, 0x4a, 0x55, 0xdf, 0x70, 0x1d, + 0xfa, 0xc1, 0x23, 0xcd, 0x8c, 0xd0, 0x94, 0x0c, 0xce, 0x39, 0x32, 0xdf, 0x92, 0xa0, 0x1f, 0x3f, + 0xd6, 0x64, 0x0a, 0x7d, 0xea, 0xe1, 0xc5, 0x65, 0xf3, 0xfa, 0x6a, 0xe6, 0x4a, 0xd8, 0xf2, 0xf0, + 0xa9, 0x21, 0x63, 0x58, 0xb1, 0xa8, 0xf7, 0xc4, 0x05, 0xbd, 0x65, 0x5f, 0x9c, 0x30, 0xb7, 0xe5, + 0xf8, 0xf9, 0xd9, 0x35, 0x9b, 0x1a, 0x66, 0xb7, 0x94, 0xd2, 0xf1, 0xf0, 0xbb, 0x0f, 0x34, 0x48, + 0xa5, 0xae, 0x3e, 0xad, 0x6b, 0xf4, 0xbc, 0x4c, 0xdd, 0xd3, 0x26, 0x67, 0x0b, 0x11, 0xd3, 0xaa, + 0x87, 0xf9, 0xf6, 0xe3, 0x2b, 0x9f, 0x3e, 0xf6, 0xf0, 0x65, 0x8d, 0x6f, 0x68, 0xac, 0x94, 0x07, + 0x13, 0xd0, 0xcb, 0xaf, 0x96, 0x5b, 0x7b, 0x52, 0x6e, 0x5b, 0xdc, 0x9e, 0x6e, 0xeb, 0x16, 0xcd, + 0x1e, 0xed, 0x90, 0x9d, 0xdb, 0x01, 0x43, 0xe0, 0xb4, 0xc0, 0x7f, 0x15, 0x76, 0x2d, 0xc2, 0x33, + 0xb6, 0xb1, 0x1a, 0xdc, 0xea, 0x65, 0xa7, 0x07, 0xdf, 0x59, 0x67, 0x35, 0xbc, 0xc8, 0x38, 0x41, + 0x2a, 0x7d, 0xfe, 0xec, 0xd8, 0x67, 0x2f, 0x2e, 0x5e, 0xbf, 0xa2, 0x7a, 0xeb, 0x33, 0xce, 0xdd, + 0x1b, 0xd8, 0x60, 0xf8, 0x59, 0xb1, 0x8b, 0x17, 0xd3, 0x82, 0x29, 0x79, 0xc7, 0x52, 0x89, 0x98, + 0x77, 0xcd, 0x8a, 0xe2, 0xd3, 0x2f, 0xe3, 0x8b, 0x17, 0x54, 0xdb, 0xd2, 0x65, 0x00, 0x8c, 0xf4, + 0xeb, 0xe6, 0x97, 0xe7, 0xcf, 0x75, 0xbe, 0xfe, 0x88, 0xa8, 0x79, 0x6e, 0x0d, 0xcc, 0x74, 0xed, + 0xd9, 0x2d, 0xce, 0xdc, 0xb6, 0xf2, 0x8a, 0x63, 0x12, 0x5f, 0x7e, 0x42, 0x38, 0x04, 0x09, 0x70, + 0xad, 0xdf, 0x7d, 0x74, 0xfc, 0xf0, 0xe9, 0x03, 0x96, 0x18, 0xd5, 0xeb, 0x9a, 0x86, 0x5a, 0xb6, + 0x58, 0xb9, 0x76, 0x58, 0x73, 0xfb, 0xb3, 0x9a, 0xf3, 0xdf, 0xbf, 0xcc, 0xb9, 0xea, 0x17, 0xee, + 0xbf, 0xff, 0xb6, 0x19, 0x86, 0xba, 0xf8, 0x75, 0xe1, 0x5b, 0x4f, 0xec, 0x63, 0x4c, 0xf7, 0x17, + 0xf9, 0x73, 0xbb, 0x45, 0xd5, 0x17, 0xad, 0xe9, 0xe2, 0xe7, 0xde, 0x32, 0xf0, 0xd6, 0xdb, 0x9a, + 0xcf, 0xfb, 0x7c, 0x13, 0x58, 0x78, 0xd5, 0x59, 0xd5, 0xb3, 0x8f, 0xec, 0xe6, 0x34, 0x5e, 0xd2, + 0x04, 0x01, 0x20, 0x77, 0x3e, 0x76, 0xec, 0xf0, 0xba, 0x2d, 0x7e, 0xb8, 0xcb, 0x0f, 0x77, 0x01, + 0xa5, 0x43, 0x6d, 0x4e, 0xb1, 0x66, 0xbc, 0x77, 0x56, 0xcf, 0x3d, 0x8f, 0x3d, 0x7b, 0xc5, 0xba, + 0x63, 0x7f, 0x7b, 0x7c, 0x78, 0x96, 0x6c, 0x9d, 0xd1, 0xdc, 0x75, 0x6a, 0xcf, 0xaa, 0xc7, 0xd7, + 0x34, 0xb0, 0x44, 0xd2, 0x75, 0x38, 0x63, 0x3c, 0xb1, 0x44, 0x16, 0xd7, 0x93, 0x39, 0xb6, 0x01, + 0xdb, 0xd3, 0xaa, 0x54, 0xe5, 0xb7, 0x3f, 0x34, 0xd5, 0x32, 0xb1, 0x7c, 0x61, 0xf1, 0xdc, 0xc5, + 0xf2, 0x67, 0x4f, 0x64, 0x18, 0x47, 0x3a, 0xae, 0x2e, 0x3b, 0xb9, 0xb3, 0xad, 0xa1, 0x7c, 0xce, + 0x11, 0x61, 0xcc, 0x52, 0x6d, 0xe9, 0x4a, 0xb1, 0x6a, 0xd8, 0x06, 0xbb, 0xfd, 0x91, 0x66, 0x22, + 0xb4, 0x24, 0x83, 0xb3, 0x8e, 0xcc, 0xa5, 0x62, 0xf4, 0x7f, 0x1f, 0x6d, 0x32, 0x84, 0x3e, 0x6b, + 0x49, 0x61, 0xe9, 0xec, 0xda, 0xc0, 0x0c, 0xae, 0xa3, 0x0e, 0x9b, 0x2a, 0x89, 0x91, 0x6b, 0x87, + 0xab, 0x37, 0xd8, 0xbf, 0x7a, 0xaa, 0xfd, 0xb0, 0x76, 0x35, 0xa7, 0xb5, 0xb8, 0xea, 0xe5, 0xcc, + 0xc2, 0x69, 0x65, 0xd7, 0x29, 0xc4, 0x4c, 0x7d, 0xf4, 0x2c, 0xc5, 0x88, 0xbd, 0x36, 0x70, 0xa7, + 0x7d, 0xcd, 0x1b, 0x0e, 0xdf, 0x9b, 0xd1, 0x9f, 0x79, 0xdb, 0xc8, 0x3f, 0x1f, 0xbf, 0xf1, 0x56, + 0x84, 0x95, 0xca, 0xfd, 0xd7, 0x8a, 0x74, 0xbd, 0xb6, 0x01, 0x21, 0xac, 0x31, 0x24, 0x08, 0x79, + 0x4d, 0x8b, 0x0b, 0xae, 0x34, 0x48, 0x2a, 0xaa, 0xc5, 0x22, 0x0c, 0x26, 0x89, 0xe0, 0x85, 0x1c, + 0x40, 0xad, 0xf2, 0x42, 0xc9, 0xa4, 0xae, 0x7d, 0xaa, 0x0d, 0xa6, 0x02, 0xc5, 0xb4, 0x26, 0x68, + 0x70, 0xae, 0x6a, 0xfe, 0xb2, 0x26, 0xe8, 0xfd, 0x90, 0x3b, 0xa6, 0x1c, 0xee, 0xf4, 0xfd, 0x10, + 0x96, 0x81, 0x20, 0x04, 0x63, 0x20, 0x42, 0xb1, 0x02, 0xad, 0xe1, 0x3a, 0x60, 0x43, 0xba, 0x54, + 0x0f, 0xcb, 0x47, 0x0e, 0x55, 0x0c, 0xad, 0xc5, 0xd7, 0x50, 0xf3, 0xc9, 0x1b, 0xb6, 0xf5, 0x59, + 0x53, 0x2e, 0xda, 0xb8, 0x71, 0x43, 0xb5, 0x5a, 0x9d, 0xd3, 0x32, 0x67, 0xc6, 0x9c, 0xb9, 0xde, + 0x23, 0x3d, 0xcf, 0x5c, 0xfa, 0x8c, 0xdb, 0xea, 0xd6, 0x06, 0x6a, 0x47, 0xff, 0xfe, 0x68, 0xab, + 0xdd, 0xa2, 0xed, 0xa1, 0x77, 0xcf, 0xf7, 0x8c, 0x53, 0x5e, 0x2f, 0xab, 0x6b, 0xcb, 0x6b, 0x2f, + 0xa2, 0x14, 0x1f, 0x6f, 0x5a, 0x82, 0x28, 0x04, 0x50, 0xf5, 0xc8, 0x97, 0x62, 0x68, 0xb6, 0x11, + 0x8c, 0xeb, 0xb8, 0x15, 0xf8, 0x81, 0xa8, 0xbd, 0xe6, 0x48, 0x14, 0x92, 0xeb, 0x98, 0x15, 0x0c, + 0x85, 0xad, 0xf8, 0x40, 0xd9, 0x4a, 0x39, 0x81, 0x33, 0x74, 0x44, 0x29, 0x2a, 0x79, 0xa6, 0x1a, + 0x3d, 0x79, 0x19, 0xb3, 0x42, 0x46, 0xb2, 0xec, 0x99, 0x52, 0x0e, 0x26, 0x28, 0x01, 0x30, 0xb9, + 0x74, 0xac, 0x70, 0xaf, 0x7c, 0x20, 0xa9, 0xa8, 0xbf, 0x64, 0x27, 0x6c, 0xdf, 0x36, 0x64, 0xcd, + 0x04, 0x52, 0x51, 0x5f, 0xc1, 0xc9, 0x55, 0x1c, 0x8b, 0x87, 0x99, 0x64, 0xd9, 0xb5, 0x03, 0x00, + 0x41, 0xc8, 0xca, 0x55, 0x23, 0xe1, 0x78, 0x8c, 0x29, 0xad, 0x91, 0x2d, 0xd9, 0xd9, 0x92, 0x6d, + 0x09, 0xbf, 0xd1, 0x2d, 0x3b, 0xd6, 0xd0, 0xfc, 0x28, 0xa0, 0x47, 0x79, 0x3a, 0xad, 0x7d, 0x05, + 0x6b, 0xae, 0xb5, 0xfc, 0x49, 0xdc, 0xf7, 0xb0, 0x48, 0xa7, 0xbb, 0x16, 0x9d, 0x48, 0x16, 0xb9, + 0xfd, 0xde, 0xea, 0xe3, 0x57, 0xb7, 0x5c, 0xd2, 0x74, 0xe4, 0x8f, 0x97, 0xee, 0xf8, 0xee, 0xf6, + 0x17, 0x3f, 0xf4, 0x7c, 0xdb, 0x15, 0xb3, 0x16, 0x7d, 0xf1, 0xb0, 0xbe, 0xde, 0xfe, 0x35, 0xaf, + 0xae, 0xd7, 0x66, 0x75, 0xf6, 0x61, 0xf3, 0xc2, 0x6d, 0xf7, 0x2c, 0x98, 0xdd, 0x42, 0xf9, 0xf5, + 0xa5, 0xc7, 0xbe, 0x22, 0x5a, 0x84, 0x96, 0xba, 0x7e, 0x4a, 0x9a, 0xf4, 0x10, 0x5b, 0x24, 0x86, + 0xd8, 0x32, 0xb8, 0x09, 0x22, 0x40, 0x44, 0x30, 0x98, 0x26, 0x82, 0x17, 0x32, 0x22, 0x6d, 0x72, + 0x5d, 0x9b, 0xc4, 0xd0, 0x83, 0xa1, 0x70, 0x6d, 0x30, 0x1d, 0x28, 0xa6, 0x15, 0xd5, 0x68, 0xc6, + 0x46, 0xd8, 0x42, 0x41, 0xc8, 0x2c, 0x53, 0x02, 0xa8, 0x78, 0xa2, 0xe2, 0x8b, 0xb8, 0x15, 0x58, + 0xa6, 0x0c, 0x43, 0xc6, 0xb8, 0xae, 0xf5, 0x40, 0x5e, 0xc0, 0x1d, 0x33, 0xc4, 0xe8, 0xf7, 0xd5, + 0xa4, 0x65, 0xaf, 0x4c, 0x9c, 0xfd, 0x75, 0x32, 0xdc, 0x2f, 0x7c, 0xe2, 0xbd, 0x63, 0x7b, 0xfd, + 0x42, 0xf7, 0xce, 0xd0, 0x3d, 0x2a, 0x39, 0x7d, 0x45, 0xb8, 0x73, 0x25, 0x52, 0x06, 0x00, 0x06, + 0x59, 0xcf, 0x0f, 0x43, 0xa8, 0xba, 0x8a, 0xd1, 0x35, 0x25, 0x50, 0x97, 0x29, 0x3a, 0xe2, 0xb1, + 0x04, 0x57, 0xf5, 0x97, 0x36, 0xb9, 0x7a, 0xad, 0xd2, 0x65, 0x0c, 0xb6, 0x29, 0x75, 0x1d, 0x27, + 0x6a, 0x59, 0x52, 0xc6, 0x50, 0x07, 0x9d, 0x70, 0xc6, 0xcd, 0xd3, 0xd0, 0x65, 0x0d, 0x58, 0x76, + 0xc7, 0xeb, 0xfd, 0x1d, 0x4f, 0x88, 0x19, 0x57, 0xda, 0x9c, 0xa6, 0x4d, 0x69, 0xdb, 0xb3, 0x7d, + 0xe7, 0x0b, 0xeb, 0x5e, 0x76, 0xec, 0xcc, 0xb4, 0x13, 0x92, 0xb3, 0xbf, 0xb5, 0xd8, 0x69, 0x34, + 0xc2, 0x3d, 0x82, 0xd9, 0x79, 0x64, 0xe0, 0x2b, 0xdf, 0x9a, 0x65, 0xb1, 0x85, 0x73, 0x83, 0x35, + 0xbf, 0x37, 0x2f, 0x7c, 0x3b, 0xdb, 0x32, 0x53, 0x95, 0xb6, 0x51, 0xcc, 0xd8, 0xc7, 0x1c, 0x9b, + 0x6d, 0x69, 0x67, 0x24, 0x4f, 0x7b, 0x70, 0xe0, 0x65, 0x99, 0xa1, 0x65, 0xca, 0xf1, 0xf2, 0x4b, + 0x2c, 0x53, 0xb6, 0x99, 0xe5, 0xd1, 0xef, 0xa8, 0x13, 0x8e, 0x37, 0xd6, 0x6c, 0x1e, 0xc5, 0xad, + 0x60, 0xfc, 0xac, 0xcb, 0xc1, 0xbf, 0x19, 0xd3, 0xcd, 0x89, 0x4a, 0xfd, 0x33, 0x70, 0xa6, 0x5b, + 0x52, 0xe5, 0xda, 0x1c, 0xf0, 0xf0, 0x79, 0x06, 0x57, 0xa9, 0xc1, 0x10, 0x27, 0x11, 0xe9, 0x8c, + 0x5b, 0xcd, 0xb8, 0xd5, 0x71, 0xd3, 0x3b, 0x87, 0x34, 0x95, 0x2a, 0x23, 0xd6, 0x7c, 0xae, 0x59, + 0x4a, 0x07, 0xfe, 0xb3, 0xe2, 0xf4, 0x7f, 0x8b, 0x69, 0x2b, 0xd8, 0x50, 0x94, 0x53, 0x62, 0x87, + 0x7d, 0xed, 0x30, 0xbe, 0x2c, 0xbd, 0xe3, 0xa9, 0x92, 0x79, 0x62, 0xf3, 0xc2, 0x5b, 0x4f, 0x8e, + 0xe5, 0x8a, 0x65, 0x0a, 0x9f, 0x7b, 0x79, 0x3d, 0x3c, 0x6f, 0xda, 0xec, 0xa9, 0x36, 0x83, 0x9a, + 0xf5, 0xc6, 0x6c, 0xd7, 0xff, 0xb4, 0xcd, 0x5b, 0x5e, 0x49, 0xdd, 0xa2, 0xca, 0x0a, 0x26, 0x27, + 0xc8, 0xe1, 0x8b, 0x0f, 0x4b, 0x36, 0x83, 0x43, 0x63, 0x24, 0xf4, 0xae, 0x01, 0xa5, 0x34, 0xab, + 0x8d, 0xef, 0x14, 0x1c, 0x53, 0x41, 0x43, 0x2a, 0x80, 0x60, 0x5b, 0xaa, 0x16, 0x9e, 0x52, 0x00, + 0x67, 0xe0, 0x7c, 0xc4, 0x6d, 0x87, 0x8a, 0x04, 0xd3, 0x0c, 0xa4, 0x19, 0x4c, 0xae, 0x42, 0x4d, + 0x00, 0x1c, 0x4b, 0xc6, 0x1c, 0x69, 0x12, 0x40, 0xc4, 0x58, 0xed, 0xd7, 0x9e, 0x88, 0x11, 0x1c, + 0x53, 0x0e, 0x76, 0x65, 0x6c, 0xe4, 0xe5, 0x55, 0x41, 0x9b, 0xd3, 0x8e, 0xe5, 0xe9, 0xd9, 0x7b, + 0x36, 0x3d, 0x45, 0x75, 0x8a, 0x68, 0x94, 0xf8, 0xf7, 0x13, 0xcb, 0xa9, 0xf0, 0x5c, 0xfc, 0xb8, + 0x4f, 0xc1, 0xb0, 0x50, 0x96, 0x75, 0x69, 0x59, 0x5c, 0xeb, 0x51, 0x45, 0x8d, 0x14, 0x71, 0xe0, + 0x45, 0xef, 0xb3, 0x8c, 0x71, 0x26, 0xea, 0x0a, 0x09, 0x5d, 0x17, 0x7b, 0x52, 0x39, 0xe5, 0x2e, + 0xbf, 0x51, 0xfb, 0xc5, 0xce, 0xa0, 0x05, 0xce, 0x34, 0x2e, 0x58, 0x32, 0xe5, 0xb6, 0xb4, 0xb7, + 0xc5, 0x1b, 0x8c, 0x35, 0xbf, 0x5e, 0xf3, 0xc2, 0xf3, 0x3b, 0x9b, 0x4f, 0x4c, 0x49, 0x93, 0xc7, + 0xe7, 0xc7, 0x9d, 0x99, 0xad, 0xdd, 0x77, 0x77, 0x7b, 0x9d, 0x1e, 0x38, 0x78, 0x47, 0x47, 0x75, + 0xc7, 0xe3, 0xba, 0x52, 0xb2, 0x8e, 0xb9, 0x01, 0x1a, 0xba, 0x1c, 0xee, 0x3b, 0x57, 0x6a, 0x8c, + 0x0c, 0x49, 0x4d, 0xd0, 0xa0, 0xd1, 0x65, 0x30, 0x87, 0x64, 0xf8, 0xef, 0xd1, 0x6c, 0x1e, 0x3c, + 0x46, 0xa4, 0x41, 0xd0, 0xc3, 0xa5, 0x2e, 0xbf, 0xa5, 0x3e, 0xb9, 0x05, 0xfb, 0x3a, 0x3e, 0x6a, + 0x8e, 0x81, 0x40, 0xa4, 0xf7, 0xfd, 0x23, 0x59, 0x7a, 0x1f, 0x39, 0xa2, 0xbe, 0x26, 0x87, 0xcc, + 0x13, 0x3f, 0xab, 0xb6, 0x3d, 0x08, 0x78, 0x70, 0xec, 0x54, 0x9a, 0x4a, 0xbb, 0x0b, 0xbb, 0xef, + 0xdd, 0x61, 0x1d, 0x1d, 0xdb, 0xb3, 0xbe, 0xf2, 0xd8, 0xc7, 0xb6, 0x6e, 0xbc, 0xa9, 0x27, 0x79, + 0x44, 0xd2, 0xb8, 0xa0, 0x61, 0xcd, 0x13, 0xab, 0x7c, 0xcf, 0x6b, 0x9a, 0x36, 0x3d, 0x9d, 0x4e, + 0x5b, 0x86, 0x43, 0xce, 0xb4, 0xc0, 0x68, 0xf7, 0x8b, 0x3b, 0xe3, 0xcb, 0xff, 0x1d, 0xd9, 0x10, + 0x9e, 0x1a, 0x5e, 0xc5, 0xb4, 0x57, 0x46, 0x12, 0x01, 0x52, 0x41, 0x2a, 0x84, 0x12, 0x4a, 0x02, + 0x1a, 0x4a, 0xd5, 0xfd, 0x5e, 0x87, 0xae, 0x75, 0xa9, 0xa4, 0x42, 0x52, 0x21, 0x11, 0x88, 0x83, + 0xa4, 0x1a, 0x55, 0x08, 0x90, 0x8a, 0x02, 0x85, 0x50, 0x21, 0xd4, 0xa3, 0x26, 0x74, 0x7d, 0x09, + 0x3f, 0xac, 0xcf, 0x18, 0x1a, 0xc3, 0x6c, 0xba, 0x2a, 0xa1, 0x10, 0x3f, 0xf5, 0xcb, 0x7b, 0x76, + 0x6c, 0x09, 0x92, 0x2b, 0xea, 0xf3, 0xc4, 0x04, 0xb1, 0x5a, 0x20, 0x4c, 0x02, 0x08, 0x53, 0x27, + 0xf1, 0xe2, 0x33, 0x7e, 0xf5, 0x95, 0xe4, 0x79, 0xbf, 0xca, 0xdf, 0xf7, 0x16, 0xe4, 0x3c, 0xa4, + 0xfe, 0xb1, 0xf6, 0x23, 0x20, 0x4e, 0xaa, 0xac, 0x54, 0x5e, 0xc5, 0x4f, 0xf9, 0x94, 0x68, 0x3c, + 0x62, 0xc7, 0x0b, 0xbf, 0xab, 0xcc, 0xfe, 0x78, 0x8a, 0x4a, 0x5c, 0x08, 0x00, 0x0d, 0x4d, 0xa9, + 0x30, 0x90, 0x7b, 0xb2, 0xbb, 0xd6, 0xdd, 0xbf, 0x7e, 0x73, 0x66, 0x73, 0x66, 0xcb, 0x6c, 0xf6, + 0xf2, 0x80, 0x99, 0x31, 0x66, 0xb4, 0x39, 0x4a, 0x6e, 0xc3, 0xcc, 0xc5, 0x2c, 0x3d, 0x83, 0x4f, + 0x99, 0x15, 0x3c, 0xf7, 0x25, 0xf3, 0xac, 0xcf, 0xfb, 0x2f, 0xfc, 0xbb, 0xec, 0x5d, 0x3f, 0x0e, + 0x63, 0xc4, 0xb8, 0xec, 0xff, 0x53, 0xb3, 0x0c, 0xff, 0xe2, 0x34, 0xc5, 0x71, 0x03, 0x28, 0x7f, + 0xd9, 0x5d, 0x74, 0x49, 0x3b, 0xa7, 0x7c, 0x89, 0x9c, 0x4c, 0xb8, 0xf5, 0x3f, 0xc5, 0xb4, 0x0f, + 0x01, 0xa8, 0x76, 0x57, 0x8b, 0x3b, 0x4a, 0xc5, 0x9d, 0x95, 0x6d, 0xbf, 0xd9, 0xd5, 0xd7, 0x9d, + 0x4c, 0xfb, 0x82, 0x40, 0x4f, 0x3e, 0xb9, 0x7a, 0xfb, 0xd6, 0x5c, 0xc3, 0x8c, 0x60, 0xc6, 0x91, + 0xb3, 0x52, 0x4d, 0xae, 0x6d, 0xdb, 0x00, 0xe2, 0x94, 0x2f, 0xb7, 0xbd, 0xa5, 0x6b, 0xd3, 0x8d, + 0x53, 0x0f, 0x7b, 0x5d, 0xec, 0xf5, 0x5f, 0x2d, 0xdf, 0xf3, 0x51, 0xa5, 0x89, 0xc5, 0x99, 0x56, + 0x7a, 0x1f, 0xc9, 0x78, 0xfa, 0x80, 0x92, 0x4d, 0xe9, 0xaf, 0x68, 0x66, 0x55, 0x0c, 0x95, 0x87, + 0xc4, 0x05, 0xff, 0xad, 0xf2, 0xdb, 0xc3, 0xc0, 0x57, 0x6d, 0x27, 0xd5, 0x5f, 0x9f, 0x9f, 0xb6, + 0x98, 0x13, 0xa8, 0xb6, 0xc2, 0xe5, 0xa8, 0xb3, 0xfe, 0x55, 0x26, 0x8e, 0x29, 0x6f, 0x7d, 0xcc, + 0x49, 0x7a, 0xb1, 0xf9, 0xef, 0x91, 0xa5, 0x5d, 0x61, 0xef, 0x16, 0x1d, 0x2a, 0x22, 0x45, 0x83, + 0xdb, 0x50, 0x1e, 0x8c, 0xa2, 0x14, 0x94, 0xd2, 0x4a, 0xa9, 0xaa, 0xd2, 0x05, 0xcd, 0xe3, 0x1d, + 0xee, 0x19, 0xdf, 0x10, 0x99, 0xf9, 0x3b, 0x37, 0x3c, 0x5c, 0x6e, 0x7f, 0x67, 0xd2, 0x8e, 0x33, + 0x28, 0xc6, 0x88, 0x31, 0x46, 0x44, 0xc2, 0x10, 0x2a, 0x08, 0x03, 0xaf, 0x54, 0xcc, 0xca, 0xe4, + 0x11, 0xce, 0x94, 0x29, 0x6d, 0xc9, 0x5d, 0x16, 0xf3, 0x04, 0x37, 0x7d, 0xbb, 0xa5, 0x07, 0xc4, + 0xb4, 0x68, 0x41, 0xef, 0x77, 0xa9, 0x79, 0x8e, 0x79, 0xf8, 0x87, 0x83, 0x0d, 0xdf, 0xd3, 0xd5, + 0x0a, 0x59, 0x0c, 0x93, 0xea, 0x57, 0x94, 0x08, 0xb2, 0x5f, 0x1a, 0xf3, 0xce, 0x89, 0x2d, 0xfb, + 0x6a, 0xf0, 0x87, 0x4f, 0x90, 0x99, 0x12, 0xb3, 0xcf, 0x43, 0xd9, 0x1b, 0x78, 0x75, 0x93, 0x15, + 0x2b, 0x89, 0xbe, 0x18, 0x7f, 0x7e, 0x1a, 0x77, 0xd5, 0xf4, 0x73, 0x9a, 0x0a, 0xcb, 0xbc, 0xde, + 0x0d, 0x2f, 0x1a, 0x4d, 0xac, 0x71, 0x4e, 0x7b, 0xcb, 0xf4, 0x74, 0x32, 0x6d, 0x33, 0xc6, 0x84, + 0x10, 0xd0, 0x52, 0x30, 0x14, 0xcd, 0x05, 0xde, 0xf6, 0x7b, 0x53, 0x53, 0x8f, 0xb0, 0x17, 0xbc, + 0x21, 0xe8, 0x7c, 0x4e, 0xf6, 0xf5, 0x68, 0x09, 0x10, 0x98, 0xd6, 0x83, 0xbf, 0x6e, 0x54, 0xeb, + 0xef, 0x5e, 0xfb, 0xab, 0x47, 0xfb, 0xd8, 0x1b, 0x57, 0xe9, 0xbf, 0xbc, 0xe8, 0x50, 0xab, 0xb2, + 0x56, 0x45, 0x2d, 0x5a, 0x8f, 0x77, 0xcf, 0xf8, 0x06, 0x64, 0xa5, 0x6b, 0xf7, 0xa6, 0x60, 0xda, + 0x07, 0x48, 0xfb, 0xeb, 0x1f, 0xbc, 0x79, 0xb8, 0x47, 0x18, 0xb5, 0x0f, 0x8f, 0x63, 0xf8, 0xbe, + 0xd4, 0xa5, 0xf6, 0xcb, 0x37, 0x6c, 0xbb, 0xab, 0x3d, 0xfd, 0x52, 0xe6, 0xb8, 0x77, 0x79, 0xd9, + 0x37, 0xa8, 0xae, 0x27, 0xd5, 0xc0, 0xab, 0x2a, 0xb7, 0x01, 0xfa, 0x60, 0x2d, 0xde, 0xd3, 0x00, + 0xb8, 0xd3, 0x64, 0xb4, 0x2f, 0xe4, 0xcd, 0x47, 0x79, 0xd6, 0x42, 0xad, 0xb2, 0x9b, 0x5e, 0xd9, + 0xe4, 0x37, 0xff, 0x93, 0x6b, 0xb7, 0x93, 0xf6, 0x19, 0xe7, 0x35, 0x01, 0xc0, 0x85, 0x19, 0x77, + 0xe4, 0xdc, 0x59, 0x7e, 0xca, 0x32, 0xb7, 0x6f, 0xce, 0x67, 0xf3, 0xcf, 0x2f, 0xb8, 0xc0, 0x68, + 0x5a, 0xba, 0x08, 0xb7, 0xc1, 0x97, 0x03, 0xdd, 0xc1, 0x6d, 0x08, 0x43, 0x54, 0x00, 0x00, 0x07, + 0xf4, 0x49, 0x44, 0x41, 0x54, 0x8b, 0x6e, 0x31, 0x47, 0x6d, 0x29, 0x9f, 0x5d, 0x69, 0x3e, 0xf5, + 0xa1, 0xd8, 0xeb, 0x57, 0x3a, 0xe7, 0xfc, 0xd6, 0xbf, 0xef, 0x94, 0x20, 0xaf, 0xc4, 0xd0, 0x66, + 0x53, 0x8a, 0xf1, 0xbf, 0xa6, 0xf7, 0xfe, 0x87, 0x81, 0x52, 0x23, 0xca, 0xd6, 0x2b, 0xf8, 0xe6, + 0x94, 0xe5, 0xf1, 0x53, 0x7e, 0xa8, 0xb6, 0xdd, 0x5a, 0xc9, 0x3e, 0x14, 0xcc, 0xfb, 0x76, 0x82, + 0x77, 0x23, 0x80, 0x3b, 0x83, 0xe7, 0xbd, 0xce, 0xc4, 0xf3, 0xc9, 0x8c, 0xdd, 0x3c, 0xe3, 0xf2, + 0x8c, 0x7f, 0xd4, 0xc0, 0xa6, 0xd5, 0x0f, 0x37, 0x2c, 0x08, 0x32, 0x8d, 0x89, 0xd8, 0xd4, 0x4c, + 0x32, 0x9d, 0x32, 0x8d, 0x8a, 0x86, 0x50, 0x4a, 0x11, 0x11, 0x93, 0x81, 0xe3, 0xa4, 0x8b, 0x4d, + 0x57, 0x75, 0xed, 0xbc, 0xc3, 0x31, 0xaa, 0xa9, 0x13, 0x3e, 0x56, 0x1e, 0xe8, 0x36, 0x7a, 0x57, + 0xaa, 0x81, 0x4d, 0x41, 0x79, 0xcf, 0x7e, 0xec, 0xf7, 0xb7, 0xb1, 0x2b, 0x1b, 0x0a, 0xb3, 0x7a, + 0xce, 0x2c, 0xd1, 0xd6, 0x61, 0xb4, 0x9f, 0xc0, 0x52, 0x33, 0x77, 0x6f, 0xdb, 0x50, 0x95, 0xa6, + 0x6c, 0x7b, 0x9f, 0xcb, 0xa5, 0xe0, 0x34, 0xee, 0x3e, 0x3c, 0x44, 0x10, 0x1c, 0xb6, 0xc5, 0xca, + 0xed, 0x17, 0x75, 0x66, 0x57, 0x97, 0x37, 0x3e, 0xd9, 0xd2, 0x3c, 0x55, 0x4c, 0x3f, 0x53, 0x4f, + 0x5d, 0x0e, 0xe9, 0x73, 0x78, 0x7f, 0x56, 0xbf, 0xf4, 0x17, 0x13, 0xbf, 0x96, 0x96, 0x4a, 0x9c, + 0xc5, 0xa7, 0xf8, 0xd5, 0x5c, 0xe7, 0x8e, 0x8d, 0x64, 0xb7, 0x05, 0xed, 0x57, 0x3a, 0x4e, 0x42, + 0x90, 0x3f, 0x6a, 0xf1, 0x28, 0x63, 0x09, 0x7b, 0x80, 0xa7, 0xc1, 0x0d, 0x53, 0xc4, 0x9c, 0xce, + 0x3d, 0xb9, 0x0d, 0xdb, 0x1f, 0x17, 0xf3, 0x78, 0xe3, 0xbb, 0x8f, 0xa0, 0x3f, 0x42, 0x22, 0x10, + 0x4e, 0x09, 0x54, 0x35, 0x5a, 0x4e, 0x2c, 0x04, 0xeb, 0xf1, 0xbb, 0x73, 0xe2, 0xe7, 0xdd, 0xcf, + 0x2e, 0x58, 0x25, 0xef, 0xbd, 0x38, 0x2c, 0x77, 0x8a, 0x43, 0x7a, 0x07, 0x62, 0x56, 0xb7, 0x99, + 0xa4, 0x3d, 0xef, 0x8a, 0xc4, 0x89, 0x5f, 0x61, 0xbd, 0xbf, 0xe9, 0x59, 0xf7, 0x4d, 0x63, 0xfe, + 0x97, 0x98, 0x23, 0x08, 0x1e, 0x71, 0xad, 0xb5, 0x0b, 0x29, 0x09, 0xb0, 0x2f, 0xdf, 0xd5, 0x77, + 0x0e, 0xb6, 0x3e, 0xf1, 0x48, 0xcb, 0x14, 0xbf, 0xa9, 0x35, 0x93, 0x89, 0x89, 0xb2, 0x59, 0x65, + 0x8c, 0x49, 0x19, 0xa3, 0xa1, 0x65, 0x28, 0xc4, 0xb9, 0x45, 0x12, 0xae, 0x9b, 0xa7, 0xb7, 0xf4, + 0xec, 0x7e, 0x30, 0x93, 0xdf, 0x92, 0x69, 0x99, 0x69, 0x2e, 0x78, 0x0b, 0xa4, 0x2f, 0xbc, 0x5c, + 0x1d, 0xa3, 0xe8, 0xef, 0xd8, 0x99, 0x0d, 0xde, 0xcb, 0x22, 0x11, 0xb0, 0x46, 0xed, 0x17, 0x7a, + 0x76, 0x6c, 0x96, 0x66, 0x47, 0xd0, 0xbc, 0xdc, 0x75, 0x98, 0xe0, 0x23, 0x6d, 0x63, 0x9c, 0xb8, + 0x3e, 0x91, 0x65, 0x70, 0x40, 0x96, 0x33, 0x27, 0x97, 0xf4, 0xd1, 0x9b, 0x06, 0x9e, 0x55, 0xc5, + 0x0d, 0x00, 0xc8, 0x48, 0x70, 0x58, 0x07, 0x85, 0xfa, 0x23, 0x03, 0x19, 0xb9, 0x83, 0xb9, 0x33, + 0xc2, 0x96, 0xd7, 0xc1, 0x6c, 0x4c, 0xdb, 0x92, 0x84, 0xaa, 0xdf, 0x2c, 0x40, 0x31, 0xc3, 0xd2, + 0x39, 0x87, 0xf7, 0x31, 0x47, 0x58, 0xb6, 0xb0, 0x1d, 0x11, 0x8b, 0x8b, 0xed, 0xbb, 0x77, 0xed, + 0xea, 0x7a, 0x0a, 0x1d, 0xd0, 0xed, 0x01, 0x00, 0x62, 0x9a, 0x73, 0x2d, 0x55, 0xaf, 0x3b, 0xef, + 0x92, 0xc2, 0x06, 0xd0, 0xbd, 0xe7, 0xd0, 0x09, 0xdf, 0x73, 0x2f, 0xfa, 0x83, 0xbf, 0xee, 0xd3, + 0xd5, 0x17, 0x7f, 0x04, 0x80, 0xec, 0x90, 0x04, 0x0e, 0xad, 0x3d, 0x5a, 0x34, 0x20, 0x07, 0x47, + 0xd5, 0x76, 0x93, 0x79, 0xe4, 0x27, 0x8d, 0x39, 0x97, 0x87, 0x9b, 0xbe, 0x95, 0x7b, 0xe5, 0x47, + 0xa5, 0x19, 0x9f, 0x48, 0xbb, 0x0b, 0x2c, 0x2b, 0xc7, 0xb9, 0x20, 0x40, 0xd6, 0x22, 0x49, 0x47, + 0x75, 0x8a, 0x39, 0x99, 0xde, 0x97, 0xd7, 0x5b, 0x4e, 0x65, 0xc6, 0xac, 0x56, 0x37, 0x61, 0xbb, + 0x42, 0xa4, 0xad, 0xde, 0x01, 0xd5, 0x10, 0xca, 0x18, 0x8d, 0x76, 0x94, 0x96, 0x90, 0x88, 0xc7, + 0xd8, 0xb4, 0xb3, 0x4b, 0xa8, 0x14, 0x7b, 0x9e, 0x56, 0x95, 0x5d, 0x00, 0xb8, 0x93, 0xac, 0x0f, + 0x27, 0xfd, 0xfd, 0x9a, 0xf7, 0x50, 0x67, 0x22, 0x64, 0x36, 0x1b, 0xf4, 0x38, 0x89, 0x39, 0x4e, + 0xeb, 0x85, 0x20, 0x33, 0x6e, 0x2a, 0xd3, 0x18, 0x63, 0x6f, 0x95, 0xb1, 0x36, 0x23, 0x21, 0xb2, + 0x0c, 0x6e, 0x1a, 0x94, 0xab, 0x66, 0x94, 0xbb, 0x84, 0x92, 0xcb, 0x74, 0x58, 0xd0, 0xc4, 0xaa, + 0xfe, 0xc1, 0xd9, 0x86, 0x96, 0x0d, 0xfb, 0x75, 0xee, 0x0a, 0x83, 0xa5, 0xad, 0xaa, 0xe2, 0x0e, + 0x48, 0x72, 0x5e, 0xb7, 0xdd, 0x12, 0x71, 0x48, 0x19, 0x17, 0x7b, 0x08, 0x8a, 0x48, 0x10, 0x21, + 0x1e, 0x37, 0x19, 0x23, 0x32, 0x9a, 0x0a, 0xf9, 0x72, 0xb1, 0xfa, 0xbc, 0x6e, 0x49, 0xb7, 0x04, + 0x0e, 0xe7, 0x5c, 0x08, 0x01, 0x84, 0x65, 0xa9, 0x9c, 0xd9, 0x17, 0x66, 0x77, 0xa4, 0x53, 0xab, + 0xae, 0x08, 0x3b, 0x2e, 0xb1, 0x96, 0x7d, 0x5d, 0xcc, 0x79, 0x67, 0xb0, 0xe1, 0xd6, 0x60, 0xc7, + 0xdd, 0xaa, 0x98, 0x47, 0x2d, 0xfb, 0x9c, 0xf4, 0x84, 0xe7, 0xfc, 0x50, 0x2a, 0x0d, 0xa5, 0xe7, + 0x9a, 0x73, 0xae, 0x30, 0xe7, 0x5c, 0xa1, 0xc3, 0x52, 0x79, 0xed, 0x75, 0x5e, 0xcf, 0x33, 0xde, + 0xac, 0xcf, 0xba, 0x89, 0x79, 0x08, 0xb2, 0x64, 0x83, 0x08, 0xc4, 0x95, 0x65, 0xe7, 0x1c, 0x29, + 0x0a, 0x53, 0x7a, 0x77, 0xe4, 0x77, 0xd9, 0xa6, 0xdf, 0xde, 0xd2, 0x92, 0x48, 0xda, 0xae, 0x6b, + 0x90, 0x07, 0xc6, 0x65, 0x9c, 0xf5, 0xe6, 0xe4, 0x8c, 0xc1, 0xc0, 0xe4, 0x68, 0xf6, 0x9b, 0x09, + 0x73, 0xa0, 0x62, 0xea, 0xe6, 0x93, 0x48, 0x87, 0x00, 0xaa, 0xe5, 0x83, 0xb3, 0x7d, 0x81, 0x31, + 0xd4, 0xc3, 0x94, 0x94, 0x95, 0x8a, 0x9b, 0xc4, 0x4c, 0xa9, 0x02, 0x2e, 0x1c, 0xdb, 0xf2, 0xc6, + 0xec, 0x7c, 0x46, 0x0b, 0x1e, 0xa5, 0x50, 0xb7, 0xef, 0x4a, 0x3a, 0x16, 0x84, 0x56, 0x42, 0x49, + 0x09, 0x9d, 0x54, 0x2a, 0xd0, 0xb6, 0x55, 0x37, 0x1d, 0xf2, 0x77, 0x6c, 0xcd, 0x7c, 0xf8, 0x0f, + 0xc3, 0x34, 0x88, 0x91, 0xcb, 0x6b, 0x73, 0x5a, 0xa3, 0xe2, 0x88, 0x3c, 0xc1, 0x76, 0x19, 0xba, + 0x48, 0xda, 0xac, 0xd5, 0x0d, 0x11, 0x4c, 0x93, 0x32, 0xc9, 0xa4, 0x6d, 0x5a, 0x52, 0x86, 0x5c, + 0x05, 0x4e, 0xcc, 0x62, 0x42, 0x11, 0x0f, 0x19, 0x94, 0x05, 0xe9, 0x2b, 0x6d, 0xb4, 0x9f, 0x99, + 0x8b, 0xcd, 0xd2, 0x9b, 0x7e, 0x95, 0xd8, 0xb1, 0xd2, 0x9c, 0x77, 0xa5, 0x58, 0xf2, 0x39, 0xeb, + 0xe8, 0xeb, 0xd5, 0xc0, 0x46, 0xd9, 0xf3, 0xb4, 0xca, 0x6f, 0x96, 0x95, 0x89, 0xbd, 0xd9, 0x3a, + 0x77, 0x42, 0xb2, 0x1a, 0x79, 0xf3, 0xc9, 0x2c, 0x35, 0xdf, 0x37, 0xe7, 0x68, 0xe9, 0x95, 0x5e, + 0xfc, 0xaf, 0xf2, 0x8e, 0xc7, 0x83, 0xd8, 0x2c, 0x3e, 0xff, 0x46, 0xd2, 0xa6, 0x6d, 0x14, 0x4c, + 0x83, 0x73, 0xce, 0x19, 0x27, 0x4d, 0x4c, 0x31, 0x69, 0x3a, 0x4e, 0x4c, 0x6b, 0xee, 0x33, 0x83, + 0x27, 0x9d, 0x98, 0x65, 0x9b, 0x82, 0x14, 0x07, 0x07, 0x24, 0x6c, 0xf4, 0xf9, 0xdc, 0x2d, 0xe9, + 0x46, 0x31, 0xb4, 0xe1, 0x02, 0xd1, 0xe0, 0x10, 0x0b, 0x40, 0xd2, 0x26, 0x2d, 0x6d, 0x00, 0x5a, + 0x05, 0x41, 0xdd, 0x66, 0x24, 0x7f, 0x57, 0x9e, 0x0c, 0xb9, 0x2a, 0x07, 0xe4, 0x38, 0x06, 0xa0, + 0x35, 0x4c, 0xa2, 0x60, 0x3c, 0xd1, 0x35, 0x8a, 0xfa, 0x12, 0x16, 0x00, 0x55, 0x97, 0x6a, 0x26, + 0x0c, 0xad, 0x85, 0xfe, 0xfb, 0xbf, 0xc6, 0x78, 0x71, 0x2f, 0x4d, 0x63, 0xec, 0x3b, 0xa5, 0xc1, + 0x1d, 0x1a, 0x88, 0x51, 0x0f, 0x81, 0xd7, 0xe7, 0x26, 0x08, 0x41, 0x44, 0xc2, 0x30, 0xb8, 0x52, + 0x0a, 0x44, 0x82, 0x73, 0x2e, 0x58, 0x6d, 0xf2, 0x43, 0x08, 0x06, 0x68, 0xad, 0x7d, 0x95, 0x9c, + 0xe3, 0xcd, 0xf9, 0x60, 0xbe, 0xef, 0x31, 0x7a, 0xf6, 0xbf, 0x12, 0xce, 0xf7, 0x9d, 0xa9, 0xc7, + 0xb3, 0xcc, 0x12, 0x31, 0xe3, 0x5c, 0x16, 0x9f, 0x36, 0x7a, 0x21, 0x09, 0x4d, 0x30, 0x57, 0x0f, + 0x80, 0xb4, 0x0e, 0x06, 0x10, 0x96, 0x55, 0x61, 0x93, 0xff, 0xc2, 0x4f, 0x2a, 0xbd, 0x1b, 0xa5, + 0xd1, 0x5c, 0x6d, 0xbf, 0xd4, 0x6e, 0x9c, 0x67, 0x32, 0xcf, 0x34, 0xa4, 0x65, 0x09, 0xc6, 0x38, + 0x67, 0xd0, 0x50, 0xd0, 0x60, 0x8c, 0x0c, 0xc1, 0x59, 0x3c, 0x1e, 0x73, 0x14, 0x11, 0x13, 0x82, + 0x38, 0xe7, 0xb5, 0x1d, 0x2e, 0x48, 0x13, 0x41, 0x26, 0x68, 0x77, 0x55, 0xbb, 0x01, 0xe2, 0xc3, + 0x13, 0x58, 0x23, 0xcd, 0x8c, 0x03, 0xac, 0xc6, 0x78, 0x87, 0x59, 0xff, 0x08, 0x83, 0x1b, 0x1a, + 0x56, 0xff, 0xa1, 0x3e, 0x80, 0x2d, 0xa8, 0x1c, 0xf4, 0x62, 0x30, 0x73, 0x6b, 0xac, 0x4a, 0x3f, + 0x68, 0x1b, 0x52, 0x8f, 0xbd, 0xd4, 0xa2, 0xbe, 0x29, 0xc6, 0xa8, 0x9f, 0xe0, 0xa3, 0x96, 0x92, + 0x56, 0xf7, 0xaa, 0x9c, 0x13, 0x63, 0x04, 0x30, 0xa5, 0x34, 0x1f, 0x5a, 0x55, 0xc9, 0x98, 0x06, + 0x48, 0x88, 0x9a, 0xd3, 0x0a, 0x12, 0xa6, 0xe8, 0xe5, 0x67, 0x21, 0x73, 0x62, 0xbe, 0xf8, 0xea, + 0xce, 0xed, 0xeb, 0x1b, 0xb7, 0xac, 0x15, 0x0c, 0x92, 0xc7, 0xc8, 0xae, 0x13, 0x54, 0x13, 0x84, + 0xfa, 0xf5, 0x61, 0x5a, 0x45, 0x9a, 0x91, 0xaf, 0x24, 0x2a, 0x25, 0x66, 0x58, 0x2d, 0x7e, 0xfb, + 0x3b, 0x94, 0xd5, 0xd6, 0x9a, 0x22, 0x89, 0xc0, 0x32, 0xb9, 0x61, 0x70, 0x22, 0xe2, 0xa4, 0x51, + 0x4b, 0x21, 0x04, 0x34, 0xc0, 0x19, 0x31, 0xc6, 0xa1, 0x07, 0xdd, 0xf9, 0xf0, 0xb6, 0x9b, 0x5a, + 0xd7, 0x3e, 0xac, 0x24, 0xb1, 0xad, 0x8a, 0x06, 0x86, 0x10, 0x7b, 0xed, 0x76, 0x36, 0xae, 0x73, + 0x60, 0x07, 0x9d, 0x27, 0xe3, 0x55, 0xdd, 0x28, 0xea, 0x27, 0xb0, 0x65, 0x6f, 0x89, 0xcb, 0xfe, + 0xb4, 0xbb, 0xfc, 0x8d, 0xea, 0x73, 0x6c, 0xea, 0x53, 0xfd, 0x29, 0x34, 0xde, 0xd8, 0xb4, 0x56, + 0x41, 0x9c, 0xef, 0xbd, 0xf2, 0x9b, 0x31, 0x12, 0x82, 0x33, 0x46, 0x32, 0xf0, 0x9b, 0xe2, 0x21, + 0x60, 0xf5, 0xea, 0xd9, 0x8e, 0xb9, 0xc0, 0xd3, 0x41, 0xd1, 0xcf, 0x29, 0xed, 0xd7, 0xef, 0x6f, + 0x35, 0x11, 0xf7, 0x5e, 0x65, 0x26, 0x63, 0x24, 0x38, 0x4f, 0x23, 0x1d, 0xaf, 0x0a, 0xa3, 0x35, + 0xa9, 0x34, 0x71, 0xce, 0x94, 0x65, 0x72, 0x56, 0xf3, 0xf6, 0xe3, 0xf1, 0x64, 0x2f, 0x4a, 0x93, + 0xae, 0x79, 0x19, 0xad, 0xb9, 0x89, 0x9c, 0x85, 0xec, 0x50, 0xa7, 0xf2, 0x0f, 0xed, 0x03, 0xf6, + 0xcb, 0x55, 0x31, 0x66, 0x64, 0xf4, 0xe0, 0x50, 0xfc, 0x2f, 0x6a, 0xcc, 0xe3, 0x2c, 0xb4, 0xd5, + 0xe3, 0xf5, 0x87, 0x0c, 0x50, 0xc4, 0xc0, 0x41, 0x4c, 0x08, 0xae, 0xb5, 0x54, 0xaa, 0x21, 0x69, + 0x2b, 0x45, 0xa1, 0x24, 0xa5, 0x32, 0x52, 0xaa, 0xda, 0xd2, 0x3b, 0xa5, 0x15, 0x11, 0x41, 0x4f, + 0x24, 0xc1, 0xa3, 0xa1, 0x19, 0x31, 0x02, 0x31, 0x46, 0xc4, 0x98, 0xe0, 0x8c, 0x71, 0xc6, 0x04, + 0x13, 0x82, 0x71, 0x32, 0x19, 0x67, 0x8c, 0x40, 0x50, 0xba, 0x96, 0x58, 0x33, 0xd4, 0xaa, 0xc7, + 0x5d, 0x2a, 0x56, 0xb7, 0xab, 0x00, 0x9f, 0x28, 0xda, 0xef, 0x00, 0x78, 0x7b, 0xc8, 0x44, 0xf1, + 0xfe, 0x44, 0x17, 0xa4, 0xd5, 0x60, 0x1d, 0x32, 0x08, 0x70, 0xa5, 0x35, 0x23, 0xe2, 0x8c, 0x69, + 0x48, 0xa5, 0x98, 0xd4, 0xa4, 0xf5, 0x90, 0xa3, 0xd7, 0xb5, 0x06, 0x30, 0xe1, 0x04, 0x0f, 0x81, + 0x88, 0x31, 0x22, 0x80, 0x33, 0x02, 0x23, 0xc1, 0x18, 0x88, 0xf8, 0x60, 0x4e, 0xbb, 0x1a, 0x72, + 0xdb, 0x87, 0xd2, 0x1e, 0xa3, 0x7f, 0x1a, 0xc4, 0x5f, 0x81, 0x46, 0x13, 0xbd, 0xa9, 0x30, 0x30, + 0x80, 0x31, 0x68, 0x4d, 0x20, 0x2e, 0xa5, 0x1e, 0x1c, 0x31, 0xd4, 0xa5, 0x1a, 0x4f, 0xbc, 0x9f, + 0x13, 0x1a, 0xfa, 0xb1, 0x20, 0x22, 0x30, 0x22, 0x4d, 0xf5, 0x71, 0x0e, 0x35, 0xc9, 0xea, 0xfa, + 0x80, 0xa8, 0x2f, 0x27, 0xa5, 0x35, 0x46, 0x72, 0x21, 0x31, 0xb8, 0x6c, 0x12, 0x00, 0x69, 0x75, + 0x48, 0xbc, 0xd5, 0x48, 0x1f, 0xa0, 0xc7, 0xa0, 0xfb, 0xe4, 0x65, 0xfe, 0x5e, 0xd4, 0x57, 0x93, + 0xd3, 0x12, 0x63, 0x53, 0xe1, 0xef, 0x39, 0x09, 0xff, 0xb7, 0x79, 0xad, 0xba, 0x9d, 0x77, 0xc6, + 0x58, 0x65, 0x3c, 0xd9, 0x21, 0x26, 0x9f, 0xd4, 0xf9, 0x73, 0xa8, 0x13, 0x21, 0xa2, 0x7e, 0x84, + 0x08, 0x87, 0x26, 0xf5, 0x55, 0x64, 0x91, 0x08, 0x93, 0x58, 0xeb, 0xb3, 0xc8, 0x2c, 0x11, 0x26, + 0xa7, 0xe0, 0x89, 0x54, 0x4f, 0x84, 0xc9, 0x47, 0xfd, 0x68, 0x78, 0x17, 0x61, 0x92, 0x52, 0x5f, + 0x46, 0x16, 0x89, 0x30, 0x29, 0xa9, 0x4f, 0x91, 0xe0, 0x89, 0x30, 0x99, 0x87, 0xb9, 0x11, 0x22, + 0x4c, 0x3a, 0xea, 0x0f, 0xee, 0xfe, 0x16, 0x35, 0x80, 0x08, 0x93, 0x8e, 0xfa, 0x51, 0x5c, 0x3f, + 0xc2, 0x64, 0xd6, 0xfa, 0x11, 0x22, 0x4c, 0x52, 0xc1, 0x13, 0x8d, 0x73, 0x23, 0x4c, 0x3a, 0xea, + 0x0f, 0x26, 0x32, 0x50, 0x64, 0x97, 0x08, 0x93, 0x8d, 0xfa, 0xf5, 0x0d, 0x20, 0x42, 0x84, 0x68, + 0x98, 0x1b, 0x21, 0xc2, 0xa1, 0xee, 0xf5, 0x23, 0xad, 0x1f, 0x61, 0x32, 0x6b, 0xfd, 0x88, 0xf9, + 0x11, 0x26, 0x01, 0xd8, 0x6b, 0xbc, 0x7e, 0x44, 0xfc, 0x08, 0x93, 0xd0, 0xeb, 0xab, 0x68, 0x36, + 0x37, 0xc2, 0x64, 0xd6, 0xfa, 0x51, 0xd2, 0x72, 0x84, 0x49, 0xaa, 0xf5, 0x23, 0x44, 0x98, 0xa4, + 0x5e, 0x3f, 0x42, 0x84, 0xc9, 0xaa, 0xf5, 0x23, 0xb3, 0x44, 0x88, 0xbc, 0x7e, 0x84, 0x08, 0x93, + 0x48, 0xeb, 0x47, 0xfc, 0x8f, 0x10, 0x79, 0xfd, 0x08, 0x11, 0x22, 0xea, 0x47, 0x88, 0x70, 0x08, + 0x53, 0x3f, 0x8a, 0xe8, 0x47, 0x98, 0xd4, 0x5a, 0x3f, 0x42, 0x84, 0xc8, 0xeb, 0x47, 0x88, 0x10, + 0x69, 0xfd, 0x08, 0x11, 0x22, 0xea, 0x47, 0x88, 0x70, 0x68, 0x6a, 0xfd, 0x88, 0xff, 0x11, 0x22, + 0xaf, 0x1f, 0x21, 0xc2, 0xe4, 0xa0, 0x7e, 0xb4, 0xf1, 0x60, 0x84, 0xc8, 0xeb, 0x47, 0x88, 0x10, + 0x51, 0x3f, 0x42, 0x84, 0x49, 0x42, 0xfd, 0x88, 0xff, 0x11, 0x26, 0x9f, 0xd6, 0x57, 0x40, 0x94, + 0xaf, 0x1f, 0x21, 0x12, 0x3c, 0x11, 0x22, 0x44, 0x82, 0x27, 0x42, 0x84, 0xc8, 0xeb, 0x47, 0x88, + 0x70, 0xe8, 0x51, 0x3f, 0x4a, 0x5f, 0x8b, 0x10, 0x79, 0xfd, 0x08, 0x11, 0x0e, 0x6d, 0xd0, 0x67, + 0xde, 0x36, 0xf2, 0x4f, 0x43, 0x43, 0x43, 0x64, 0x91, 0x08, 0x87, 0x30, 0xb2, 0xd9, 0xec, 0xd8, + 0x5e, 0xbf, 0xfe, 0x83, 0x08, 0x11, 0x0e, 0x6d, 0xb0, 0xc8, 0x04, 0x11, 0x22, 0xea, 0x47, 0x88, + 0x30, 0x89, 0xf0, 0xff, 0x01, 0xff, 0x06, 0x5d, 0x67, 0xc8, 0xbc, 0x24, 0x9a, 0x00, 0x00, 0x00, + 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; +} \ No newline at end of file diff --git a/SortByInternalDifficulty/MU3.CustomUI/patch_MU3UIImageChanger.cs b/SortByInternalDifficulty/MU3.CustomUI/patch_MU3UIImageChanger.cs new file mode 100644 index 0000000..7d6d93e --- /dev/null +++ b/SortByInternalDifficulty/MU3.CustomUI/patch_MU3UIImageChanger.cs @@ -0,0 +1,12 @@ +using UnityEngine; + +namespace MU3.CustomUI; + +class patch_MU3UIImageChanger: MU3UIImageChanger { + private Sprite[] _sprites; + + public Sprite[] sprites { + get { return _sprites; } + set { _sprites = value; } + } +} \ No newline at end of file diff --git a/SortByInternalDifficulty/MU3.DB/patch_MusicSort1ID.cs b/SortByInternalDifficulty/MU3.DB/patch_MusicSort1ID.cs new file mode 100644 index 0000000..4ad2c0d --- /dev/null +++ b/SortByInternalDifficulty/MU3.DB/patch_MusicSort1ID.cs @@ -0,0 +1,18 @@ +using MonoMod; + +namespace MU3.DB; + +[MonoModEnumReplace] +public enum patch_MusicSort1ID { + Genre = 0, + All = 1, + Character = 2, + Version = 3, + Level = 4, + Name = 5, + Attribute = 6, + InternalLevel = 7, + Begin = 0, + End = 8, + Invalid = -1 +} diff --git a/SortByInternalDifficulty/MU3.DB/patch_MusicSort1IDEnum.cs b/SortByInternalDifficulty/MU3.DB/patch_MusicSort1IDEnum.cs new file mode 100644 index 0000000..fc4d305 --- /dev/null +++ b/SortByInternalDifficulty/MU3.DB/patch_MusicSort1IDEnum.cs @@ -0,0 +1,40 @@ +using MonoMod; + +namespace MU3.DB; + +[MonoModPatch("global::MU3.DB.MusicSort1IDEnum")] +public static class patch_MusicSort1IDEnum { + private static MusicSort1TableRecord[] records; + public static patch_MusicSort1ID[] List; + public static extern bool orig_loadFromFile(string filename); + + public static bool loadFromFile(string filename) { + var rv = orig_loadFromFile(filename); + records = new[] { + new MusicSort1TableRecord(0, "Genre", "ジャンル", 0), + new MusicSort1TableRecord(1, "All", "全曲", 0), + new MusicSort1TableRecord(2, "Character", "キャラクター", 0), + new MusicSort1TableRecord(3, "Version", "バージョン", 0), + new MusicSort1TableRecord(4, "Level", "譜面レベル", 0), + new MusicSort1TableRecord(5, "Name", "曲名", 0), + new MusicSort1TableRecord(6, "Attribute", "属性", 0), + new MusicSort1TableRecord(7, "InternalLevel", "譜面定数", 0) + }; + List = new[] { + patch_MusicSort1ID.Genre, + patch_MusicSort1ID.All, + patch_MusicSort1ID.Character, + patch_MusicSort1ID.Version, + patch_MusicSort1ID.Level, + patch_MusicSort1ID.Name, + patch_MusicSort1ID.Attribute, + patch_MusicSort1ID.InternalLevel + }; + return rv; + } + + // Not exactly sure why this is necessary + public static bool isValid(this patch_MusicSort1ID self) { + return self >= patch_MusicSort1ID.Genre && self < patch_MusicSort1ID.End; + } +} diff --git a/SortByInternalDifficulty/MU3.DB/patch_MusicSort2IDEnum.cs b/SortByInternalDifficulty/MU3.DB/patch_MusicSort2IDEnum.cs new file mode 100644 index 0000000..ee40959 --- /dev/null +++ b/SortByInternalDifficulty/MU3.DB/patch_MusicSort2IDEnum.cs @@ -0,0 +1,15 @@ +using MonoMod; + +namespace MU3.DB; + +[MonoModPatch("global::MU3.DB.MusicSort2IDEnum")] +public static class patch_MusicSort2IDEnum { + private static MusicSort2TableRecord[] records; + public static extern bool orig_loadFromFile(string filename); + + public static bool loadFromFile(string filename) { + var rv = orig_loadFromFile(filename); + records[4].Name = "譜面定数"; + return rv; + } +} diff --git a/SortByInternalDifficulty/MU3.ViewData/patch_MusicSelectViewDataList.cs b/SortByInternalDifficulty/MU3.ViewData/patch_MusicSelectViewDataList.cs new file mode 100644 index 0000000..69d1fdf --- /dev/null +++ b/SortByInternalDifficulty/MU3.ViewData/patch_MusicSelectViewDataList.cs @@ -0,0 +1,128 @@ +using MU3.DataStudio; +using MU3.DB; +using MU3.Util; +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Text; + +namespace MU3.ViewData; + +class patch_MusicSelectViewDataList: MusicSelectViewDataList { + private delegate int CompareProc(MusicSelectViewData d1, MusicSelectViewData d2, bool forSort1); + private delegate string GetCategoryNameProc(MusicSelectViewData d); + private MusicSort1ID __sort1; + private CompareProc _compareProc1; + private CompareProc _compareProc2; + private GetCategoryNameProc _getCategoryNameProc; + + private extern void orig_set__sort1(MusicSort1ID value); + private extern void orig_set__sort2(MusicSort2ID value); + + private void set__sort1(MusicSort1ID value) { + if(value == (MusicSort1ID)patch_MusicSort1ID.InternalLevel) { + __sort1 = value; + _compareProc1 = compareByInternalLevel; + _getCategoryNameProc = getCategoryNameByInternalLevel; + } else { + orig_set__sort1(value); + } + } + + private void set__sort2(MusicSort2ID value) { + orig_set__sort2(value); + if(value == MusicSort2ID.Level) { + _compareProc2 = compareByInternalLevel; + } + } + + private PropertyInfo reMasterPi = null; + private bool isReMaster(Data.MusicData d) { + // Fall back for pre-Act3 + if(reMasterPi == null) { + return false; + } + return (bool)reMasterPi.GetValue(d, null); + } + + public extern void orig_create(GameViewData gameViewData, ChapterSelection chapterSelection, FumenDifficulty difficulty, MusicSort1ID sort1, MusicSort2ID sort2); + + public new void create(GameViewData gameViewData, ChapterSelection chapterSelection, FumenDifficulty difficulty, MusicSort1ID sort1, MusicSort2ID sort2) { + reMasterPi = typeof(Data.MusicData).GetProperty("isReMaster"); + orig_create(gameViewData, chapterSelection, difficulty, sort1, sort2); + } + + private string getMetaGategoryName(MusicSelectViewData d) { + var remas = isReMaster(d.musicViewData.data); + if(d.musicViewData.data.isBonusTrack) { + return "ボーナストラック"; + } + if(d.musicViewData.data.isLunatic && remas && __sort1 != MusicSort1ID.Level && __sort1 != (MusicSort1ID)patch_MusicSort1ID.InternalLevel) { + return "Re:MASTER"; + } + return d.musicViewData.data.isLunatic && !remas ? "LUNATIC" : null; + } + + private string getCategoryNameByInternalLevel(MusicSelectViewData d) { + StringBuilder stringBuilder = Singleton.instance.getStringBuilder(); + Data.FumenData fumenData = ((d.musicViewData.data == null) ? null : d.musicViewData.data.fumenData[(int)d.difficulty]); + stringBuilder.Append("LEVEL "); + stringBuilder.AppendFormat("{0}", (fumenData == null) ? (-1) : (fumenData.fumenConst.ToString("0.0"))); + return stringBuilder.ToString(); + } + + private int getSortKeyByInternalLevel(MusicSelectViewData d) { + return (int)Math.Round(d.musicViewData.data.fumenData[(int)d.difficulty].fumenConst * 10.0); + } + + private int compareByInternalLevel(MusicSelectViewData d1, MusicSelectViewData d2, bool forSort1) { + return getSortKeyByInternalLevel(d1) - getSortKeyByInternalLevel(d2); + } + + private extern bool orig_isDifferentMyListSet(patch_MusicSort1ID oldSort1, patch_MusicSort1ID nowSort1); + private bool isDifferentMyListSet(patch_MusicSort1ID oldSort1, patch_MusicSort1ID nowSort1) { + if(oldSort1 == patch_MusicSort1ID.InternalLevel && nowSort1 != patch_MusicSort1ID.InternalLevel) { + return true; + } + if(oldSort1 != patch_MusicSort1ID.InternalLevel && nowSort1 == patch_MusicSort1ID.InternalLevel) { + return true; + } + return orig_isDifferentMyListSet(oldSort1, nowSort1); + } + + private extern int orig_createMyListMusicDataAllDifficulty(List list, HashSet idList, MU3.Data.MusicData musicData, MusicSort1ID sort1, int initOrder); + private int createMyListMusicDataAllDifficulty(List list, HashSet idList, MU3.Data.MusicData musicData, MusicSort1ID sort1, int initOrder) { + if(sort1 == (MusicSort1ID)patch_MusicSort1ID.InternalLevel) { + sort1 = MusicSort1ID.Level; + } + return orig_createMyListMusicDataAllDifficulty(list, idList, musicData, sort1, initOrder); + } + + private extern int orig_getMetaSortKey(MusicSelectViewData d, bool forCategorySort); + private int getMetaSortKey(MusicSelectViewData d, bool forCategorySort) { + if(reMasterPi == null) { + return orig_getMetaSortKey(d, forCategorySort); + } + var remas = isReMaster(d.musicViewData.data); + + if(forCategorySort) { + if(d.musicViewData.data.isBonusTrack) { + return 3; + } + if(d.musicViewData.data.isLunatic && remas && __sort1 != MusicSort1ID.Level && __sort1 != (MusicSort1ID)patch_MusicSort1ID.InternalLevel) { + return 1; + } + if(d.musicViewData.data.isLunatic && !remas) { + return 2; + } + } else { + if(d.musicViewData.data.isLunatic && remas && __sort1 != MusicSort1ID.Level && __sort1 != (MusicSort1ID)patch_MusicSort1ID.InternalLevel) { + return 1; + } + if(d.musicViewData.data.isLunatic && !remas) { + return 2; + } + } + return 0; + } +} \ No newline at end of file diff --git a/SortByInternalDifficulty/MU3/patch_Scene_32_PrePlayMusic_MusicSelect.cs b/SortByInternalDifficulty/MU3/patch_Scene_32_PrePlayMusic_MusicSelect.cs new file mode 100644 index 0000000..f980d5b --- /dev/null +++ b/SortByInternalDifficulty/MU3/patch_Scene_32_PrePlayMusic_MusicSelect.cs @@ -0,0 +1,37 @@ +using MU3.DB; + +namespace MU3; + +public class patch_Scene_32_PrePlayMusic_MusicSelect: Scene_32_PrePlayMusic_MusicSelect { + private static patch_MusicSort1ID[] _sort1SettingList; + private static MusicSort2ID[] _sort2SettingList; + private extern void orig_Awake(); + + private new void Awake() { + _sort1SettingList = new[] { + patch_MusicSort1ID.Genre, + patch_MusicSort1ID.All, + patch_MusicSort1ID.Character, + patch_MusicSort1ID.Version, + patch_MusicSort1ID.Level, + patch_MusicSort1ID.Name, + patch_MusicSort1ID.Attribute, + patch_MusicSort1ID.InternalLevel + }; + + _sort2SettingList = new[] { + MusicSort2ID.Recommend, + MusicSort2ID.BattlePoint, + MusicSort2ID.TechnicalScore, + MusicSort2ID.BossLevel, + MusicSort2ID.Name, + MusicSort2ID.AddDate, + MusicSort2ID.Chapter, + MusicSort2ID.Level + //, MusicSort2ID.Lamp + }; + + orig_Awake(); + } + +} diff --git a/SortByInternalDifficulty/MU3/patch_UISortButton.cs b/SortByInternalDifficulty/MU3/patch_UISortButton.cs new file mode 100644 index 0000000..c57e332 --- /dev/null +++ b/SortByInternalDifficulty/MU3/patch_UISortButton.cs @@ -0,0 +1,27 @@ +using MU3.CustomUI; +using UnityEngine; + +namespace MU3; + +class patch_UISortButton: UISortButton { + private MU3UIImageChanger _selectPreviewImageChanger; + + protected override void Awake() { + base.Awake(); + + var changer = (patch_MU3UIImageChanger)_selectPreviewImageChanger; + var n = changer.sprites.Length; + var sprites = new Sprite[n + 1]; + + for(int i = 0; i < n; ++i) { + sprites[i] = changer.sprites[i]; + } + + Texture2D tex = new Texture2D(2, 2); + tex.LoadImage(InternalSortPreview.Bytes); + + sprites[n] = Sprite.Create(tex, new Rect(0, 0, 254, 121), sprites[0].pivot); + + changer.sprites = sprites; + } +} diff --git a/SortByInternalDifficulty/SortByInternalDifficulty.csproj b/SortByInternalDifficulty/SortByInternalDifficulty.csproj new file mode 100644 index 0000000..b6bd984 --- /dev/null +++ b/SortByInternalDifficulty/SortByInternalDifficulty.csproj @@ -0,0 +1,7 @@ + + + Assembly-CSharp.SortByInternalDifficulty.mm + Makes internal levels not internal + + + \ No newline at end of file diff --git a/UnlockAllMusic/MU3.DataStudio/patch_MusicData.cs b/UnlockAllMusic/MU3.DataStudio/patch_MusicData.cs new file mode 100644 index 0000000..8f15637 --- /dev/null +++ b/UnlockAllMusic/MU3.DataStudio/patch_MusicData.cs @@ -0,0 +1,24 @@ +namespace MU3.DataStudio; + +class patch_MusicData: MusicData { + public new int CostToUnlock { + get { + return 0; + } + private set { /* nop */ } + } + + public new bool PossessingFromTheBeginning { + get { + return true; + } + private set { /* nop */ } + } + + public new bool IsLockedAtTheBeginning { + get { + return false; + } + private set { /* nop */ } + } +} diff --git a/UnlockAllMusic/MU3/patch_Scene_25_Login.cs b/UnlockAllMusic/MU3/patch_Scene_25_Login.cs new file mode 100644 index 0000000..b180b27 --- /dev/null +++ b/UnlockAllMusic/MU3/patch_Scene_25_Login.cs @@ -0,0 +1,20 @@ +using MU3.User; +using MU3.Util; + +namespace MU3; + +class patch_Scene_25_Login: Scene_25_Login { + private enum State { + GetUserRatinglog = 24 + } + + private Mode mode_; + + private void GetUserActivityMusic_Init() { + // nop + } + private void GetUserActivityMusic_Proc() { + Singleton.instance.updateUserActivityInLoginEnd(); + mode_.set(State.GetUserRatinglog); + } +} diff --git a/UnlockAllMusic/UnlockAllMusic.csproj b/UnlockAllMusic/UnlockAllMusic.csproj new file mode 100644 index 0000000..eaab2d5 --- /dev/null +++ b/UnlockAllMusic/UnlockAllMusic.csproj @@ -0,0 +1,7 @@ + + + Assembly-CSharp.UnlockAllMusic.mm + Unlock all music + + + \ No newline at end of file diff --git a/UnlockAndSetJewelBoostNine/MU3/patch_Scene_32_PrePlayMusic_Confirm.cs b/UnlockAndSetJewelBoostNine/MU3/patch_Scene_32_PrePlayMusic_Confirm.cs index ed2b777..ace6358 100644 --- a/UnlockAndSetJewelBoostNine/MU3/patch_Scene_32_PrePlayMusic_Confirm.cs +++ b/UnlockAndSetJewelBoostNine/MU3/patch_Scene_32_PrePlayMusic_Confirm.cs @@ -1,15 +1,10 @@ -#pragma warning disable CS0626 -#pragma warning disable CS0649 -#pragma warning disable IDE1006 -#pragma warning disable CS0414 - -using MU3.DB; +using MU3.DB; using MU3.User; using MU3.Util; namespace MU3; -public class patch_Scene_32_PrePlayMusic_Confirm: Scene_32_PrePlayMusic_Confirm { +class patch_Scene_32_PrePlayMusic_Confirm: Scene_32_PrePlayMusic_Confirm { private extern void orig_createSelector(); private JewelBoostID getMaxBoost() { return JewelBoostID.Nine; diff --git a/UnlockAndSetJewelBoostNine/UnlockAndSetJewelBoostNine.csproj b/UnlockAndSetJewelBoostNine/UnlockAndSetJewelBoostNine.csproj new file mode 100644 index 0000000..629f905 --- /dev/null +++ b/UnlockAndSetJewelBoostNine/UnlockAndSetJewelBoostNine.csproj @@ -0,0 +1,7 @@ + + + Assembly-CSharp.UnlockAndSetJewelBoostNine.mm + Unlock and set the jewel boost to max + + + diff --git a/UnlockFrameRate/MU3.Notes/patch_NotesManager.cs b/UnlockFrameRate/MU3.Notes/patch_NotesManager.cs new file mode 100644 index 0000000..be2973d --- /dev/null +++ b/UnlockFrameRate/MU3.Notes/patch_NotesManager.cs @@ -0,0 +1,26 @@ +using MU3.Game; +using MU3.Sys; +using MU3.Util; + +namespace MU3.Notes; + +class patch_NotesManager: NotesManager { + private float _frame; + private float _frameReal; + private bool _altMode; + public extern void orig_initialize(SessionInfo sessionInfo); + public new void initialize(SessionInfo sessionInfo) { + orig_initialize(sessionInfo); + + var cfg = (patch_Config)Singleton.instance.config; + _altMode = cfg.isVsync || (cfg.framerate != 60); + } + private extern void orig_progressFrameAndFrameReal(); + private void progressFrameAndFrameReal() { + if(_altMode) { + _frame = _frameReal; + } else { + orig_progressFrameAndFrameReal(); + } + } +} diff --git a/UnlockFrameRate/MU3.Sys/patch_Config.cs b/UnlockFrameRate/MU3.Sys/patch_Config.cs new file mode 100644 index 0000000..d7ae92c --- /dev/null +++ b/UnlockFrameRate/MU3.Sys/patch_Config.cs @@ -0,0 +1,38 @@ +using UnityEngine; + +namespace MU3.Sys; + +class patch_Config: Config { + public extern void orig_initialize(); + public int framerate { get; private set; } + public bool isVsync { get; private set; } + + public new void initialize() { + orig_initialize(); + + using IniFile iniFile = new("mu3.ini"); + + framerate = iniFile.getIntValue("Video", "Framerate", 60); + isVsync = iniFile.getValue("Video", "VSync", false); + + if(framerate == 0) { + framerate = -1; + } + + if(isVsync) { + QualitySettings.vSyncCount = 1; + framerate = -1; + Debug.Log("[UnlockFrameRate] VSync on"); + } else { + Application.targetFrameRate = framerate; + QualitySettings.vSyncCount = 0; + if(framerate == 60) { + Debug.Log("[UnlockFrameRate] Framerate locked to 60 (vanilla)"); + } else if(framerate == -1) { + Debug.Log("[UnlockFrameRate] Framerate unlocked"); + } else { + Debug.Log("[UnlockFrameRate] Framerate locked to " + framerate); + } + } + } +} diff --git a/UnlockFrameRate/MU3.Sys/patch_Time.cs b/UnlockFrameRate/MU3.Sys/patch_Time.cs new file mode 100644 index 0000000..fbf7992 --- /dev/null +++ b/UnlockFrameRate/MU3.Sys/patch_Time.cs @@ -0,0 +1,29 @@ +using MU3.Util; + +namespace MU3.Sys; + +class patch_Time: Time { + private static bool _init; + private static float _deltaTime; + private static float _adjustAccumlation; + private static float _realtimeSinceStartup; + private static bool _altMode; + + public extern static void orig_update(); + public static new void update() { + if(!_init) { + _deltaTime = UnityEngine.Time.deltaTime; + _adjustAccumlation = 0f; + _realtimeSinceStartup = UnityEngine.Time.realtimeSinceStartup; + var cfg = (patch_Config)Singleton.instance.config; + _altMode = cfg.isVsync || (cfg.framerate != 60); + _init = true; + } + if(_altMode) { + _deltaTime = UnityEngine.Time.deltaTime; + _realtimeSinceStartup = UnityEngine.Time.realtimeSinceStartup; + } else { + orig_update(); + } + } +} diff --git a/UnlockFrameRate/UnlockFrameRate.csproj b/UnlockFrameRate/UnlockFrameRate.csproj new file mode 100644 index 0000000..614816c --- /dev/null +++ b/UnlockFrameRate/UnlockFrameRate.csproj @@ -0,0 +1,7 @@ + + + Assembly-CSharp.UnlockFramerate.mm + Unlock framerate + + + \ No newline at end of file diff --git a/UnlockGameEvents/MU3.Client/patch_PacketGetGameEvent.cs b/UnlockGameEvents/MU3.Client/patch_PacketGetGameEvent.cs new file mode 100644 index 0000000..e348ecd --- /dev/null +++ b/UnlockGameEvents/MU3.Client/patch_PacketGetGameEvent.cs @@ -0,0 +1,35 @@ +using MU3.Data; +using MU3.Operation; +using MU3.Util; +using System; +using System.Linq; + +namespace MU3.Client; + +class patch_PacketGetGameEvent: Packet { + public Operation.GameEvent _gameEvent; + public Operation.GameEvent gameEvent => _gameEvent; + public extern State orig_proc(); + public override State proc() { + State state = orig_proc(); + if(state == State.Done) { + DateTime endDate = DateTime.Parse("2099-01-01 05:00:00.0"); + _gameEvent ??= new Operation.GameEvent(); + foreach(EventData eventData in SingletonStateMachine.instance.allEventData) { + IdPeriod idPeriod = Enumerable.FirstOrDefault(_gameEvent.list, (IdPeriod e) => e.id == eventData.id); + if(idPeriod != null) { + if(idPeriod.period.endDate < CustomDateTime.Now) { + idPeriod.period.endDate = endDate; + } + } else { + idPeriod = new(); + idPeriod.id = eventData.id; + idPeriod.period = new Period(DateTime.MinValue.Date, endDate); + _gameEvent.list.Add(idPeriod); + _gameEvent.lastUpdate = CustomDateTime.Now; + } + } + } + return state; + } +} diff --git a/UnlockGameEvents/UnlockGameEvents.csproj b/UnlockGameEvents/UnlockGameEvents.csproj new file mode 100644 index 0000000..937ec81 --- /dev/null +++ b/UnlockGameEvents/UnlockGameEvents.csproj @@ -0,0 +1,7 @@ + + + Assembly-CSharp.UnlockGameEvents.mm + Unlock game events + + + \ No newline at end of file diff --git a/UnlockMasterDifficulty/MU3.ViewData/patch_MusicViewData.cs b/UnlockMasterDifficulty/MU3.ViewData/patch_MusicViewData.cs new file mode 100644 index 0000000..b05c744 --- /dev/null +++ b/UnlockMasterDifficulty/MU3.ViewData/patch_MusicViewData.cs @@ -0,0 +1,13 @@ +using MonoMod; + +namespace MU3.ViewData; + +[MonoModPatch("global::MU3.ViewData.MusicViewData")] +public class patch_MusicViewData { + public bool isMasterLock { + get { + return false; + } + set { /* nop */ } + } +} diff --git a/UnlockMasterDifficulty/UnlockMasterDifficulty.csproj b/UnlockMasterDifficulty/UnlockMasterDifficulty.csproj new file mode 100644 index 0000000..0f8f86a --- /dev/null +++ b/UnlockMasterDifficulty/UnlockMasterDifficulty.csproj @@ -0,0 +1,7 @@ + + + Assembly-CSharp.UnlockMasterDifficulty.mm + Unlock master difficulty + + + \ No newline at end of file diff --git a/UnlockMemoryChapters/MU3.Client/patch_PacketGetUserMemoryChapter.cs b/UnlockMemoryChapters/MU3.Client/patch_PacketGetUserMemoryChapter.cs new file mode 100644 index 0000000..59f9f26 --- /dev/null +++ b/UnlockMemoryChapters/MU3.Client/patch_PacketGetUserMemoryChapter.cs @@ -0,0 +1,32 @@ +using MU3.Data; +using MU3.User; +using MU3.Util; +using System.Collections.Generic; +using System.Linq; + +namespace MU3.Client; + +class patch_PacketGetUserMemoryChapter: Packet { + private Dictionary userMemoryChapter_; + public override State proc() { + switch(procImpl()) { + case State.Done: { + GetUserMemoryChapterResponse response_ = (query_ as GetUserMemoryChapter).response_; + foreach(MemoryChapterData memoryChapterData in SingletonStateMachine.instance.allMemoryChapterData) { + UserMemoryChapter userMemoryChapter = Enumerable.FirstOrDefault(response_.userMemoryChapterList, (UserMemoryChapter c) => c.chapterId == memoryChapterData.id); + if(userMemoryChapter != null) { + User.UserMemoryChapter userMemoryChapter2 = new User.UserMemoryChapter(); + userMemoryChapter2.copyFrom(userMemoryChapter); + userMemoryChapter_[userMemoryChapter2.ChapterId] = userMemoryChapter2; + } else { + User.UserMemoryChapter userMemoryChapter3 = new User.UserMemoryChapter(memoryChapterData.id); + userMemoryChapter_[userMemoryChapter3.ChapterId] = userMemoryChapter3; + } + } + Singleton.instance.UserMemoryChapter = userMemoryChapter_; + break; + } + } + return state_; + } +} diff --git a/UnlockMemoryChapters/UnlockMemoryChapters.csproj b/UnlockMemoryChapters/UnlockMemoryChapters.csproj new file mode 100644 index 0000000..3851115 --- /dev/null +++ b/UnlockMemoryChapters/UnlockMemoryChapters.csproj @@ -0,0 +1,7 @@ + + + Assembly-CSharp.UnlockMemoryChapters.mm + Unlock memory chapters + + + \ No newline at end of file