From b3981eceb20abc30edaeae613ca76b1699ea4804 Mon Sep 17 00:00:00 2001 From: changyunjia <905640960@qq.com> Date: Thu, 9 Jul 2026 10:28:18 +0800 Subject: [PATCH] =?UTF-8?q?sdk=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 + Assembly-CSharp.csproj | 1041 +++++++++++++++ Assets/Scenes.meta | 8 + Assets/Scenes/SampleScene.unity | 361 ++++++ Assets/Scenes/SampleScene.unity.meta | 7 + Assets/Scripts.meta | 8 + Assets/Scripts/.DS_Store | Bin 0 -> 6148 bytes Assets/Scripts/BrigdeIOS.cs | 49 + Assets/Scripts/BrigdeIOS.cs.meta | 11 + Assets/Scripts/ConfigSystem_sdk.cs | 292 +++++ Assets/Scripts/ConfigSystem_sdk.cs.meta | 3 + Assets/Scripts/LoginModel_sdk.cs | 29 + Assets/Scripts/LoginModel_sdk.cs.meta | 11 + Assets/Scripts/LoginSystem_sdk.cs | 121 ++ Assets/Scripts/LoginSystem_sdk.cs.meta | 11 + Assets/Scripts/NetworkKit_sdk.cs | 663 ++++++++++ Assets/Scripts/NetworkKit_sdk.cs.meta | 11 + Assets/Scripts/Newtonsoft.Json.dll | Bin 0 -> 360960 bytes Assets/Scripts/Newtonsoft.Json.dll.meta | 33 + Assets/Scripts/Plugins.meta | 8 + Assets/Scripts/Plugins/CustomView.h | 21 + Assets/Scripts/Plugins/CustomView.h.meta | 27 + Assets/Scripts/Plugins/CustomView.m | 162 +++ Assets/Scripts/Plugins/CustomView.m.meta | 42 + Assets/Scripts/Plugins/H5View.h | 32 + Assets/Scripts/Plugins/H5View.h.meta | 27 + Assets/Scripts/Plugins/H5View.m | 1122 +++++++++++++++++ Assets/Scripts/Plugins/H5View.m.meta | 42 + Assets/Scripts/Plugins/UnityTouch.mm | 200 +++ Assets/Scripts/Plugins/UnityTouch.mm.meta | 42 + Assets/Scripts/Plugins/pluginIOs.mm | 42 + Assets/Scripts/Plugins/pluginIOs.mm.meta | 42 + Assets/Scripts/SdkManager.cs | 374 ++++++ Assets/Scripts/SdkManager.cs.meta | 11 + Packages/manifest.json | 41 + Packages/packages-lock.json | 382 ++++++ ProjectSettings/AudioManager.asset | 19 + ProjectSettings/ClusterInputManager.asset | 6 + ProjectSettings/DynamicsManager.asset | 34 + ProjectSettings/EditorBuildSettings.asset | 8 + ProjectSettings/EditorSettings.asset | 30 + ProjectSettings/GraphicsSettings.asset | 63 + ProjectSettings/InputManager.asset | 295 +++++ ProjectSettings/MemorySettings.asset | 35 + ProjectSettings/NavMeshAreas.asset | 91 ++ ProjectSettings/PackageManagerSettings.asset | 35 + .../Settings.json | 5 + ProjectSettings/Physics2DSettings.asset | 56 + ProjectSettings/PresetManager.asset | 7 + ProjectSettings/ProjectSettings.asset | 961 ++++++++++++++ ProjectSettings/ProjectVersion.txt | 2 + ProjectSettings/QualitySettings.asset | 234 ++++ ProjectSettings/SceneTemplateSettings.json | 121 ++ ProjectSettings/TagManager.asset | 43 + ProjectSettings/TimeManager.asset | 9 + ProjectSettings/UnityConnectSettings.asset | 36 + ProjectSettings/VFXManager.asset | 12 + ProjectSettings/VersionControlSettings.asset | 8 + ProjectSettings/XRSettings.asset | 10 + UserSettings/EditorUserSettings.asset | 29 + UserSettings/Search.settings | 1 + WebviewSdk_Unity_IOS.sln | 20 + empty_PRO.sln | 20 + 63 files changed, 7471 insertions(+) create mode 100644 .gitignore create mode 100644 Assembly-CSharp.csproj create mode 100644 Assets/Scenes.meta create mode 100644 Assets/Scenes/SampleScene.unity create mode 100644 Assets/Scenes/SampleScene.unity.meta create mode 100644 Assets/Scripts.meta create mode 100644 Assets/Scripts/.DS_Store create mode 100644 Assets/Scripts/BrigdeIOS.cs create mode 100644 Assets/Scripts/BrigdeIOS.cs.meta create mode 100644 Assets/Scripts/ConfigSystem_sdk.cs create mode 100644 Assets/Scripts/ConfigSystem_sdk.cs.meta create mode 100644 Assets/Scripts/LoginModel_sdk.cs create mode 100644 Assets/Scripts/LoginModel_sdk.cs.meta create mode 100644 Assets/Scripts/LoginSystem_sdk.cs create mode 100644 Assets/Scripts/LoginSystem_sdk.cs.meta create mode 100644 Assets/Scripts/NetworkKit_sdk.cs create mode 100644 Assets/Scripts/NetworkKit_sdk.cs.meta create mode 100644 Assets/Scripts/Newtonsoft.Json.dll create mode 100644 Assets/Scripts/Newtonsoft.Json.dll.meta create mode 100644 Assets/Scripts/Plugins.meta create mode 100644 Assets/Scripts/Plugins/CustomView.h create mode 100644 Assets/Scripts/Plugins/CustomView.h.meta create mode 100644 Assets/Scripts/Plugins/CustomView.m create mode 100644 Assets/Scripts/Plugins/CustomView.m.meta create mode 100644 Assets/Scripts/Plugins/H5View.h create mode 100644 Assets/Scripts/Plugins/H5View.h.meta create mode 100644 Assets/Scripts/Plugins/H5View.m create mode 100644 Assets/Scripts/Plugins/H5View.m.meta create mode 100644 Assets/Scripts/Plugins/UnityTouch.mm create mode 100644 Assets/Scripts/Plugins/UnityTouch.mm.meta create mode 100644 Assets/Scripts/Plugins/pluginIOs.mm create mode 100644 Assets/Scripts/Plugins/pluginIOs.mm.meta create mode 100644 Assets/Scripts/SdkManager.cs create mode 100644 Assets/Scripts/SdkManager.cs.meta create mode 100644 Packages/manifest.json create mode 100644 Packages/packages-lock.json create mode 100644 ProjectSettings/AudioManager.asset create mode 100644 ProjectSettings/ClusterInputManager.asset create mode 100644 ProjectSettings/DynamicsManager.asset create mode 100644 ProjectSettings/EditorBuildSettings.asset create mode 100644 ProjectSettings/EditorSettings.asset create mode 100644 ProjectSettings/GraphicsSettings.asset create mode 100644 ProjectSettings/InputManager.asset create mode 100644 ProjectSettings/MemorySettings.asset create mode 100644 ProjectSettings/NavMeshAreas.asset create mode 100644 ProjectSettings/PackageManagerSettings.asset create mode 100644 ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json create mode 100644 ProjectSettings/Physics2DSettings.asset create mode 100644 ProjectSettings/PresetManager.asset create mode 100644 ProjectSettings/ProjectSettings.asset create mode 100644 ProjectSettings/ProjectVersion.txt create mode 100644 ProjectSettings/QualitySettings.asset create mode 100644 ProjectSettings/SceneTemplateSettings.json create mode 100644 ProjectSettings/TagManager.asset create mode 100644 ProjectSettings/TimeManager.asset create mode 100644 ProjectSettings/UnityConnectSettings.asset create mode 100644 ProjectSettings/VFXManager.asset create mode 100644 ProjectSettings/VersionControlSettings.asset create mode 100644 ProjectSettings/XRSettings.asset create mode 100644 UserSettings/EditorUserSettings.asset create mode 100644 UserSettings/Search.settings create mode 100644 WebviewSdk_Unity_IOS.sln create mode 100644 empty_PRO.sln diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ab720f1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +/.vscode +/Library/APIUpdater +/Library +/Logs +/Temp diff --git a/Assembly-CSharp.csproj b/Assembly-CSharp.csproj new file mode 100644 index 0000000..9b8dc16 --- /dev/null +++ b/Assembly-CSharp.csproj @@ -0,0 +1,1041 @@ + + + + Temp\obj\$(Configuration)\$(MSBuildProjectName) + $(BaseIntermediateOutputPath) + + + + + + + false + false + false + 9.0 + Debug;Release + Debug + AnyCPU + + Library + Properties + Assembly-CSharp + netstandard2.1 + . + + + true + full + false + Temp\bin\Debug\ + UNITY_2022_3_62;UNITY_2022_3;UNITY_2022;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2019_1_OR_NEWER;UNITY_2019_2_OR_NEWER;UNITY_2019_3_OR_NEWER;UNITY_2019_4_OR_NEWER;UNITY_2020_1_OR_NEWER;UNITY_2020_2_OR_NEWER;UNITY_2020_3_OR_NEWER;UNITY_2021_1_OR_NEWER;UNITY_2021_2_OR_NEWER;UNITY_2021_3_OR_NEWER;UNITY_2022_1_OR_NEWER;UNITY_2022_2_OR_NEWER;UNITY_2022_3_OR_NEWER;PLATFORM_ARCH_64;UNITY_64;UNITY_INCLUDE_TESTS;ENABLE_AR;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_EVENT_QUEUE;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_TEXTURE_STREAMING;ENABLE_VIRTUALTEXTURING;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_UNITYWEBREQUEST;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_EDITOR_GAME_SERVICES;ENABLE_UNITY_GAME_SERVICES_ANALYTICS_SUPPORT;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_GENERATE_NATIVE_PLUGINS_FOR_ASSEMBLIES_API;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;ENABLE_MANAGED_AUDIO_JOBS;ENABLE_MANAGED_UNITYTLS;INCLUDE_DYNAMIC_GI;ENABLE_SCRIPTING_GC_WBARRIERS;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;ENABLE_VIDEO;ENABLE_ACCELERATOR_CLIENT_DEBUGGING;ENABLE_NAVIGATION_PACKAGE_DEBUG_VISUALIZATION;ENABLE_NAVIGATION_HEIGHTMESH_RUNTIME_SUPPORT;ENABLE_NAVIGATION_UI_REQUIRES_PACKAGE;PLATFORM_STANDALONE;TEXTCORE_1_0_OR_NEWER;PLATFORM_STANDALONE_WIN;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_NVIDIA;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_OUT_OF_PROCESS_CRASH_HANDLER;ENABLE_CLUSTER_SYNC;ENABLE_CLUSTERINPUT;PLATFORM_UPDATES_TIME_OUTSIDE_OF_PLAYER_LOOP;GFXDEVICE_WAITFOREVENT_MESSAGEPUMP;PLATFORM_INITIALIZES_MEMORY_MANAGER_EXPLICITLY;ENABLE_MONO;NET_STANDARD_2_0;NET_STANDARD;NET_STANDARD_2_1;NETSTANDARD;NETSTANDARD2_1;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_DIRECTOR;ENABLE_LOCALIZATION;ENABLE_SPRITES;ENABLE_TERRAIN;ENABLE_TILEMAP;ENABLE_TIMELINE;ENABLE_LEGACY_INPUT_MANAGER;TEXTCORE_FONT_ENGINE_1_5_OR_NEWER;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER + prompt + 4 + 0169;USG0001 + False + + + pdbonly + true + Temp\bin\Release\ + prompt + 4 + 0169;USG0001 + False + + + true + true + true + true + MSB3277 + + + Package + 2.0.22 + SDK + Game:1 + StandaloneWindows64:19 + 2022.3.62f2 + + + + + + + + + + + + + + + + + + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.AIModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.ARModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.AccessibilityModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.AndroidJNIModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.AnimationModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.AssetBundleModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.AudioModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.ClothModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.ClusterInputModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.ClusterRendererModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.ContentLoadModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.CrashReportingModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.DSPGraphModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.DirectorModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.GIModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.GameCenterModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.GridModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.HotReloadModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.IMGUIModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.ImageConversionModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.InputModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.InputLegacyModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.JSONSerializeModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.LocalizationModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.ParticleSystemModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.PerformanceReportingModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.PhysicsModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.Physics2DModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.ProfilerModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.PropertiesModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.ScreenCaptureModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.SharedInternalsModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteMaskModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.SpriteShapeModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.StreamingModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.SubstanceModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.SubsystemsModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.TLSModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.TerrainPhysicsModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreFontEngineModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.TextCoreTextEngineModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.TextRenderingModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.TilemapModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.UIModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.UIElementsModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.UmbraModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.UnityAnalyticsCommonModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.UnityConnectModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.UnityCurlModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.UnityTestProtocolModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAssetBundleModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestAudioModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestTextureModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.VFXModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.VRModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.VehiclesModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.VideoModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.VirtualTexturingModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.WindModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEngine.XRModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEditor.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEditor.CoreModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEditor.DeviceSimulatorModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEditor.DiagnosticsModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEditor.EditorToolbarModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEditor.GraphViewModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEditor.PresetsUIModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEditor.QuickSearchModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEditor.SceneTemplateModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEditor.SceneViewModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreFontEngineModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEditor.TextCoreTextEngineModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEditor.UIBuilderModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEditor.UIElementsSamplesModule.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\Managed\UnityEngine\UnityEditor.UnityConnectModule.dll + False + + + Library\PackageCache\com.unity.testtools.codecoverage@1.2.6\lib\ReportGenerator\ReportGeneratorMerged.dll + False + + + Assets\Scripts\Newtonsoft.Json.dll + False + + + Library\PackageCache\com.unity.visualscripting@1.9.4\Runtime\VisualScripting.Flow\Dependencies\NCalc\Unity.VisualScripting.Antlr3.Runtime.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\PlaybackEngines\iOSSupport\UnityEditor.iOS.Extensions.Xcode.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\PlaybackEngines\iOSSupport\UnityEditor.iOS.Extensions.Common.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Types.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.Gradle.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\PlaybackEngines\AndroidPlayer\Unity.Android.GradleProject.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\ref\2.1.0\netstandard.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\Microsoft.Win32.Primitives.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.AppContext.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Buffers.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Concurrent.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.NonGeneric.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Collections.Specialized.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.EventBasedAsync.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.Primitives.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ComponentModel.TypeConverter.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Console.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Data.Common.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Contracts.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Debug.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.FileVersionInfo.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Process.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.StackTrace.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TextWriterTraceListener.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tools.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.TraceSource.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Diagnostics.Tracing.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Drawing.Primitives.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Dynamic.Runtime.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Calendars.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Globalization.Extensions.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Compression.ZipFile.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.DriveInfo.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Primitives.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.FileSystem.Watcher.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.IsolatedStorage.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.MemoryMappedFiles.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.Pipes.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.IO.UnmanagedMemoryStream.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Expressions.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Parallel.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Linq.Queryable.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Memory.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Http.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NameResolution.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.NetworkInformation.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Ping.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Primitives.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Requests.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Security.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.Sockets.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebHeaderCollection.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.Client.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Net.WebSockets.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Numerics.Vectors.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ObjectModel.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.DispatchProxy.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.ILGeneration.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Emit.Lightweight.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Extensions.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Reflection.Primitives.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Reader.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.ResourceManager.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Resources.Writer.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.CompilerServices.VisualC.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Extensions.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Handles.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.InteropServices.RuntimeInformation.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Numerics.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Formatters.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Json.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Primitives.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Runtime.Serialization.Xml.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Claims.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Algorithms.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Csp.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Encoding.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.Primitives.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Cryptography.X509Certificates.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.Principal.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Security.SecureString.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.Encoding.Extensions.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Text.RegularExpressions.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Overlapped.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Extensions.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Tasks.Parallel.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Thread.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.ThreadPool.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Threading.Timer.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.ValueTuple.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.ReaderWriter.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XDocument.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlDocument.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XmlSerializer.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netstandard\System.Xml.XPath.XDocument.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\Extensions\2.0.0\System.Runtime.InteropServices.WindowsRuntime.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\mscorlib.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ComponentModel.Composition.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Core.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Data.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Drawing.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.IO.Compression.FileSystem.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Net.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Numerics.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Runtime.Serialization.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.ServiceModel.Web.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Transactions.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Web.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Windows.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Linq.dll + False + + + C:\Program Files\Unity\Hub\Editor\2022.3.62f2\Editor\Data\NetStandard\compat\2.1.0\shims\netfx\System.Xml.Serialization.dll + False + + + Library\ScriptAssemblies\Unity.Timeline.dll + False + + + Library\ScriptAssemblies\Unity.TestTools.CodeCoverage.Editor.OpenCover.Mono.Reflection.dll + False + + + Library\ScriptAssemblies\UnityEngine.UI.dll + False + + + Library\ScriptAssemblies\Unity.EditorCoroutines.Editor.dll + False + + + Library\ScriptAssemblies\Unity.VisualScripting.SettingsProvider.Editor.dll + False + + + Library\ScriptAssemblies\Unity.Performance.Profile-Analyzer.Editor.dll + False + + + Library\ScriptAssemblies\Unity.TestTools.CodeCoverage.Editor.dll + False + + + Library\ScriptAssemblies\Unity.TestTools.CodeCoverage.Editor.OpenCover.Model.dll + False + + + Library\ScriptAssemblies\Unity.PlasticSCM.Editor.dll + False + + + Library\ScriptAssemblies\Unity.VisualScripting.State.Editor.dll + False + + + Library\ScriptAssemblies\Unity.Timeline.Editor.dll + False + + + Library\ScriptAssemblies\Unity.Settings.Editor.dll + False + + + Library\ScriptAssemblies\Unity.VisualScripting.Shared.Editor.dll + False + + + Library\ScriptAssemblies\Unity.VisualStudio.Editor.dll + False + + + Library\ScriptAssemblies\Unity.TextMeshPro.dll + False + + + Library\ScriptAssemblies\Unity.VisualScripting.Core.dll + False + + + Library\ScriptAssemblies\Unity.TextMeshPro.Editor.dll + False + + + Library\ScriptAssemblies\UnityEditor.UI.dll + False + + + Library\ScriptAssemblies\Unity.VisualScripting.Core.Editor.dll + False + + + Library\ScriptAssemblies\Unity.Rider.Editor.dll + False + + + Library\ScriptAssemblies\Unity.VisualScripting.State.dll + False + + + Library\ScriptAssemblies\Unity.VSCode.Editor.dll + False + + + Library\ScriptAssemblies\Unity.VisualScripting.Flow.dll + False + + + Library\ScriptAssemblies\Unity.VisualScripting.Flow.Editor.dll + False + + + + + + + + + + + + + + + + + diff --git a/Assets/Scenes.meta b/Assets/Scenes.meta new file mode 100644 index 0000000..0748aa4 --- /dev/null +++ b/Assets/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a8398f7cb767e8a4ead2ebe5b69c5fd2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity new file mode 100644 index 0000000..fba82bd --- /dev/null +++ b/Assets/Scenes/SampleScene.unity @@ -0,0 +1,361 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 705507994} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &538393918 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 538393920} + - component: {fileID: 538393919} + m_Layer: 0 + m_Name: SdkManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &538393919 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 538393918} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9e4a4fc2ee037174b95c916ef5475ee2, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &538393920 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 538393918} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &705507993 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 705507995} + - component: {fileID: 705507994} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &705507994 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705507993} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &705507995 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705507993} + serializedVersion: 2 + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &963194225 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 963194228} + - component: {fileID: 963194227} + - component: {fileID: 963194226} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &963194226 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_Enabled: 1 +--- !u!20 &963194227 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &963194228 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 963194228} + - {fileID: 705507995} + - {fileID: 538393920} diff --git a/Assets/Scenes/SampleScene.unity.meta b/Assets/Scenes/SampleScene.unity.meta new file mode 100644 index 0000000..952bd1e --- /dev/null +++ b/Assets/Scenes/SampleScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9fc0d4010bbf28b4594072e72b8655ab +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts.meta b/Assets/Scripts.meta new file mode 100644 index 0000000..9eb7fd3 --- /dev/null +++ b/Assets/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: aec80b836f2474741aeeef00ea0e1c99 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/.DS_Store b/Assets/Scripts/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..990eb058739acee8015dedfe3e302978e9748a06 GIT binary patch literal 6148 zcmeHKyG{c!5S)b+L1|J_`WN^ED>@34g5o47L69<13PgWZzKc&|_E8WWbfJl6rS;hB z9b2B__7;F`K6iJ(8o-k7h@%g4^L_W3T~)-0be^%r3m))@arZIH{ypH_8$9C)BZi;+ z_x;=9u=j156p#W^Knh3!DR4#ws<l3#UXzXqHrBQmtAHOFHAN@_ONvm~>b*A67S8bto3M^ZXX+u%4(<3P^!d z1+H_s_WFNM|D*puC21uEq`*ZfV2fcKHhfam*4g8{);9Vp-E+R^Zkz{&LzH7;lw&Tu f9N$J#<~5&lzZXu4L1#SZMEwl7E;1?b-wJ#KZrKzs literal 0 HcmV?d00001 diff --git a/Assets/Scripts/BrigdeIOS.cs b/Assets/Scripts/BrigdeIOS.cs new file mode 100644 index 0000000..49ac471 --- /dev/null +++ b/Assets/Scripts/BrigdeIOS.cs @@ -0,0 +1,49 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System.Runtime.InteropServices; +using UnityEditor; + +public class BrigdeIOS +{ + + + [DllImport("__Internal")] + public static extern void addH5Field(int field1, int field2, int field3, int field4, int field5, string field6, string field7, string dark_url, string light_url, bool is_gift, string web_through_str, string click_add_time); + // [DllImport("__Internal")] + // public static extern void SetTouchWebview(bool flag, bool force = false); + + // [DllImport("__Internal")] + // public static extern void ScrollWebview(float dx, float dy); + + [DllImport("__Internal")] + public static extern void SetPadding(float left, float top, float right, float bottom); + [DllImport("__Internal")] + public static extern void SetDarkThough(bool though); + [DllImport("__Internal")] + public static extern void SetBtn(int left, int top, int right, int bottom); + + [DllImport("__Internal")] + public static extern void ShowH5View(bool flag); + + [DllImport("__Internal")] + public static extern void SetIconProgress(float val); + + [DllImport("__Internal")] + public static extern void ShowFlyBtn(bool flag); + + [DllImport("__Internal")] + public static extern void setFlyBtnTag(bool flag); + [DllImport("__Internal")] + public static extern void setRewardBtnTag(bool flag); + [DllImport("__Internal")] + public static extern void copyText(string text); + [DllImport("__Internal")] + public static extern void OpenWv(); + +} + + + + + diff --git a/Assets/Scripts/BrigdeIOS.cs.meta b/Assets/Scripts/BrigdeIOS.cs.meta new file mode 100644 index 0000000..1b701fa --- /dev/null +++ b/Assets/Scripts/BrigdeIOS.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d673fd507808f70469612b536c921d31 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/ConfigSystem_sdk.cs b/Assets/Scripts/ConfigSystem_sdk.cs new file mode 100644 index 0000000..f223294 --- /dev/null +++ b/Assets/Scripts/ConfigSystem_sdk.cs @@ -0,0 +1,292 @@ +using System; +using System.IO; +using UnityEngine; +using System.Collections.Generic; +using Newtonsoft.Json; +using BingoBrain; +using System.Linq; +using System.Text; +using DontConfuse; +using UnityEngine.Events; +using UnityEngine.Networking; +using System.Collections; +namespace BingoBrain +{ + public class ConfigSystem_sdk + { + + private ConfigSystem_sdk() + { + } + private static readonly ConfigSystem_sdk _instance = new ConfigSystem_sdk(); + + public static ConfigSystem_sdk Instance + { + get { return _instance; } + } + + private static Dictionary configData = new(); + public void OnRequestGetConfig() + { + // GameHelper.PostFunnelLogin("loadBegin"); + var loginData = LoginModel_sdk.Instance; + + var configFileName = "Json"; + var configFileSavePath = $"{Application.persistentDataPath}/sdkConfig/"; + var assetHotFixFilePath = $"{configFileSavePath}{configFileName}.txt"; + var configFileNameKey = "sdkconfigFileName"; + + var CDNConfigFileName = loginData.setting; + string savedCfgName = PlayerPrefs.GetString(configFileNameKey); + bool needDownloadConfigFile = false; + + if (!string.IsNullOrEmpty(CDNConfigFileName)) + { + //如果本地Player Prefs里没有保存配置文件名 + if (string.IsNullOrEmpty(savedCfgName)) + { + // Debug.Log("[UNITY] No config file name saved."); + needDownloadConfigFile = true; + } + else + { + // Debug.Log($"[UNITY] Saved config name: {savedCfgName}, CDN config name: {CDNConfigFileName}"); + //与CDN上的对比名称 + if (!savedCfgName.Equals(CDNConfigFileName)) + { + needDownloadConfigFile = true; + } + } + } + //Debug.Log($"[UNITY] needDownloadConfigFile: {needDownloadConfigFile}"); + //默默地拉去新配置 + // Debug.Log("kkkkkkkkkkkkkkkkkkkkkk" + needDownloadConfigFile); + // Debug.Log("kkkkkkkkkkkkkkkkkkkkkk" + savedCfgName); + + if (needDownloadConfigFile || !File.Exists(assetHotFixFilePath)) + { + SdkManager.Instance.StartCoroutine(GetTextFromUrl($"{loginData.cdn_url}/config/{CDNConfigFileName}", + configFileName, (content) => + { + PlayerPrefs.SetString(configFileNameKey, CDNConfigFileName); + ParseConfig(content); + //CtrlDispatcher.Instance.Dispatch(CtrlMsg.NewConfigRead); + }, configFileSavePath)); + } + + //检查设备本地是否有配置文件 + if (File.Exists(assetHotFixFilePath)) + { + // Debug.Log($"[UNITY] Load config from datapath: {assetHotFixFilePath}"); + ParseConfig(File.ReadAllText(assetHotFixFilePath)); + // UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.NetLoadingUI_Close); + // AppDispatcher.Instance.Dispatch(CsjInfoC.LoginInit); + // GameHelper.PostFunnelLogin("loadFinish"); + } + } + public static IEnumerator GetTextFromUrl(string url, string fileName, UnityAction action = null, + string savePath = null) + { + var unityWebRequest = UnityWebRequest.Get(url); + yield return unityWebRequest.SendWebRequest(); + if (unityWebRequest.result is UnityWebRequest.Result.ConnectionError + or UnityWebRequest.Result.ProtocolError) + { + Debug.LogError($"加载 [ {fileName} ] 文本文件失败 {unityWebRequest.error} [ url: {url} ]"); + action?.Invoke(default); + yield break; + } + + var content = unityWebRequest.downloadHandler.text; + + SaveTextFile(content, savePath, fileName); + + action?.Invoke(content); + } + private static void SaveTextFile(string content, string filePath, string fileName) + { + if (!Directory.Exists(filePath)) + { + Directory.CreateDirectory(filePath); + } + + File.WriteAllText($"{filePath}{fileName}.txt", content); + } + private void ParseConfig(string json) + { + Debug.Log("sdk--------json" + json); + if (json == null) + { + return; + } + + if (!json.StartsWith("{")) + { + json = Encoding.UTF8.GetString(Base64Kit_sdk.Decrypt(Encoding.UTF8.GetBytes(json), + "com.matchgame.captaindicedubloons")); + } + Debug.Log("转化后的json" + json); + SetConfig(json); + + Debug.Log(LoginModel_sdk.Instance.reg_time); + Debug.Log(GetRegisteredCalendarDaysByUTC(LoginModel_sdk.Instance.reg_time)); + int reg_days = GetRegisteredCalendarDaysByUTC(LoginModel_sdk.Instance.reg_time); + bool open_dark_wv = true; + if (SDKConfig.h6Conf.switchCondition != null) + { + for (int i = 0; i < SDKConfig.h6Conf.switchCondition.retentionConf.Count; i++) + { + if ((reg_days >= SDKConfig.h6Conf.switchCondition.retentionConf[i].days.min) && + (reg_days <= SDKConfig.h6Conf.switchCondition.retentionConf[i].days.max)) + { + if (UnityEngine.Random.Range(0, 100) >= SDKConfig.h6Conf.switchCondition.retentionConf[i].prob) + { + open_dark_wv = false; + } + break; + } + } + } + Debug.Log(open_dark_wv); + if (open_dark_wv) + { + SdkManager.Instance.OpenWv(); + // int flyswitch = ConfigSystem.GetConfig().flyswitch; + // int propswitch = ConfigSystem.GetConfig().propswitch; + // float top_offset = 150;//fgui中的顶部信息的高度 + // float buttom_offset = 0; + // if (Screen.safeArea.y != 0) + // {//刘海屏 + // top_offset += Screen.safeArea.y; + // } + + // SdkManager.Instance.setFlyBtnTag(flyswitch == 1); + // SdkManager.Instance.setRewardBtnTag(propswitch == 1); + // SdkManager.Instance.SetBtn(ConfigSystem.GetConfig().propCoord[0], ConfigSystem.GetConfig().propCoord[1], 60, 60); + // SdkManager.Instance.SetPadding(0, top_offset / GRoot.inst.height, 0, buttom_offset / GRoot.inst.height); + SdkManager.Instance.SetDarkThough(true); + SdkManager.Instance.ShowH5View(false); + SdkManager.Instance.RefreshUrl(); + } + } + public int GetRegisteredCalendarDaysByUTC(long regTimeTimestamp) + { + // 1. 转换为 0时区 的日期部分(抹去具体时分秒,变成 00:00:00) + DateTime regDateUtc = DateTimeOffset.FromUnixTimeSeconds(regTimeTimestamp).UtcDateTime.Date; + + // 2. 获取当前 0时区 的日期部分 + DateTime nowDateUtc = DateTimeOffset.UtcNow.UtcDateTime.Date; + + // 3. 两个 0时区的日期直接相减 + TimeSpan difference = nowDateUtc - regDateUtc; + + int days = difference.Days; + return days < 0 ? 0 : days; + } + public RootObject SDKConfig; + private void SetConfig(string json_) + { + SDKConfig = JsonConvert.DeserializeObject(json_); + for (int i = 0; i < SDKConfig.h5Conf.links.Count; i++) + { + if (SDKConfig.h5Conf.links[i].maxF5Times < 0) + { + SDKConfig.h5Conf.links[i].maxF5Times = 99999; + } + } + for (int i = 0; i < SDKConfig.h6Conf.layerConfList.Count; i++) + { + for (int j = 0; j < SDKConfig.h6Conf.layerConfList[i].links.Count; j++) + { + if (SDKConfig.h6Conf.layerConfList[i].links[j].maxF5Times < 0) + { + SDKConfig.h6Conf.layerConfList[i].links[j].maxF5Times = 99999; + } + } + } + } + + + } + + + + public class RootObject + { + public string bid; + public H5Conf h5Conf; + public H6Conf h6Conf; + } + + public class H5Conf + { + public F5Interval f5Interval;//自动刷新间隔 + public List links; // H5 的 Link + } + + public class F5Interval + { + public int min; + public int max; + } + + public class H5Link + { + public int id; + public string url; + public int weight; + public int maxF5Times; + } + + public class H6Conf + { + public int layers;//层数总数 + public ADClickF5Delay ADClickF5Delay;//延长时间 + public SwitchCondition switchCondition;//开启条件 + public List layerConfList; + } + + public class ADClickF5Delay + { + public int min; + public int max; + } + + public class SwitchCondition//开启条件 + { + public List retentionConf; // 已经实例化为具体类型 + } + + public class RetentionConf//开启条件 + { + public Days days; + public int prob; + } + + public class Days + { + public int min; + public int max; + } + + public class LayerConfList + { + public int layerId;//第几层 + public int weight;//显示权重 + public F5Interval f5Interval;//自动刷新间隔 + public int offset; + public List links; // H6 内部图层的 Link + } + + public class H6Link + { + public int id; + public string url; + public int weight; + public int maxF5Times;//刷新上限 + public int ctProb; + public int ctProb2; + } + + +} \ No newline at end of file diff --git a/Assets/Scripts/ConfigSystem_sdk.cs.meta b/Assets/Scripts/ConfigSystem_sdk.cs.meta new file mode 100644 index 0000000..4745fe7 --- /dev/null +++ b/Assets/Scripts/ConfigSystem_sdk.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7fb008dbf6acb0d41b42eb4b0083e089 +timeCreated: 1692603665 \ No newline at end of file diff --git a/Assets/Scripts/LoginModel_sdk.cs b/Assets/Scripts/LoginModel_sdk.cs new file mode 100644 index 0000000..f143543 --- /dev/null +++ b/Assets/Scripts/LoginModel_sdk.cs @@ -0,0 +1,29 @@ + +public class LoginModel_sdk +{ + public static LoginModel_sdk _instance = new LoginModel_sdk(); + private LoginModel_sdk() + { + + } + public static LoginModel_sdk Instance + { + get { return _instance; } + } + public long uid; + public bool new_player; + public string token; + public long expires_at; + public string country; + public bool is_magic; + public string invite_code; + public string invite_url; + public long last_login_time; + public string play_data; + public string setting; + public string cdn_url; + public long login_time; + public long reg_time; + public bool debug_log = true; + public int enwp; +} diff --git a/Assets/Scripts/LoginModel_sdk.cs.meta b/Assets/Scripts/LoginModel_sdk.cs.meta new file mode 100644 index 0000000..eea2fab --- /dev/null +++ b/Assets/Scripts/LoginModel_sdk.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2d66722231daf944ba4c10b0af879c96 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/LoginSystem_sdk.cs b/Assets/Scripts/LoginSystem_sdk.cs new file mode 100644 index 0000000..23ec771 --- /dev/null +++ b/Assets/Scripts/LoginSystem_sdk.cs @@ -0,0 +1,121 @@ + +using UnityEngine; + +using Newtonsoft.Json; +using BingoBrain; +using System; + +public class LoginSystem_sdk +{ + + //is debug test (LoginCountLimit 应该为 5, 测试改为2) + private const int LoginCountLimit = 5; + public int loginCount = 0; + private LoginSystem_sdk() + { + } + private static readonly LoginSystem_sdk _instance = new LoginSystem_sdk(); + + public static LoginSystem_sdk Instance + { + get { return _instance; } + } + + public void RequestLogin() + { + + var requestLoginData = new RequestLoginData_sdk + { + device_id = SystemInfo.deviceUniqueIdentifier, + // device_id ="E742FE8B-C32E-56A7-8F8A-6B3BC0F3169", + pack_name = "com.matchgame.captaindicedubloons", + app_version = Application.version, + // channel = BingoBea.Instance.attribution, + // sim = WebviewManager.haveSimCard + }; + Debug.Log(JsonConvert.SerializeObject(requestLoginData)); + Debug.Log(SystemInfo.deviceUniqueIdentifier); + Debug.Log(JsonConvert.SerializeObject(requestLoginData)); + NetworkKit_sdk.Post("login", requestLoginData, (isSuccess, loginData) => + { + + + if (isSuccess) + { + Debug.Log("Login_sdk" + "-------------------" + JsonConvert.SerializeObject(loginData)); + LoginModel_sdk loginModel = LoginModel_sdk.Instance; + loginModel.cdn_url = loginData.cdn_url; + loginModel.setting = loginData.setting; + loginModel.play_data = loginData.play_data; + loginModel.token = loginData.token; + loginModel.uid = loginData.uid; + loginModel.country = loginData.country; + loginModel.expires_at = loginData.expires_at; + loginModel.is_magic = loginData.is_magic; + loginModel.invite_code = loginData.invite_code; + loginModel.invite_url = loginData.invite_url; + loginModel.last_login_time = loginData.last_login_time; + loginModel.login_time = loginData.login_time; + loginModel.reg_time = loginData.reg_time; + loginModel.new_player = loginData.new_player; + loginModel.debug_log = loginData.debug_log; + loginModel.enwp = loginData.enwp; + + // if (loginData.is_magic) + // { + // if (PlayerPrefs.GetInt("is_gift") != 1) + // { + // AppDispatcher.Instance.Dispatch(CsjInfoC.UI_DisplayLoadingUI); + // UICtrlDispatcher.Instance.Dispatch(SkinInfo.LoginAUI_Close); + // } + // PlayerPrefs.SetInt("is_gift", 1); + // } + // else + // { + + // return; + // } + + NetworkKit_sdk.CDNUrl = $"{loginData.cdn_url}/"; + NetworkKit_sdk.SetCacheToken(loginData.token); + + // DateTimeBoardk.Instance.SetServerCurrTimestamp(loginData.login_time); + + // Sequence mLoopSequence = DOTween.Sequence(); + // mLoopSequence.AppendCallback(() => + // { + // RequestHeart(); + + + // NetworkDispatcher.Instance.Dispatch(NetworkMsg.GetPlayData); + + // NetworkDispatcher.Instance.Dispatch(ExternalInfo.GetConfig); + // GameHelper.PostFunnelLogin("loginRecv", true); + ConfigSystem_sdk.Instance.OnRequestGetConfig(); + // if (GameHelper.IsGiftSwitch()) + // { + // // GameObject.Find("MainCameraRoot").SetActive(false); + // } + + } + else + { + if (try_number < 3) + { + RequestLogin(); + try_number++; + } + } + }); + } + private int try_number; + +} +public class RequestLoginData_sdk +{ + public string device_id; + public string pack_name; + public string app_version; + public string channel; + public bool sim; +} \ No newline at end of file diff --git a/Assets/Scripts/LoginSystem_sdk.cs.meta b/Assets/Scripts/LoginSystem_sdk.cs.meta new file mode 100644 index 0000000..57611b0 --- /dev/null +++ b/Assets/Scripts/LoginSystem_sdk.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f3a411886fa88a741b96f7124a48b681 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/NetworkKit_sdk.cs b/Assets/Scripts/NetworkKit_sdk.cs new file mode 100644 index 0000000..88c5155 --- /dev/null +++ b/Assets/Scripts/NetworkKit_sdk.cs @@ -0,0 +1,663 @@ +using System.Text; +using UnityEngine; +using System.Collections; +using UnityEngine.Events; +using UnityEngine.Networking; +using System.Collections.Generic; +using Newtonsoft.Json; +using BingoBrain; +using System; +using DontConfuse; +using System.Linq; +using System.Security.Cryptography; + + + +public class NetworkKit_sdk +{ + public const string JarvisToken = "JarvisToken"; + public static string CDNUrl; + public static string GetCacheToken() + { + string token = null; + if (PlayerPrefs.HasKey(JarvisToken)) + { + token = PlayerPrefs.GetString(JarvisToken, string.Empty); + } + + return token; + } + + public static void SetCacheToken(string token) + { + PlayerPrefs.SetString(JarvisToken, token); + } + public const string DomainDebugUrl = @"https://sdkapi.jsoncompare.online/api/"; + + public static readonly string DomainReleaseUrl = $"https://bingotornado.top/api/"; + + private static IEnumerator PostInternal(string url, object requestData, UnityAction onCompleted, + Dictionary header = null) + { + string requestJson = JsonConvert.SerializeObject(requestData); + + string url2 = url; +#if BingoBrainRelease + url2 = Base64Kit_sdk.Encode(url); + requestJson = Base64Kit_sdk.Encode(requestJson); +#endif + byte[] bytes = Encoding.UTF8.GetBytes(requestJson); + string url1 = DomainDebugUrl + url2; + //Debug.Log($"Url: {url1}"); + UnityWebRequest loginRequest = new UnityWebRequest(url1, UnityWebRequest.kHttpVerbPOST) + { + uploadHandler = new UploadHandlerRaw(bytes), + downloadHandler = new DownloadHandlerBuffer() + }; + + if (header != null) + { + foreach (var keyValuePair in header) + { + loginRequest.SetRequestHeader(keyValuePair.Key, keyValuePair.Value); + } + } + + SetRequestContentType(loginRequest); + yield return loginRequest.SendWebRequest(); + if (loginRequest.result is not UnityWebRequest.Result.Success) + { + onCompleted?.Invoke(false, default); + } + else + { + string receiveContent = loginRequest.downloadHandler.text; +#if BingoBrainRelease + if (!receiveContent.IsNullOrWhiteSpace()) + { + receiveContent = receiveContent.Substring(0, receiveContent.Length - 1); + receiveContent = receiveContent.Substring(1); + receiveContent = Base64Kit_sdk.Decode(receiveContent); + } +#endif + + // Debug.Log(url + "--------" + loginRequest.downloadHandler.text); + Debug.Log(url + "--------" + receiveContent); + var response =JsonConvert.DeserializeObject(receiveContent); + + if (response?.code == 0) + { + var responseData = JsonConvert.DeserializeObject(response.data.ToString()); + onCompleted?.Invoke(true, responseData); + } + else + { + if (response?.code == 1005) + { + ReLoginGetToken(); + } + + onCompleted?.Invoke(false, default); + } + + + } + + loginRequest.Dispose(); + } + + public static void SetRequestContentType(UnityWebRequest request) + { + request.SetRequestHeader("Content-Type", "application/json;charset=utf-8"); + } + + public static void Post(string url, object requestData, UnityAction onCompleted) + { + SdkManager.Instance.StartCoroutine(PostInternal(url, requestData, onCompleted)); + } + public static void Post(string url, object requestData, UnityAction onCompleted = null) + { + SdkManager.Instance.StartCoroutine(PostInternal(url, requestData, onCompleted)); + } + + public static void PostWithHeader(string url, object requestData = null, + UnityAction onCompleted = null) + { + ReSetToken(); + + var headers = new Dictionary { { "x-token", GetCacheToken() } }; + SdkManager.Instance.StartCoroutine(PostInternal(url, requestData, onCompleted, headers)); + } + + public static void PostWithHeader(string url, UnityAction onCompleted) + { + if (onCompleted != null) + { + PostWithHeader(url, null, (isSuccess, obj) => { onCompleted.Invoke(isSuccess, obj); }); + } + else + { + PostWithHeader(url); + } + } + + public static void PostWithHeader(string url, object requestData = null, UnityAction onCompleted = null) + { + if (onCompleted != null) + { + PostWithHeader(url, requestData, (isSuccess, obj) => { onCompleted?.Invoke(isSuccess); }); + } + else + { + PostWithHeader(url, requestData); + } + } + + public static void Get(string url, UnityAction onCompleted) + { + SdkManager.Instance.StartCoroutine(GetInternal(url, onCompleted)); + } + + public static IEnumerator GetInternal(string url, UnityAction onCompleted) + { + var request = UnityWebRequest.Get(url); + yield return request.SendWebRequest(); + if (request.result is not UnityWebRequest.Result.Success) + { + onCompleted?.Invoke(default); + } + else + { + var receiveContent = request.downloadHandler.text; + + var json = Json_StringFormat(receiveContent); + + + onCompleted?.Invoke(receiveContent); + } + + request.Dispose(); + } + public static string Json_StringFormat(string sourceJson) + { + sourceJson += " "; + var index = 0; + var newJson = new StringBuilder(); + + for (int i = 0; i < sourceJson.Length - 1; i++) + { + if (sourceJson[i] == '{' || sourceJson[i] == '[') + { + index++; + newJson.Append(sourceJson[i]); + newJson.Append("\n"); + for (var a = 0; a < index; a++) + { + newJson.Append("\t"); + } + } + else if ((sourceJson[i] == '}' || sourceJson[i] == ']')) + { + index--; + newJson.Append("\n"); + for (var a = 0; a < index; a++) + { + newJson.Append("\t"); + } + + newJson.Append(sourceJson[i]); + newJson.Append(sourceJson[i + 1] == ',' ? "," : ""); + newJson.Append("\n"); + + if (sourceJson[i + 1] == ',') i++; + for (int a = 0; a < index; a++) + { + newJson.Append("\t"); + } + } + else if (sourceJson[i] != '}' && sourceJson[i] != ']' && sourceJson[i + 1] == ',') + { + newJson.Append(sourceJson[i]); + newJson.Append(sourceJson[i + 1]); + newJson.Append("\n"); + i++; + for (var a = 0; a < index; a++) + { + newJson.Append("\t"); + } + } + else + { + newJson.Append(sourceJson[i]); + } + } + + return newJson.ToString(); + } + // public static void BuriedPoint(string eventname, string eventproperty, int integer) + // { + + // if (eventname == BuriedPointEvent.Apple_AD_event || eventname == BuriedPointEvent.Apple_pay_event) + // { + // eventname = GameHelper.IsAdModelOfPay() ? BuriedPointEvent.Apple_AD_event : BuriedPointEvent.Apple_pay_event; + // } + + // buriedPointObject.@event = eventname; + // buriedPointObject.property = eventproperty; + // buriedPointObject.n = integer; + // PostWithHeader("/event/incrN", buriedPointObject, (isSuccess, obj) => + // { + // // Debug.Log(isSuccess); + // // Debug.Log(eventproperty); + // //Debug.Log(JsonUtility.ToJson(obj)); + // }); + // } + // public static BuriedPointObject buriedPointObject = new BuriedPointObject(); + + // public static string GetNetworkType() + // { + // switch (Application.internetReachability) + // { + // case NetworkReachability.ReachableViaCarrierDataNetwork: + // return NetworkType.mobile; + // case NetworkReachability.ReachableViaLocalAreaNetwork: + // return NetworkType.wifi; + // case NetworkReachability.NotReachable: + // return NetworkType.notConnected; + // default: + // return NetworkType.notConnected; + // } + // } + + private static bool isReqToken = false; + public static void ReSetToken() + { + if (isReqToken) return; + + // var nowTimes = GameHelper.GetNowTime(); + // var passtime = GameHelper.GetLoginModel().expires_at; + // // Debug.Log($"ReSetToken nowTimes:{nowTimes} passtime:{passtime}"); + // if (passtime == 0 || passtime - nowTimes > 3600) return; + + // isReqToken = true; + + // var headers = new Dictionary { { "x-token", GetCacheToken() } }; + + // IsfvKit.StartCoroutine(PostInternal("tokenRefresh", null, (isSuccess, tokenData) => + // { + // if (isSuccess) + // { + // LoginModel loginModel = GameHelper.GetLoginModel(); + // loginModel.token = tokenData.token; + // loginModel.expires_at = tokenData.expires_at; + + // SetCacheToken(tokenData.token); + // } + // isReqToken = false; + + // }, headers)); + } + + + private static bool isReqToken1 = false; + + public static void ReLoginGetToken() + { + // if (isReqToken1) return; + + // var requestLoginData = new RequestLoginData + // { + // device_id = SystemInfo.deviceUniqueIdentifier, + // pack_name = NetworkMsg.Identifier, + // app_version = Application.version, + // channel = BingoBea.Instance.attribution, + // sim = WebviewManager.haveSimCard + + // }; + // isReqToken1 = true; + + + // Post("login", requestLoginData, (isSuccess, loginData) => + // { + // if (isSuccess) + // { + // LoginModel loginModel = GameHelper.GetLoginModel(); + // loginModel.token = loginData.token; + // loginModel.expires_at = loginData.expires_at; + + // SetCacheToken(loginData.token); + // } + + // isReqToken1 = false; + // }); + } + +} +public class Base64Kit_sdk +{ + // public static string Base64Encode(string source) + // { + // byte[] bytes = Encoding.UTF8.GetBytes(source); + // string encode = Convert.ToBase64String(bytes); + // return encode; + // } + // public static string Encode(string data, bool is_apple_pay = false) + // { + // var key = BingoBrain.Network.DomainRelease; + // //if (is_apple_pay) key = "com.leisuregames.crazygourmet"; + + // var keyMD5 = MD5Kit.MD5String1(key); + // //UnityEngine.Debug.Log("Base64 Encode Key: " + keyMD5); + // var str = Base64EncodeUtil.Base64Encode(data + keyMD5); + + // var bytes = Encoding.UTF8.GetBytes(str); + // for (int i = 0, j = bytes.Length - 1; i < j; i += 1, j -= 1) + // { + // if (i % 2 == 0) + // { + // (bytes[i], bytes[j]) = (bytes[j], bytes[i]); + // } + // } + + // var loginData = Encoding.UTF8.GetString(bytes); + // return loginData; + // } + + // public static string Decode(string data) + // { + // var bytes = Encoding.UTF8.GetBytes(data); + // for (int i = 0, j = bytes.Length - 1; i < j; i += 1, j -= 1) + // { + // if (i % 2 == 0) + // { + // (bytes[i], bytes[j]) = (bytes[j], bytes[i]); + // } + // } + + // var str = Encoding.UTF8.GetString(bytes); + // var str1 = Base64EncodeUtil.Base64Decode(str); + // var key = BingoBrain.Network.DomainRelease; + // var keyMD5 = MD5Kit.MD5String1(key); + // // Debug.Log("Base64 Decode Key: " + keyMD5); + // // Debug.Log("Base64 Decode str1: " + str1); + // var result = str1.Replace(keyMD5, string.Empty); + // return result; + // } + + // public static string Decode(string data, string key) + // { + // var bytes = Encoding.UTF8.GetBytes(data); + // for (int i = 0, j = bytes.Length - 1; i < j; i += 1, j -= 1) + // { + // if (i % 2 == 0) + // { + // (bytes[i], bytes[j]) = (bytes[j], bytes[i]); + // } + // } + + // var str = Encoding.UTF8.GetString(bytes); + // var str1 = Base64EncodeUtil.Base64Decode(str); + // // var key = NetworkManager.DomainRelease; + // var keyMD5 = MD5Kit.MD5String1(key); + // var result = str1.Replace(keyMD5, string.Empty); + // return result; + // } + private static byte[] GenerateKey(string secret) + { + using var sha256 = SHA256.Create(); + return sha256.ComputeHash(Encoding.UTF8.GetBytes(secret)); + } + + internal static byte[] Encrypt(byte[] plainText, string secret) + { + if (plainText == null || plainText.Length == 0) return plainText; + var key = GenerateKey(secret); + using var aes = Aes.Create(); + aes.Key = key; + aes.Mode = CipherMode.CBC; + aes.Padding = PaddingMode.None; + aes.GenerateIV(); + var iv = aes.IV; + var blockSize = aes.BlockSize / 8; + var padding = blockSize - plainText.Length % blockSize; + var padded = new byte[plainText.Length + padding]; + Buffer.BlockCopy(plainText, 0, padded, 0, plainText.Length); + for (var i = plainText.Length; i < padded.Length; i++) padded[i] = (byte)padding; + using var encryptor = aes.CreateEncryptor(); + var encrypted = encryptor.TransformFinalBlock(padded, 0, padded.Length); + var result = new byte[iv.Length + encrypted.Length]; + Buffer.BlockCopy(iv, 0, result, 0, iv.Length); + Buffer.BlockCopy(encrypted, 0, result, iv.Length, encrypted.Length); + return ToUrlSafeBase64(result); + } + + internal static byte[] Decrypt(byte[] encryptedBase64, string secret) + { + if (encryptedBase64 == null || encryptedBase64.Length == 0) return encryptedBase64; + var key = GenerateKey(secret); + var fullCipher = FromUrlSafeBase64(encryptedBase64); + if (fullCipher.Length < 16) throw new Exception("Invalid cipher data"); + var iv = fullCipher.Take(16).ToArray(); + var cipherText = fullCipher.Skip(16).ToArray(); + using var aes = Aes.Create(); + aes.Key = key; + aes.IV = iv; + aes.Mode = CipherMode.CBC; + aes.Padding = PaddingMode.None; + using var decryptor = aes.CreateDecryptor(); + var decrypted = decryptor.TransformFinalBlock(cipherText, 0, cipherText.Length); + int pad = decrypted[^1]; + if (pad <= 0 || pad > decrypted.Length) throw new Exception("Invalid padding"); + var result = decrypted.Take(decrypted.Length - pad).ToArray(); + return result; + } + + // 用双引号包裹字节数组 + private static byte[] QuoteBytes(byte[] input) + { + var result = new byte[input.Length + 2]; + result[0] = (byte)'"'; + Buffer.BlockCopy(input, 0, result, 1, input.Length); + result[result.Length - 1] = (byte)'"'; + return result; + } + + // 去除双引号(如果存在) + internal static byte[] UnquoteBytes(byte[] input) + { + if (input.Length >= 2 && input[0] == (byte)'"' && input[input.Length - 1] == (byte)'"') + { + var result = new byte[input.Length - 2]; + Buffer.BlockCopy(input, 1, result, 0, result.Length); + return result; + } + + return input; + } + + private static byte[] ToUrlSafeBase64(byte[] data) + { + var base64 = Convert.ToBase64String(data); + var urlSafe = base64.Replace('+', '-').Replace('/', '_'); + return Encoding.UTF8.GetBytes(urlSafe); + } + + private static byte[] FromUrlSafeBase64(byte[] urlSafe) + { + var base64 = Encoding.UTF8.GetString(urlSafe).Replace('-', '+').Replace('_', '/'); + return Convert.FromBase64String(base64); + } +} + +public class ResquestTokenData_sdk +{ + public string token; + public long expires_at; +} +public class NetworkType_sdk +{ + public static string mobile = "Mobile Data"; + public static string wifi = "Wi-Fi"; + public static string notConnected = "Not Connected"; +} +public static class Base64EncodeUtil_sdk +{ + public static string Base64Encode(string source) + { + return Base64Encode(Encoding.UTF8, source); + } + + public static string Base64Decode(string result) + { + return Base64Decode(Encoding.UTF8, result); + } + + + + + public static string Base64Encode(Encoding encoding, string source) + { + byte[] bytes = encoding.GetBytes(source); + string encode = Convert.ToBase64String(bytes); + return encode; + } + + + + + public static string Base64Decode(Encoding encoding, string result) + { + byte[] bytes = Convert.FromBase64String(result); + string decode = encoding.GetString(bytes); + return decode; + } + + + + + public static string Base64EncodeString(byte[] source) + { + return Convert.ToBase64String(source); + } + + + + + public static byte[] Base64DecodeBytes(string result) + { + return Convert.FromBase64String(result); + } +} + +public class ResponseData_sdk +{ + public int code; + public string msg; + public object data; +} +public class BuriedPointObject_sdk +{ + public string @event; + public string property; + public int n; +} +public class BuriedPointEvent_sdk +{ + public static string play_event = "Number_of_people_play"; + public static string play_property = "Number_of_people_playing"; + + public static string playing_event = "Playing_time"; + public static string playing_property = "Room_type"; + + public static string ad_task = "ad_task"; + public static string watch_ad_number = "watch_ad_number"; + public static string finish_ad_number = "finish_ad_number"; + + public static string h5_event = "H5_task"; + public static string h5_event_time = "H5_time"; + public static string h5_event_numbers = "finish_H5_number"; + + public static string withdraw_behavior = "withdraw_behavior"; + public static string withdraw_message = "withdraw_message"; + public static string withdraw_cash1 = "withdraw_cash1"; + public static string withdraw_cash2 = "withdraw_cash2"; + public static string withdraw_cash3 = "withdraw_cash3"; + + public static string Hall_behavior = "Hall_behavior"; + public static string open_hall_number = "open_hall_number"; + //public static string open_hall_people = "open_hall_people"; + public static string collect_fly_number = "collect_fly_number"; + //public static string collect_fly_people = "collect_fly_people"; + public static string fly_ct_number = "fly_ct_number"; + //public static string fly_ct_people = "fly_ct_people"; + public static string annular_finish_number = "annular_finish_number"; + public static string annular_get_number = "annular_get_number"; + public static string annular_ct_number = "annular_ct_number"; + //public static string annular_ct_people = "annular_ct_people"; + + public static string video_behavior = "video_behavior"; + public static string watch_ad_people = "watch_ad_people"; + public static string watch_success_ad_people = "watch_success_ad_people"; + + public static string video_type = "video_type"; + public static string Rewarded_videos_trigger_number = "Rewarded_videos_trigger_number"; + public static string Rewarded_videos_fill_number = "Rewarded_videos_fill_number"; + public static string Rewarded_videos_dinish_number = "Rewarded_videos_dinish_number"; + public static string Interstitial_videos_trigger_number = "Interstitial_videos_trigger_number"; + public static string Interstitial_videos_fill_number = "Interstitial_videos_fill_number"; + public static string Interstitial_videos_dinish_number = "Interstitial_videos_dinish_number"; + public static string Apple_pay_event = "Pay_Event"; + public static string Apple_AD_event = "AD_Event"; + + + public static string pack_show = "pack_show"; + public static string pack_click = "pack_click"; + public static string pack_open = "pack_open"; + public static string pack_success = "pack_success"; + + public static string remove_ad_show = "remove_ad_show"; + public static string remove_ad_click = "remove_ad_click"; + public static string remove_ad_open = "remove_ad_open"; + public static string remove_ad_success = "remove_ad_success"; + + + public static string pass_show = "master_pass_show"; + public static string pass_click = "master_pass_click"; + public static string pass_open = "pass_open"; + public static string pass_success = "master_pass_receive"; + + public static string buy_one_show = "buy_one_show"; + public static string buy_one_click = "buy_one_click"; + public static string buy_one_open = "buy_one_open"; + public static string buy_one_success = "buy_one_success"; + + public static string gold_show = "shop_show"; + public static string gold_click_1 = "shop_click"; + + public static string gold_click_ad = "gold_click_ad"; + + // public static string gold_click_2 = "gold_click_2"; + // public static string gold_click_3 = "gold_click_3"; + // public static string gold_click_4 = "gold_click_4"; + // public static string gold_open_1 = "gold_open_1"; + // public static string gold_open_2 = "gold_open_2"; + // public static string gold_open_3 = "gold_open_3"; + // public static string gold_open_4 = "gold_open_4"; + public static string gold_success_1 = "shop_receive"; + // public static string gold_success_2 = "gold_success_2"; + // public static string gold_success_3 = "gold_success_3"; + // public static string gold_success_4 = "gold_success_4"; + public static string afterRewardAdShow = "afterRewardAdShow"; + public static string afterRewardAdEnd = "afterRewardAdEnd"; + public static string fail_show = "fail_show"; + public static string fail_click = "fail_click"; + public static string fail_buy_success = "fail_buy_success"; + public static string three_days_gift_show = "three_days_gift_show"; + public static string three_days_gift_click = "three_days_gift_click"; + public static string three_days_gift_buy_success = "three_days_gift_buy_success"; + public static string three_days_gift_open = "three_days_gift_open"; + public static string three_day1_success = "three_day1_success"; + public static string three_day2_success = "three_day2_success"; + public static string three_day3_success = "three_day3_success"; + public static string Three_days_gift_event = "Three_days_gift_event"; +} diff --git a/Assets/Scripts/NetworkKit_sdk.cs.meta b/Assets/Scripts/NetworkKit_sdk.cs.meta new file mode 100644 index 0000000..78cebe9 --- /dev/null +++ b/Assets/Scripts/NetworkKit_sdk.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 14b39d653503e7f42b9992c6815b62a4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Newtonsoft.Json.dll b/Assets/Scripts/Newtonsoft.Json.dll new file mode 100644 index 0000000000000000000000000000000000000000..7a8a6b5de3558d9d35e57cacdb46fa0935be4137 GIT binary patch literal 360960 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
  • LaMif>xCo8 z2_r-wT>VM&Qu0|wrOKSkx;Af7=DekOYmoRh_e#mdcez)QO_lS>gkg}zH@H_*Zk2P? z?AD;cx47>no88XYvnRCJ?ZkJt?<1Roq(A5^yl!@jgQTw|O)Y6^o%pu)I^z*m^^-%fJyEOS$osn?N2CNbfSn#NOTVh(34##y|d+QBZak z>{Gax)wVpK&cL=jr~bM0)0QZYk^F(=ZzQc&sBb~?B9bw!GzXSNIUzVzTI`xq5#6 zF}hS=)LMi2_R`ktjfbMgwZ@SjWro1jfb`Z2!A4UHjVbfzLweHa>zxY?eDnPX+TRx% z_}=>@XPcXGJz052X=_~dm9do@!M1N?I-sXThy9P(j zCtXo?>WA{Tt5N>+qzSnfPs4O69NiA6yIZ0>Q--o#FO=K+qr4;TGrf#@wvu|b%2*LQ zv`w{vbIWdOnQD;70uRCUhmDSX21dJ&S_9>Gt@lAo76%+8OBeV#?x-a{E(6y9wFX|< zSf*bLBeRZdj*<*9x>bjUg&316!b5P)Gb8K-_0(zVodfE_1<x%uDb?Df2K!~KExRRn5$i!1M7`*jBhnc#W^+?Y;?pq+Kh&MA7=i^DpovP^X#T} zuy=Ra+AiJ?XWe)|Jc8ggfwm6Nz;VQK%!>Q4-FL=-yatfpFZ!yT<-pdq9MMDm1!bd$ zoNkxkhwVIqd?tWA7Ptyl2ryUBvEzU`4{Nqkn2S1u*TLARQ^|g~=cfAM2v7FIt2fEC zz1gJCBYigMvq_)thkJAZwU`Ui#~p=~E~NHZNVz4X!S&Tk;mNRK@7TVK^p&L7{L&s6 z*Sg9N`@ISxgl}y5VUOQnOv=7EI3HFo{R7JU+N_+>KA(>G`Lrr1^TSnN8ONY{>?tE3GU58cLj6v6Tz;)@84tS>Dv3)*CybjQ@{XvT1 zpr4sFPCH0`4*CULU#AZGotjjq20`nkUo=QNIdbYnwP1PLzm8;x(PGL)t&c)_oOXhu zDxy}V|9DA{TU&N+pE`MyRSUJk$9uZGlk))5w7#CSat&vKrmniZOMIK_E zc%>plPwxt=beQwsjttR9L)xN9RynqW6gyxWi@%Lr4{MSiBP(cRR?xUz@4(u_q4s1K zUJFX>*Z^a4RL5BV+eTz`j3=2ua)dvQy<~qnkD%=e^XqZ@o{p)ckA%AXI>q@t*ae=a zpxhB4VMRgdR7&TA)KtDdj>&xgN>~>iSHD#qu=D+^Mvl|+p?!vTDuDK>gJWM%d@7_d zwnG26)zzH}{r!XIg2b;bEF_;L{x0q6P9>m!3?zPIq11mXXi7oz5=i`(LYe;+`qd!) zgWmy(-%O~avQ;1rRpr09TX(%2W6|lvR72KKYo2+H`(kan?bO3!KxNC zcektqsi``D+^6bjTaH5HVQ{4sx9cd`gy?v^3(uZ9bv^-_Wgz`SQ?%3m*Y*sLI_=-= zneClVQ>mkp9(2!(okNUf&l~_f)^d*e_Z;=F)1;9}S8MC2mO2^(Nz}jRz`i(OH?4ce zP@D(g%w=YmBQPh->5}4yvr~%SPu(^;pk3$B?cy?VjD?zbR#>MpSHgT~;>_SO@hYy% z#68yqHNx4e`X?L{T_&z@>d1ec!acW6t;{vR9{1Tg^*Y#OQ6w(&rga;@f9mo_L1JsT zOdRv!CXIO$doxwTc{Rl7J79YN9xMBGJqu@TBfHX-7LZprdl2NT3j@q#|6V^e|y}z=mRQdK!S>eXbq5Gm+X#?hcsNRHF4jJH*wz#(>lXd zP)$qCkB^xJ>$)K^%bZtdC&p}n^rbP!RcijYn6n^LVl1%9h#6sCR51hOO9|JBeVKDCTr0-2*ZaDcfPS1-LR(QnTM_BRD^Zb7yb=}Z zj7c<9DaC;4F0m-P$Ci->uTHmhpe8E_rHQjvCBfW-SU=S)1Sb;4J?;7X2#Gr!BinZFp;b+@TXD5a_OaJCEU3JcRw z7M>w~2iL4Rgjc||(4C>N7M?xDT6iWEZ{fL8yoKjS2^O9cjj-?xD4Ap`X>fHqq~|i- zA6D|&7Oq0`ES$HqEnJJ{TN}F0>{$SH8LGhgx@3OOd<(y}bO^@tBRva2f7*W`MY0eg zncJy^(j}07tWznaOCkMIr!q>HLHeCemDUf#;><0^$>!hn++r+gzR^)>ZD<~6R$BNL z_(}`ECR1sxfcdu4N(r!gRa#a4yQ3?u$Tf@#T94nhO$>T-%X{!2EH(n3TO1k9s8&U_gOfPCBvETamPW@93)Kv`7EGF zplt*4de>5J6wS{C;B!Im0*c3k-`?Ka+f*)fKgdu@x1n?drK2bvtsa8h-lT~q%|Oy5 zs7la}ApL04CzF0W=`%^6P5KJgX$mMkm(nLFeTvej$?^<&2-PvRHYCGIMv#mm z8BH>lWN(u3BnOgABsqfQXdUBB)^QuhlO~m9Cdq7&y2{hH^bS%p^=)8tg7l}z{P$O{};<6H-ND0E;9MGo|^ zkUT6U4<+PbC3rAZsUr;JI!6bPWsXiD%N@}mD;+&RZg%tmS>+f2@(D)*$ZAIt$kSBU z8LI0X)#Y?z?WPlJcR8{4P|~y^O$4Q*C>=}b-jt3f%LLLSl4b;HMmsU`@uW{BeJ1I1 zNRvmJnWV`l%L3BRC4C|37m{WvX-Y`5k}OM|*cxS&TTZ!^l)IU7t0?ygC$@IA6I*+? z^HPvC&T+WaRO$?sI!C3HfpIzw^l2Jc$_2M)O%-flAB7s&!fgy};cx?6IKsddjxw-? zqYZ4~SOZ(Qw}CAjZ(s`#G_ZvejPW27jWm!WjENve8&g3h8+jnd8?!*B8nZ!W8aIK= zHs*rNG424FXUqpV(^vvB-zWh&$5;ijz*q}%uCW1Rp-~R9$aom!LSrk)rN-kRON?re zD~;zsmKraDTxaYBx!J(}tunBGpD?h0t7+T!ll~y--ywZ1=>1fp-~PBDHQMhDD4Xo( z>;p0TSs+vWf;F7eaBa;0BnpCDE17X|XLA3pz7=NHol-i+WE3-YL6 zFR*;VA7iNY#~7aV#~60|WBb?mWBc#($M)avkL`cZAKU*Oe;0V3Y4ri0`PLwibF521 z7Fd^ooNG-4S!m4yS!68*|NAWTzu!Xt?@+py(lc$;=i8{CV`IGqHr6}W#(E2FthdO< zdKcPQ?@}B4y~M_TUuk2%m)h9x>ul`zG8_B7+{S*dw6Whe+t}|_Hun2Ls_Px9tCs3I zOm)?h{wV1~12CR80T@qs0LBv$fbm2HU_8+Q7*8xbAOPbk0ON@dz<34*gh6Yh25f-s z%?x-QWKO^~n1AL39D#H}Kt0I9fNww+1^m*-P%8tr^oBK2fYsMf>jDBmmIVZYEDvY~ zvN9k9w+QAdamQ9lX>Pr-6SRA<2?!r`iFD(c6nQ-oKlp9m)@zZ}$0SD}R0O8!lPx2uau zzd&70xI)d%*$eh-p#CCFsZD?j05`xn7CgX1d=v2#xi!M~N`Ad?c&L@^A_O}DZcu*H z5{2go;-`7gZ;|kF!A+!(n6_8&bHc&X5*_S!IN%1AIxR=|CgKs(G$-dr3ML8W3Kk1i z2-XPJyYme$zW@-o-vP55Vg%p{Xs<-UBEbqkY@bbl*sptpHwc#dbGf~MnD2n)L3eHT zv`R~!%JT{{WJ0Pa#R&KNFyy5IuAO@f~bI@)vj2*E_b9Kj;N1%l;*n*?hF_X>V4cpPw- zGOu!UkoW{+0C&N=`-Tf2LwxmB(}focE)d)#xL5FVLB~bnS8%vsuHbY)9DkdH?-i^U z{9I5)upftDC&A%@(*+j@ZW7!p__?4XQsQxAN9Mx?i{Pnw9RKBl4YABs4@ONeLNHM< zN3ce)UQqSqauI@wf_MPIdWr zlrc##SFl*HLU4~@gP=A_$_pk5<_Z=IRtWA9Y!KAo_b@nqA_bEKa{#ejbA=ZRmW#eZ z_#VLqL2Zoq6HEj|KS{#Ng%^!weT`twIN^d7$?Rv3V1r=!<*cs}+yh_q!T90fb~@fg z2$l=h2-XX#E5%MQQ7}g^DTDpx2<8eF2^I^M3swl$2<{PV5Y#f+Uy@)$7ISSPW29h` zV6I@XV9g|sH!@rN2<`#grF!Q!5YErtGnw-n+&ES0$ziMz+#}c^sO55gq+pU@uAp-k zuPf^F*-l-@7$KM_m?KyuSR+_3sAfw!H^Q%kaD9>}=$ym#Xct|Gh@A=x`la! zV4`4-V3AUr?N=ak&DE?V3Ac_NNHJ zM8O=vBEfRO8o_!&_-PK87pz&zyk1Z(lYGHM!5qON!E(VG!Fs`*I3B@7!5qQzyE(r`FybEOiGn$TMS|smHEvwR_Vt4BgCMR?uxJhQa={wGdO`U4 z1ltQH3g!qF36={++{^ZfZd}JaN3ce)UQn$U|AL8vIfCW)bAF9ry&#-iP+T>F^@53I zQlDUrV7;JvK9v!6LzOx4xY1 ziv-IBYXs{BRfYH!Occx!ED|gitP!jiR2!wdV4`4-V3Ajl-TGLH!+3g!qF36=}i2-XY2PvrRc zESM;mBUmH|KNwVaJdY5ptmAnMep06v!1ezK!TL{`kNAS~%fDoP6cEpYonJHV6D&U= z>kC13l6j6`xnSbIL@!t`sJ<2bDaInfobQAS=6o+)uw1Z4F!2ZRBN+7~$9eP&W8QC! z^?06Fru0G7c3X75v*^?`KlFT zgkYjzQES$h3r2*AKf%0kZm;_G;-`c75lnRR2q`C+BUmI@BUmpO5h?b9If6xk^@6IS z)F+rInA4g2vs^F{o|(b^Efaj1j_|$1nULW7>P@; zT(Cy4UQmq{JHc|n8o|VIQmxW)GL@MST0y2STCq9 z7kj}R!6LzWL3M@L2__2W2$l=h2-XY2yOxwvE=_~?YAg74Iy_qi7z7v&*bFcpFj#v) z-=@Eyzpa0%w}fX#6C9T~Mmc6VZgi}0Jm7f5@tPyV*~!`0InsHhGuxTtywO?cTlt`2%6Xm?OU(3e5K2f3PcYu3A2Rq-FD@=65!Kqxqrc$D9AqT(#)YVttEEEgos{R*Sk8M_Zg}(LOXQbVlg)p^HM- zg_egt5?U4dO6cLx^(`N5`FP9SEeEw4(W<1?hE`iz)wVKP4{Dv#dRpsQtxH;OZ2flY z+SWmBTDO_lW?7qtHVI+*VXMO)32O-ZS6Jt^bJ`ZRUDx)}w%gl2-S)k+n2U~xP4Xo zJ?-CW|3UkP_Q%_Q+y1BaojN3S7}MeA4l6s{-=VU@iyhwT@Lq@SJ49bJ>Y^DJ&ABKn zA}-?Fh@T=_M21Ipj_e;fB657>-H}@&Ya-u^{50~{$cT;uI!^95yW^scD?9G$_-@DR zou734rsMgJJv;U9G_li&s5wzLN6m{`7_~0y!Kf#rYNBeRK8^Y&>ReQC=a|mDI$zv* zQs+&bYde40`9$X*I}hk`ahH)@vbvOZdAiHLx}5FudzTJfyL9c<_42M+U9awXQ`e%d zE4uFNx~J>Gt{-&$tn10HKXz5oEuyme`W_`>b7cB}68Vz<5B zUhnpPw@kg({USD~$D2Lg z?cvw6tmn3#KlhC5HL2IMUbB1M+Uw3LR!U7@;!YofZF3ozz@-^Tj;X1>OkJACAxi z!2ck%Mh#QjP~`xiE=@oK9|QQP5{`A@2;@Xm-F^`gpCHR>w0 zM_mo?j<`;}1D8k|)ExDVx)FZoev>*2mq30|H>)<~KS3|TV zYPhykjnJ0C1iV~brmav}@N4~v+FdGFyIalB?twQGtWx>fYBd|)ZZSu@SIyJzQ}f{s z77MivYKc|`Z`gQ1Ez=%UCE7#kF0EYMt!+~GXqE7`jfd4L?GZToJPL2z*sAW;s?=KT z3AJ8(T5Zs(RT;c@;Q?)@Du=gVY|@@pmD+RaVeNVKsJ2UOf#3LV)m~8BwU^Z6+H2|w zcq7JB@E(Vq@WzX0;SCqh!y7Gj!<#H#)P93sR-RXT;q4T!Xi9rc)3gKdwuv|3?GkUo z+a%uB4DArSE#h5xJH&gMrG21o3E*(AmFtHls+XHulJTm%a zkZJ(7fSQDL6=tE$6&Jq>(zhj9Us8Aw^m7aT3G&lh4ukZ&<&MWZ&bNJw#{q~@`Wo~gKWAL?NY-*|I+1= zAbE>8THdZ(s0Dm$=Nf%u2wU3~%5t0%IYq+pb8H+BZyj&-`J3XP6mK=Rz>0Z8K*KTn zw(W)D=g7G)IDU?tWA>YRDR}d3^A!b`gNF6_Gq88KXPq}-{|3fkU&m6vx40g2bB3jY z{Y}(^++R&2;d(g|-_~RMAFjgjuwXNK`{`-)-*+s^ol_@*=ls@~UcVV_*z(Z?963k3 zO@-VpJ5ax8-3&+@E3OB5IQLeNzTRr57J(*{e7<+zB1k{A45hDU_S1<*`;pNrAU85* zC0Y)`x<0ynEoutOLG~}&3i9POPlLQ>7RG#LCq~%)A1{ICa4x=6`jR!6-nkufXG}yH z8FK(M-DjZXrz_ru^r|(Oez_~k0ZAwiKRFF#*HBEanD-vo^nDPwuHpui+*Z%G#N6*l zpIh}2*o58M0CMI)jC0E4nA__Kl&LqPe0&_rZ{}glJ?}($Y#wUDCZo*W@D*rAkQ{s4 zNl3f8eGl@ZlwUwTbeS_-sdKcS7W6~^k(9gicC_qB_Az$_fz2wCXG$b z>@2`}Y^9?pFbTWRH1kdG$p0C_lf7s;1F@(jbdyubU}u>R0;thZt7 z0kH2u@}{X+cG**?=h^8nrFo9x*~WK1xo`|`gP(c#y$>>L*{2{KeSHfZ z@xS~w_MH{CJ_9AGy_xvyo zI<^H+!>dNL^X7{{nYv>X>FDV87cxS|0sDGIgZiucM0_2GTwfvubJ2*0#=5b*9-5o(y_y~MwM5mVFjpCyuct+Zq6J%>QQ z;eN_-!?$yBvm5WbPhp1BZf;1YK)Df+-vCX6@{!h7P(BLCF9fw= zF4TrUA2Xs3;9Y<|W=5PN%>!h5UBDLr;#-xVd6+591HKqE4>P6(z)t|p!^~+B@RLBp z-70|ihBs)qsUOhCZ0cm-rvm!81#l_w(*S+Uu1*F1Y(O8gEY94P1NxX{JsbF$fWFxe zns0KLec>yip!t|Xoekd!Kp%6bbAeX@eaxR$0-px-F%mn*^zZMX8e49bwcL4h4b!HpzI{|(3*JcR#>j8ap7j~0+=59dW{0(N0 zo_PZxzDI6`f!_m&@1|oW>0w@ZDeyO8Lj%4@YW9Hg7C_vmj2S9U)&lyNZ|(#Bc0hau z$6NvYoq)Li)LaSt9{_#x0Oq5(OBWE|$2D2t?*a62zhMse`v86OAZpq-??)Z`<^!ex z_(5|J@I#ol`k2X<5%R-;xNX@S0{$~VA2Zo1aL#4%%}BI^XMO>Q+hx5YzRe9F|ZwJJ;`Mm3acLMrmj&}p_xqv>bXEy$f8MZh;-<*n> zGx!s8XYeN=_!Dzz@FyVn)4K!sazNj#@a_bD1|WD9^J?%apl{B?+!{B80{Z40?+w7u z1;jTRG1vCYNg?=a{#9=1M@{ya;o5 z&tw37a~0h(z4v|K zHv^*Adp`tz3m|&E_haC<0;1P@KLvgppbvYvF z`vpMXd=b_T&wL5cH(!R;!!ut2#O>AI?}2|6&^KR$1;jHC0fM*vKLPIq1aJF~1J3n5 z$m}k^1@IYu8gQQ92D|WlK=8KT0em4Kc-x-?d@&$++ovu01VBh#pLXPv0U>pL-0W$V z0z&HgxX#3!3h0|@x!vk8AmogHBH(@g$$)S2mjd4Jp9=VZe;UHS3(z<3@t+O&UVk~@ z`~5QjKj5DU-wy&p4)|vS|3^UI{K-ET&~I4@m~L4G*xJ$q-!?$JT}v-uSIauUg)JLE zUj&Fz1EywB!JP+L8zSS<3|C{wE;50MSwa{&PUz{G#O`@LvM@=2tC~z<&*h zuSd6(fjJBfxtAAqP@3zef1E6otPhAguBcN}#q;3G*nz{*;ZGgVHDD_g{Lx8^7p1K+M#ehD}Dc%Bn2cU0u zrfvm34Cv!z*=>NArd|QcZa{orE%i#^xFrbqp46)W_oZ$J<#IsZT#8yu{8m8p^wfud-v)^BJ@sMWuK>jOp86>8R{~qWKrtJz`p_rS(N%I;8#=s3Ch<1ee+Q2=fM9B5Z~WQ{Sx>$0CCrR>eqn( zk$M=EZv*<~d#T?7|308^evo zGC92zcqbraa{5%@a{(c>(x(A`1|Vc|`q{we141UJmjho22$`Hd1NdS<$mH~yz)t{# zOirH-{A57Ldc_r|-0s7|c=?w69075dS zv%v2Mgk(;G^klLH`3FI4yl0;Gfdh13s3%0nlr` z3D9qSDd2^zHv?{Ny#?@jt+xX1XuS<_cLMrmxb+plcL73jw!RYZMXj#}%(mVR`hGyn zZdzXpSZuumlu1C}9BRE2@Nnzv0gtxc4LH;K2Ee;o??ITm0a4Gb_X7TX>wSQ4Ykf1| zJ6qoh-}?bEinYEC@LjF%0DO1r{ebUpeE{&ot?vf>eCvAwzufvD!hZ!2_0#$R;9mtq zuW$Vj;163r4EVFwj{^R(_2YoQYW)P@uUkKfkiP-+&Eu_~27E@_X94H6eGYJb+ZO;A zw0#Niw6?DRKD+I!fTy=T1b9x{*Ae$zK#YcM-vquA&^N2vz6E?Wpl^EGz72d0AV$Ep z?*guC`#vb^0r5SXwjTmMx9!J(7qtBp@WQtLgzsiR)PLL0fj=M6H+^lt1l->CYfvr* zM7y*-47juHw}AJyJp%aNw%-H3uk8V$0WtEnp9=gkKxo?SrvX0*2o0zG*}%(y(5Ty&1Fr%?qi#O~ z_%tB6rTt9c*8pN9Z9g0MO8_Ag+Rp`iP5VkvZU=+}XkP{VwSbTS?LENn0EBkb-V6Ml zfY6TG*8%?rK+FW&Hvs<-pl?3iz7hCm05K}HUjY1bfZ(q73xR(D5IwQ|dBDE}h*6-u z5Ac`m{h<5`5WLhr2>dsIzWHtYHo!;QhX5aMzZlST>;UvSh7raGggo!K6nF{{dS=H6 z@HRlm@QyveI{_iXJN5#f3kc5a*atYT;|fsb1A;R$tT;AqDL;GT{G;AI^L0YBd{3HZg1GT=8l4gvmqM-}h~9n*k6>No=UtBx7K-*j9H z_-My_*}1AJEJD*%^u zz7p^`ov#KwtMhii)t#>eT+?|6;B!0g1l-j5dcgk9y8#C~-vGFy^B%zA&U*nb@4OH2 zg`IB(9P4~5;CScT04F=&0a)(5AMi-$1AsG~?*_cC^SyxAcRtv%)cg~UEu8^fVkPV% zm!*3EUy$wvyga=Q@P+9OfG`4+0j`+W<@H zA*`4$YwZC%y>$oRiq>Jk=d@l5cvkBO;5n^(0MBdP3)tPd4{%NE6@Y772Lac&ZUa2O zbqHT>j1ZQ zT@QFs*A0N%yKVy9+0_fUtLvqJySvr_j&^MTysYa2z!!8~2zYtd&44fLdLH15x;6q{ z)zt^MzpEc`tZNYPK-V_FtGk9^SE_XNz^?SMuG;|rsp}PhpXquf;J$QMi?z#i;U%T!E{94!R&8yA8ydJ=<^KJ#)KJOmD;=ESC(!6%Ssd=4%*UY=u+-}|i z`t9cLLBHL+9rXXtjLv@t;0xy84|w_f2LN9<|J{Hun*UzFtL8rlxPSf!0LSKk2ylG< zhXD`F|0v+q^FIz)oc{^H()>>XPR;)`U}gSi0c-O=2Y7h?7hpO1#eyDKj(!LDALf~h zdSDgWy=Ve(bWs6cqIk`sm4JV>=t{u9UUU%fu0>hEzgd(6eB+`?z`sSTN6gz1@)7e+ zgnY!j3n3pd??FiHB|ykW%=;1Y5%WQW{GIs-LjKNt3?YAKKDFo;z|SD$@65j-Gb_0Yd)4`~+eCWZD<61ngXVCE(n}w*Wq4 zaTaj?;vC?@#kT@3UfhH4Yn+6TkC|s8skW>z5N##c+W*h<84}eAK+$$G~V+O(s)}I zzZq}4Ix{+!wA{p9Yx3%?;3=}w<8cTLbiLK zLCALRUl6k0`#eIndtXGz4)0$PvcvltLUwrHK*$d7-x0FI`wxWd@Vc7Un*MGPFN&iJHx3_$w<$Em;w=7Mam%1>uBlSgmF~CpnO}{4n&*|;0m$zQs zdQI!gT3^@t*47WTex~)yt>0+g?>C-+4mkZJqaYzN__KVKG_v~}eIeN|==ltND!E-M=w|MTm&pq|L)#ttH zyq=ZMUD?0#l9hW_=2jkDSzUSC%DYy+W97G3{$l0tR{mk-V=L!$FX~>}y}bL}?%wVl z-Fv!U)P1!3echkz{zCUd-QVv1ard@Wm#(^F)elykzPh&hJGZCJ87)5nd`?UIU!~2N zEhhn<)p8c#*)3NAp3{;#2BirLyWzhNALJL%!hbJc{ecB^wO~ca{d@W9&ut>ki{HPPKJz*J zK9BuzU%>B+_k&t=8gT?`5!d2S z$F=5HSOfYse!s!*Vf_9Zzu)5bKlnX@-|sMH{~lxSqxk&+t3ZFm==vx89>ec({0vqJ zJgyYL`rm?mbtzc>A=$8waW`bu-H<|m2MKT=)-T>|=HNHi`v_JpK7w_NkC=J*&Bu>l zjamqMF#jz!&yw~yVBYx_5AFkI{+XngEd7|d@|~m~Ganc>aB?B_~552}aYa9Ll%KHD6gvVWHHl4fd^Kb0)jrRGs_W5`A`6l~( zzxR@JnBE7GKI`FwHvR8d|L@u75A5?t_W3hB8UAP9GO73fvhM$~?q68ev_4zXS|2TGt&h_z{n_@p+&<5>&z1JMDy{F+W8J;>xz0W} z$nzvv7?{sVrq4e6TVJ_>^>9es*e_#kb&v~^Eg_l%AAh<)Di3@zUq?DHP`+%wOX zTb?O%gMGf#K5xPEAI!d%x8V1nx4!jR=})vy`nPwaTlTdqOYdtr55I2wR<%4ZH{J5k z+<$C6t83DK2>AASllW>?x}`dAY3f^eUOsgxGDsh7-ue(S!L9jTrLTUwvHAe;K$ z0@$_}{u5~bjNfPQ`xJg3LpncB?OgnRJU@uvj@0#wPfzb$+?(FAWFwxF{?5f0;Mv`_ zuVpoUJERQzTGB1wSh5PgTT?3)0sw&Z0b%{`HG*ob%I@m!(gB=Cbr@&%6uxy4Ew7PWlfc?#$A==3I61U2|T7 z=btUTs^c@KT-EV;{2p9*RmYd{di9LDzs2vl z3znvSa@wkvm(2f4>+esyvF+iLe%^ZDvQ;ggXkD8=tLw%&FFXClIj=wcb#wN${55_p zt#>VNY5m#qqjMi#UYz@T{QMPH<5!#8xngSWUCS$Y9-VvXiuLJBS5!bR&VA1r_qIJW z_d)MFXQW#mUcNNd{hS);52H?h+xEOOkIkDttE2s_uD|dxpD;$di;?%A+m zeec$ub?eXX*|2fz;NbeTtGBE+n>KIEWO`O-fNjgy2J++C>0+(FT&mV8)45u?vU$Jr z-ki&11`5@wVs@s#n5|aVNF+vI>!SD7YL&wN=~})n0S!=}z{Vf}LHbI$d=)uXnPuR$ zwueRARi2tIW^4K3{a5F6H3m?+6rKSFOV#O0o;4u_CW%#3$QDsCgQe-om{*WhUukS4 zUmOqOFugTvB*#j5DqpG1T$U|P=cPzWuYZZP61twcPN__diJ@k<7PAx8NMa-p^z_oR|3INQR>_y7yh5qZSi{v**CvMDpi~r6kVt7F)goS6 zsDVPRRw$RUl^N!rm}HpZTKnE3`HD0`c7HLyBR{!6ukG6_{;clxg7sJOXx?2~=>@HD z^{IcC4M9vn29M@*V7RS?Vl6MsD%5yFL5wx)Y^lf*`AXLEw~|>H=N~qdQ0UdWURprP zscg8XS}09O!ONAsh1!8#*-CaYk77t`YWVunTPok%7G)>mNCY8BP8+P3*4I#Jyu7ti z4mh~ic@G|~Cm#taJg#KuC?%$;=?HWSIptF4@E^(7Vk|O{ zFXkuENWyLEKU5u=%I6B>h5T5bbZ+OTl^ynY6s}gus^|?$h62Q12N}lQ2g=h$2w0T> z`B8{>_0Lu&wETe}-aJN;uA>nK7GUuzQyTdWf*-z#0|MjM4N{PYHdRO*P1TjBQ6jmJ z8*Io}?Im@vgbaJnXXNbWbr?3yrds(RI7jiaeP&CgG6!&su`ZN-=B6uPo|<)4%4LVn z-Zzj>*f#=4oTUTuY%CW9N@h8D&&qP}pOxi;F!BMZ_OX=fIGLyz+gkTs6d3uNnbDTl|->0*(r33RBxJUN9y z#ky=|Sl9NrbGR}F$ukxw4j!7u(4Y}^!MBh@_ea8)PUoljWM~=cfJ3Rw9b~4WSMDm8 zi*)pti$!Q$U{<(x=d)wOrQ%GCICvN=dr`JDR?JrrCiL4|$xcCqVk#_0u~0)qzK@2R zhORd$d`sEwWGPd~<_$D`i+n~_Y}$N&CQ~fuvc+nTsUaLgO=dC} zjW9&a^vtG%uYnF1(@EI&Ys|<@wU(dkMup0#Q9z?~kCyigm1@0fq+%6I4i<*$t17;! zZydEEx+^8;npsM;4kc>fMbHwu5~-@{08^QAJbe{PO+tE*grJt7-cX0fjlu>`n=TzYE{-9Znjg{SV72JHgo?eFuVym7Jde*{6I@}sFdH{?yHj*9B zk07}`JchPa%F|O&MSzE56b>CDfn1!Q;eZ|VjWyDhpi!b(!$H&a00}Pz+?6d<5IqbM zz6Z!dAswzQg|R|K`(Cyf^U1C;W8f&u%WKHXYskxdZOhAR$jfW$czKPfAsj=6ybRZt z{5ak_;H6#+TWlRX!Ln2RbLD`w;I1&zF~pOu2+BH=5po!L_~pJw5#!dU{v)ZQZ!K zXKhc2hLy9+q-&w&&D+y1~&Hf4-BqbyMFz;!S&}4Zdlj5Zhh~%K2zR* zb)OknyL$ENwS8MwGuqbm{pTaswdeP2S+{=6VDA8Z2KqLvAKb#wTTI`;)`2yHJ^kme z#&6BKwLR+w2G;d%UAuM7)(va=dV06?p1-lTr?=m1>o*$*dwaI7S-W-p+70X1ZSC*t zTX+7(t@!n>Sv%0Pp?~An{;li#R<9p0mt1qvMF2DSm)WtyKxe7ucTRKixHG%c3{?po zTMdT+Gh<_;IBUV!nFy6#V>+K92_BP^fgcDN1GO1;2c4Q@e45Nk6LF~Hw8~UPtG5m| z-rh=~mJhr_SH0?Ez^p1fCGco=znQG&%9Ubazp3u0fRc=ys-=V5&T?tj^!{QYC;2w> zD+QrgprNXbGB5*Si>S6{Lh)4X-j**x3)dW>^Nan+R4X}i2?x1B%w~qi_tdO&FZ6VE z=5(;aI0Zk+YfK6@G$yVc*-~~QKc)f{v`w3fnM^^=E&(x^5+Q)pmR1T}TdL(!;9%=!+nGO7gKl0PuXS%n z3A-;Tln!-o9~Di0b9dj^ac4hULe0_e!7Ol8DUz@I!@UHo-@Nm5%a1WQXb_T1t>{MRVJxWf zEMk<9fdC7=^$mj1sMQL1#-^O9I81^~l%ObB5n%C*M8GS7m5OCPIGm%AwQjazHZwC? zfwB)mW<2U*ieM{e9nfTBgrU-5G zabUOzv584YWrmor%%#(1)U6oa%qBN%Z9bUEY{7gEebo8{1689}lVPSY;LunjP324@ zeOs(cHTuWUdP>bq>7{nZU z0t+wIS{8=B#&8jlo8XDAH){ZzZ~Mz*3F)$JS;WRf*|y0(qlH>h1lpV%lc98}6ld^~ z$^K3fC;N)sxuJ%`5le>KCV}#~VwPiXvUganWdE>xk~fmWsP!({kFjiT%d7c(me+vd zkeo`KJ(9y{*G=|ok&}%< zpvcYY4~;lKTA0jV4C}shbhLeADy%2+TJsRDy=MymPLs(CP#WOl(|_Mp46wF8Y6G*rqJr^oV_dp7qD z+R3ffG!KfNo0x-`T^lpjPNX`VwE{H;s<(c)UWL8rr5-ZZ(mPS%*pFf8k`eBDqGJ4$m6y}^%i zGJ$LtIrG6;x#!{z&eJQOE5-_HH{K5f6(X&8O9Wg*#e@z@uE((oGqmG z_k_HH0wwr?C1~P`aehKD^as~{8tcfi)hr=~D}@QJkLW1bm_onWahiGKt-1Euz_TOM zQ&Z(iZ3ng`6=2Po*Hl-DuP?nC7O$r7~(p@PmvqI+D+o@tlA;!J?V*LZw<8En6oh z(|GwUGuBzv@F4Bs`s5ZSPh;&R+&ZT&rlku%^uYhnf%miyhf7HR^Een_&Lv9N7p5@xg_L+#FER~|!G_Z}$JAjj#D#v-?s zYD!?*BH6_o{S6EZb^||LUM}$=k*nexYw-wuFk6ebL_g7Yw$ou+<*^5TZ z6hiwiSvkzL;&v*r=Q`nzJpxtkUNW3G2tug}cElRow75q{%F`7D*tEGflc_2m3J+q! z4xGA)gD)32uu3&4ySf63Tg0)97XKyIk0pgb`{WpU3RVy6w174G6Os z{~PurxD^09HetC0I~r`l2OJ_DW>2Y*<4cZ~Vdt*&Rh@gVB;*qP?6i#a%~DYv(iR7ob|jEfg~Zl&;x`GE~5vk+UF^`w2W z8_;|Y;V-)~29K&m-R#I$K+RO~f>`9{ZVZ!=h7eT9N@X(zvoIxDg;pJX)oM9cP(7*! z<5exo7*!k6R*kwacBq}!Y{^55u(;z(wmcTlidu)x5GGw9a13EMFXbf=1t@zyw*NAY zZnALuYQ(vIZOqxTK5)|B8aM{ZSd7C2RCnZ<5s09O(~VZ4KYL5y8c+!xxVK2M))wQf(KUW3R1 zNLjyWBnJru0qqzTxEV2UpcIx5N6P`xR-0rKnn}f3bJ??fWw}GhWW3OoImC4k@sO#h zV2lu2kAqlsBxEhi;Nma4z69e+v)$Isa|A(xtQ&D4UVl*x#sO)HCIIoYH6R=EgdoEQ zyPCMDG+We~%7i>AJLCnGq-aeLmz~rKZmXv(^8le><|a?qzT(JQ4iN`yA}URVQDTH4 z>?77A4-x?{=UyR3XM@EEF-CRKf3FkO=sly8X{ zir~W~he7)9XB2EVu~kxGYMcg0RoJO|K&v@VsRaoZys{g0yJh@^oWhnd(x5X`gGIgXTr_;{*8K@M4yrze4 z9EX5z1dmV!Wx2M{=D@nx?~us!MLeLm9}ZM9p}-KYXR?A+q$>rkm`yhH;%hhY%D}FX z4-TG$QP4m-Eec865}_MGLdRto#m99UPEeZAMiqu*QIhDH!`#;;QHQG3p=0w4j{kQ4 zH#{DuA6;q`-h!GIEOKu@D8f#}4DSBs&@oCqXuKB)&l%30=>%be#|CNX?Fo z^g7CPuwWZxY!AJOJJ^avj$unQE|f|QB#=>t1ZpnWTICkr*eSKJ(Njv80o5P9GgKv| zRJxNYD6nki(c;Qs2|-mEIf-u| z!eU#p#f!^5s+`EiUVTLlVbxu_L=5pYZa2p3q|wothX$8~*zyr4eWM%ZC5*L>V6!GR z=?Nuc-_R}{35`)9eo+SK1OdekEfGr0=q%w_hDK^eE7>K6oj!VENup3rLe&&}8`T`_ z?2(p=5M$Co-!bCLvs65drN**q)Q5*hFDhXD0xJMB&Lc8O=)?ZTnaT2WRkC-r!)de- zSa6wCyV7X`h^s8;L!E~_S#P7*udHf0X0joUHyhObvJx_5&)-C8$P1PoISJcWnZRtQ zq=jIroI_!tvlJUyQ{vg3Aooyq+06qgcY@QDj(RXJTMMMCg4ZJUE=h{bm_VkUQy-M2 z3zcZeF5+bOh&cDlej>>NyU~JD31KYmWV&ud56ToH1Ui^_ic_S+gQ^^^>>#FFA)r8TKR!AjkM>%4ZCfHUBP-oCU>Lh!J@z?t1YjGF0Kd8o{{*dyM1=&)eZgwTg z%6vuLnf-MH$BkBG*$I#hy^RVJ3(QhjezfUWX`-%8n|okvm5_tfd0Z6i{MLQ{Cdw(A zTDBxFVq{t@oE($afsV)#Tug9dA&GqNwt$9Ia$;<8H1vvY(G00jaf03xNqx8!k@XQe zEpK7u0NX=*Y2d>AV*m8S1kFStjn$`p%;gvNmjSS0(It!zYXk&Ma$LN%H7JGQ-85Sa zG$EPQro{+p!(a$@-;iQCLe$%k8rC3Wd6XR1Rm?-Hfozwb!p`{e^u&QMR#3hQICC;v zIT(7OwS!3%Bwb*XrMW5$c?B(?LW-3)9Y_SJ#nj zNQhS`R$<8Dk{IMef(;kQPB%$2vLzx6r=3pfZFjzyJt|l=^p`Ce5a6^>1skoYdqKX3 zp=^Dj8ANdkJy;A?pF)~zQH<+jP<%oU@=j1r7plKJHG_r!0}-$OOGaeW;)okY5ZzT& zfRM)Q>qud`kmaSBc-T-o3F+1X%N$WT`wKj08u~H^r=WyXGR2NU3HL@A8Z#_PK|Vr7 zB^YK=VQfizSX2ENYL-CaHNfSvX{s*z+%CP{jOv5AD@HCNQ%o~uBhulG7u=KZgZy+<-KM3Qr*xA29M&@ECh}c@-f$rEG%m3 zfl`q1)B*h*W@W{}Dl%PA7wT6L4ws7AqdwZvf;dqpLX5b{r3RQ3ntAkwuUDvv{XD4usMK}>9*AUQS0vrXg(Re}$trn&j73bET zAclGkkvWi6I}{pkEEW`LTV`|p)=AsBn8{^`z!>T{JL&XMltQgpE zHG~><%=BT}cC5L!0?duhFh1KwWY>E(R2&CpPBp84d+wq*V1k+P8D&22DKnAilA&!P)vg( zVfCDw5WuHgTcv2O3V|6r{FiTOMyc9BQQg)yP>jUgY_PPTGBGdY zdqN2Cfulsz`(cQzR)@!v+RGZVyQSSW&B{=AuS!xXw$))aJc?{Ck^MJ{2OC3xnBZ0x zOtW|_97=a^QI#WMWD3uXb4yKdA%Wc+!g$KNRA~&Y05qVbDSZpIZn@c zB81^FY1vmnha1e?U@q2mda&LxU^bj5P+^?pk>OCvwGD0}bLEkAXtanHQqpK3GDl|s zZ3vy{A^UO~(y@}dfi9aZVhKmzkqS#tXvo{(W z$S%(WFPmwCPiDL^eP+wW02zy7FWN|DSlOV{=*40-@yb9Gnvkt2@jPrf8`H{^8pBn z28mUC%qMuKV0p+!>Blxr?AONCtad*`j0?hDJT^GCa> z8R-92tI@>!+d8pKSlU?@lN07h`h>X6 z9WcA5s|R2$B?S3^*^Yg52c$rPi0mh2%QUaZBqse$Ft;;89LbX@+6`TT;1sp<3T299 zG}RjIhLWX4^{7jP9y_5c%@(KF8Ly3@lU(Zvrn&WQ&R}T+v~S`He)xd8!e1Ff_mm%EDFidwscSPbex*aSZ@+y?=yy)1OQTryBXv590c4jcZE1oomHG`sTogTiCjtbb58!SUX2 zaa2e_om3C%Jx;E&-Bh}MOS5iB7g>qL+K6i>B}Y+vvo2Y?LjiULoA2Rf;J9O4FXIjf zT5F>F2ei=W9FUyg&`UO8|DavL)mjirB8u@iAPtqUS)fpJJNh8*gsZUH#tnB&h>Qhe z0_s@z$DoUhNvX=gvVCYl)OkV>m)bxbDID>FP|N{K(FJ6P{McA%&8i&XmfX4Tyg~!G ztNf_FQIp3`?tH}CZXQwUD4HGz`EjD#WVm@m(V`IS>8`$FF}BW2w;EW8X&dO~1#+jU z#xLI$T8Yfi0W@;@V7J<0+^JOTjc{L8Wb!SkB`Z(BR}$4Li`O1&o%3?l#HT zjf_+$N@aIdvWDOxV!^O;0p+m{?aCL`CRsz1`^!bMUoNWRMWj-}qDG2~f+KWgvg{Ay zfs*92la$STOpzHH-WHR)L)}A>Qw~pHOv8jNsYRcRJ+4U-))?2!H)1E{yzu|_MTCEw zU_@oCsaJ zprF?BD)_d14XXX5LM?T&k$LW&Iw z+~FVu>XEuNkKS}y;UvDHIxkMCbR0ODo-{mnf(H&343!***9{nU#$X2w=h}we1t~as zAX_q*z?3bBhzptTVAYnInjDS|Z%=mzL8YW7wnl`#yGmu@6vJqv2yRZ}MoirI#*r_; z^NuJx%>#c9qp0z4w_(@+Oa950oc~Me?_l?PZW<0275y#dtsEI?Qec${?WK(Sd^kszb>% zkXy+lz3>_aQEekmVTXvDtMj}_1`EqHsYnWzpDyK+V1$g_&UDic3^vXs#VrQH|7kXL)1D9Y?`7o z7>2hj8yWW0*9xX>#qxeG`NW8J^Fp^%jnuP#gpT{NplY>?(<#4_=%^g4f5`fIJQ9p1 zyjC?%?2`+>VJ3k(%DOC1WiUGx?UYXYLNK`59njHh!j0Rz913DHr2Cj77bau2X3y$C zNJei`W{;hQF6=gZ3!jDC-Xk6=k6oXLc(DJXXXzH42pu^^TpE28I|j?xh#d8aZW)P0 z$c1I%#nG-}zzMSP91_KjTA_Lh$=*b94bSx_#G26U?V@_}5`aj8!lW(=Sw7;2cD5yG z^q_ew64d4(pYe&2VJ~GjWh;}N0tW95G%}e0p6Ax+!@uNv&4h)Wn#gZWsFda zCWggP-JBVeq=Fq${76VZ*nt~I1Bab?25xCr_jV#sN6UdHDlfp@KJbt*<)T5Y4Q^z> zW&1~Sn1-^lK)3glM5)SSdrFXK7%O-=e7aT&ieWZj1*xIW+%gTB$`?t!Z7Z=LW=J9#~`G$LAe$t^tCUC{n*&7;#!cZ3YO-M zgcPzTCa7*_qI8I;8!UriOByyxuJ0aHEYyG~Se>`%R(wefB3LDRM4oO$c4t@&tnpKN zoW)$tC@djNQk(;8ceOYyR6>J{<=7d&;@639=z2_zdSthvFam2S@Z`2WYNXJ1VkTi1 zI~0undz)@pCKM+@(YJChw(X~`qGQ)MF{`q zkYd8^2}B=k6%=$5Zv>_|hg0AQ(H={%0o1Z2%7IXHm>1Lz;DQGXFD^DNmPByZGYgCn z5%Xd>$Rh4som);NX)1PP)AN_>rTzrCHcn5EZ?LVO0Z_b~K}_D%r^?8loh|D4ytz+|R<3*c2o9lmlq| zjDzDB)bXK)RuSTGMN-)Zt3PfanxU>K_;E7YEWsehMW1=n`^#hr!j(Ma$mG5@JEwCo zBPk`F9BW213`70)XkKSetU{ee2xg}rps|5u@k{6&utS#~!50sxK-Qp0YSv z1f#rjR9)pb3O2lP>njxlIhMlZ2J6&AX)b0(!wmJgJ?9wC(z*kGsbs zXB&by_EBp(Ud1(bTJtDkif(=41f5 z9aR!mEK}xJs<52I6Mect(>g@QvlM)c36=uqz~StPJhyH-!u}9<@4_z{aK(jeZG$m; z$IOXL zQ$dPU9g|`87YS#;2Ib1k78tQ1@A%n;DcAztM-*gGR--&R3x;r&Lr?@A)>p1wlrJI< zvXblUOb-2qxAw{AcPMxE46(Gd$}8nRM`yDq(X}e9W{Bj)QWW`ymn7IgWNHaS6nLzG ztY*Ika=_x^qf0E&eC2Y#hFF=r+(Hw6W6WyHs2QiEh+wRkF}pLvI)zc(lsaf1Yp-qcR2WRyNIEeNFmhu$^1~{R#fC&qN*L{GQ8%k9>Q+vOQZhBJ3fbtc)g%jb zXcJlgWI66UMUGns<+w#9H^#K?t3y=9xTS}yn-xo8B#LeqfR|lboasYaz^dXrkFY~m zj40B2gQ<}PoDm#ju%B*KPj}0w4HWwt6gm$NzVJJ*!h4bXk43~p-6OedDVmW>mx{yD zs7I6_mPnT~$3e*k&90^-$s}~~E$y-)E$%ij0(7rN~UsRFQiIX%;rLhgo{y>nJ72HP?zbs;gEo$vEf4kQ`V6zq%rM!+N78n z!!UNVLM4YZrmTZlj2u;>!@xKO6FQ(%@N26eu*bONMl>MG8-}7Rlk@r!k_by$0z#T> z$_bsy$)Otqsfy^J&2s_9+CY|M9ae%xNsX;|M1myI8Ga;8#i9+VM1sUpv2?0Y)NsvE zz>~I`l&>49Rpi@9MPVC>RzYa=2sfO@GIMg2yV?T}=9lQfnSnH95R@<9KxF&|VsN}Z znlf1>o}hh!26}M0L@euYl@QDr_%Q!upV2bTtfT5>h!GLv93u7{1y$?%s#CQPj@=;Q zygKfTNMiZQC1=tw1CEs^vFD*8Ut*FSE2g5~Us8uK5BF0EUn))YiqPMlQI!x5cl)+9 z6zqVK1~v0t=riid3r$*xy~*YwBNTAbgW)o=Ekit-Y}t?^H1o?$IUTA#H8-DgS+jlW zX_+#*1U~5OZeEvS#1?gV1FuO9gdXkFllPo(z9 zN@}P_^9avle3CX4@e_E7dK0*~#)mJqBT9Epp*#+A`Ayfh;YCqI^Bm+nm-JkZ@s`RwxO+VJbm!SfyF%=`t35?i%yBes8ms3LOV(9B= z!gv!!Adw4l*(4YRH{`I(frG3KLtO|Pj`VK2q+U9!Qykl)6|p;S)ZsR5sY@(kl7)6= zrD`?U$UH@@sBHgKbfo^^Kek8l`X+R!ph@rn2K}H5^_f6W3jfy`X@wRE!CJ<~CfwIi zmBTv@7fH3JHh#Vw?G_83VziWVpZris-Pp)JUSnf~0sE?oqw*A)WgRCn@IHxa0=k9E z1CbI6eSAeSY_C~D1Ql%wvxZavVo*tAVI+D84 zvs%HrRn%()Lb;ev^y1d!`jk*L^(3(kN0Ws8fMcCz&DygfQ2Q6O?BGL4BB-1DM&btZ zZmgT~JN43E0vsm-ES35jud#L=PZT=Y(i)>Uou1>E_E2sd#NFb-+D$-@6e6Hi!gDjEaprwCAWDU3D*xH^7=wW;wQYp1J4h1JSez~cW_*Zq;pT&8Dv_&IZjfX3i=C&LM1eFEW7u%*RM&q>Ou9Z+cu~=$Sgy!=xT4#$pcp4mBcPuN5V~$_UwfQk(~fx z0&ZiaEF5qY54Jnc-r(UYxuy;&;r0cmq&)eJ5xVkq+-0a&lDXl-eas#Edt@0cF)_P6 zVzv<(zOfic11TZ(^h5X6mhcg!adMBh(+C2Hz7~s!k`I$P$pC5+XHE(v3_LF+8fB>%n7Gi?S~4m zXIP0c9%3gYPP0)b;}&xaVV6>1>$x)7dg5NjYge`8xnAU7S_E;Fus-*8~I9v z&KF6dGdzVtk{{zV^UJwmKaz*!t)+@kokcQ2vW0}DAimn_-V%jL@Y@zKH;F+V>NM4JjzfYOC+(!nyYHkd9aYKM0CxU69|PT+$& z4%%8ZCygEP<>n2n97HIw6)g0%oU8tzD?5Wmz=-Ug-GRA6XJKKz>I@9KPUl$o5&RMi{b*TD|$s?lM^nXUBnhVbslw4CHH%A-{i%HgmzEZ>43>pj}@Ir| zfwhh3tptYGeaQU;<_L;6Hpb0>x=@XW+{-+xt`m+2Zs=3_KkHp`-53gkMv4xV(J5lH zFoBx&)UswjYnF60`yd<`bgKU|=D#q3r6ub;T~dwlo#g<9T^*gK!zu zQ#5H6n?W!}t|OK8o-3D-@|`R=2eCA%IE^XADYm}{u~>)b<$+sM2_-<_!K4z%R&2O! z6Z)Q3V#J9M7I8wb9xt5+hhKR~3i-`lGw-_R;L#{G?s8#tN4omyJ8ah~a93M3JFccd>r4-!*D0ON}_s?0Bg9hNQmy<5<0*| z{5GsRI0zjdJr=J-KTMBM35mm6xZ;Z$U=@K_TguUsYxmLw&qm#yX_H7DqEuU$?G`hQ25-SI>@?Ar1^2oWZMOH=0~4pYs&p z75#`awOX0t4(g|Ac=?W1cC}8NLwU}*WT6s6m`;OLIY!jOg-W?3N#-EBWcQme4hqhE z(3)IOCklSFn5sRE!`}-%sA=qh0?0Q4v&7oM+!pU7I&| zTd8xrnPN}NlZ=7gEKf4V?6$0@R7v)AXDf-@yMlS(Y{6VBM}q%9VFpUQCs}W^ux=7h zHeraTkTICzDZ~O}JcU@ZGRIR$FWw)Xs6>%gj|a71xZ(M8Tubg6Zqw#98F$KBFMG>b z_Laq{=tdbC8bxH;1J-UUw;eS_gf;QPH6)PO1s76kA#v!HM3P5kY}U~IHOUcS-b@A zATuLHtCGqr(nL%Tvs*6ouAih)MeP>Wp9+|sp##fsMvwOlukw*uxm7o)YdO?DhbuG( zN)1t?F;Lu`f*QXQY!uc#Bl+4>ShT#@pn|%a-oz11Kg5MC&S78(A8`fyy~G8JKav|2 zJxWTW7!(afu$4K7b3vnJb>c<9hFfOTHO{Zt^L8R!bRd!CR-d8L6r5!Eh_fI>@{JG? zAr{EG>Aw@&m&6u?T~QF*q}0ufF5QpWqohKTlwqooueJ$A3J{~@Vy-+E1SOzq%7SKa z4FuS@Mkpy#1lZ!B;RJ^<12>n^cy9^3duVn4VigBph(^~F)j0GBDG zz8wxz24s{gbc6;2jqk*bjM~9)lP#)mAb*m*xw6OcR=?#lT22nd7P4wVLk8^C&HN^* zNHoM?6S-H{CrhArNpmoDe)SZVRX8*Z#DcNTI7EsX&{x&iELEZhl!Aod`hsCpn9SG; z+K$47>dp#Pbe`RL=qHtIDF-HiLM&Z|PY7y0&}3wJz8Rl1T9aIh;5uU@6)#kp$kUEW z7xwA#5&0AoowJRgq4m(s9@M})`x*-63*=#ysbl`lvtWTiRSJNzA`GYJbV4HW0XY$g z5avuGUOG+~3%-O(Z~3t4K_IN|__CpnFR^7t4BdA0s0)f*Y|-`k?7&y_!o3eFvE^{C3^01S(L`4J zB*BpP-FfopC*LE!DBEBYF9@z?Uhbe$Bq4W4T!f_7=m^1$4-rx@C`4$iukgyah{tF- z;!yJ$xU+#a>Mn(g_+-X{{;yUzIZcDFtK#xPsWHqwtbrTqf^2=>iUkQA?Z;=9aCZT( z@@gK0B_4zf7MZJvdokHPrlhbq>c)Ko)fp%NQ(4$iXT*?d&%hHOD&?Jv$#ZFDXTH|E z&Yfq~g$(&zqKK?n17xnAEjkn&cjJhB))%`7ad{AzQ)aZXbpJRs51dbk`0;iG8_afD zw}S~5US1!AJ$}4l*z&mI$`!g(j=TLNKrr#JT9T+y_WDPsZR!w+M$kFpP+-6p)2CHQ zwY+=q-NrHw-UU%vQr?aeQsfHGz`r`ZpJQX-mi%KBsiVMOnJ;ka{RvEd%)NHl}U0={Bp4NekRNVDhGD3I;dNni}wmSq6OC zRN-1?_Jgv_WbwmM9D}RP5SEm(gd4+i8ex=n2zXi2=r(52SVOwz*n@kJ1a`!lDf}@B zW;llAYGwwMym>D0Yf-rCP{d_s55h9DnmHiP?QoZo!U$Zr7YW5;!LJe5GLwTVix5?b zQ3k|^8W1;(Uq(@{1}z8bnG$Y0(i%295vBtAltAWLLWnGWxVIj7xAEp2mfWV{XO7+8 zheD6R(*!r^$R~oMcX&{!U<$M9GI=w;Wh0kHW3i0LJ2Prohs~SC8?z?0>36_=)R6n9Y{_ts zTu_Q-h(~799zcdzhLD)n0kY=!16y1%i1cuY41UT&%)_-0pR6UaA&zq*1lgadkk!eA zj`_>xAn;O*{mn?fa8VH{E`uL?7MYw3=~{rjGRjR@wL_SAzR@ma_RUt_Xj)IYw0mbu zc|W*>Z(DuxwJ?}mXRIyO%Moc`wvKCISNqXC%}8=8tS_zk<4fuI>oO`CpLAVb`czv! znrp1Av-0VF)Iu5kkUfOL?thC<)PL1Q?}L z9&O%jwpeL$1x6UtwF1(Rd>|uV!KnzNk)EyN4do)`xs#+Cs~}Q@<25BXRR|qj}jR~pf2EKVqK08nAAtiWLN?4kRG*tiIEG`tjg{jH=Bnv(PExXE0(Y$lfWg?UQV?Uv>Kxeg-G#sPBAWiBlsWmw}Xx1B((~q`}*^%5j8q-PK*=3xQGbnd@ zHKdgpVLMD&j)=;$=*+lYR|&hH>MPM+j9KWOrz6b*%EfnbvsDkelrxUR{oG95m69#P zc_+;;Iy^f2P!+v{x*4q_PRCNw!4lU@uUW$ueOk&N*UnKZPfJZlXH-b@f1ys+o3*Ty zi<5cpczX_28x@gAD>mz|mulqZXy`^s#y)Y5pa?9@P!!3HQ7c$HUvJiYpD^}@ zX8F#ZtGQsdw|#=RE1Tu1mc01;nV#8lN{k_W%MHR&Wj(C%M*G|ZIECu8Q!+S7QfWYo zv^n;AzEpJNPadM;LNgo!lQaMh%$JD>Qo%WUXwI1^!l($IDYzK4cl1Z;ZXENz?%qn9}tB=EX3srM7hoV&tRLzw6Fa&3kI!#4o zb~qD&5p}w8))*Be#2XE0&TQeP7zso1vD=cRRJ2gdEp$(uL8B~MCVe#=r=n8H9J}*> zzc_=ayD`&`c4|~sVufpB$aHNMH9#H#532E7tqIyz!acp5v9m?gP(exoK#N++mDIQTP2+COKLma1cJN1L(Wr1zesJ+7d}pTv{Xt zP#)8S%XXqkfbr|&pqw3iXTFKaQton^&WSo(c}RL4l}lYr(KI%}#5bxlJi+9vmO=dc?km_#|aT+@elKpvT=JC7l$KemXZ|FqXq$dSwgZ*c5Bx26^y z>qF*p-I6T9j;^a}j=gl2!?nEV084fWHM4l9VR{r5)E3l&%NYuXT{2+~KI|yOGsp|kPOcvchSH*SZ66Kj0 z#alY_VK`VjZMweR!a1LsT*4YuTQ&V%uFOq`XSK?fhV)lj8zNl{CJoX|n3Uw^4plGjP0Zp0KQ4*P^zV zdy(tNEmdO*FEUr4TdsuBHw!q9Z3ipOMyx4ZYtBcQmFBFb{%ghmY=rCu)-07C%xsmSoHugeQX+qfn zUg%ndb$A`t&Vp)uHdW(|$)&C@OM=mU-U|^wl3v@{h7_}e0}ky-Zm_AKCm5`Zk}t^R zp<)r0W*n5LVk8f)!-y`k)g4o>XNs;oGPIgWg@m~nGq!YrV~ zV-7*@?QvMxJLBtHs#>`cAdMTmu#-_MaGl#FO>K<=lAAOL*>Kc9I7U`bn3J7Gy6^fut*0{08V!a&yxQCq9=cfMI?U2EW41GoCAYomnc2ALO{ z)6tcl4PSN=);Jdi%*pjSDmxf;II~D?-PEQ7+PQtg($ioS>RVyAVvVZCr3?oKXhD8$ z)ZM}M5dNW->V|3>g53n&?Vh5JNrCIM$RM@jNWp2}O;SMDtKSNv-9Uwe4xg+Ww_p+F z633xQofhqOW%AGzPc7u*Xoq)i8V?)m*e&3Ob#XO>EuwYB%~#Z&2k;AxN-A{BzGzPM zyr*>@Rc%-k@l>hVHl~X=UKuY>zlaZt>%?+g`sB*N`KGE9P4mAX>|4!6T(YWWPEC>t zEo|nGm_{SW3?T!dLxlYt*sjAmmw?a&CT`}x<6brjVgmOBf3sWvV`VETG z&&G39XA@@$TxWNFW%#hgtzlLZ+Zbp*C1ul~Ts38n61qX~kLbiQnJ7 zO|v@irk^;^`dy|^L#`b|(p{j#ET=x9d*gKdEpOZFFxrx}#mTpJb*@pMLoW@5=Lr1W zw36DknHP#iaqo-oNKtJgi$Q4^nz-9y%8}dogx!&o(r)kvd4t0(PI^V+nB3EuGAE$% z%^6ogJ27p2r~wQ$hjw7d(#beyLLBf_ch|YZG+Z1`@%0M$G%5$qK*XV>(fGv)Z@m7| z9gn>`IdC|>L>W9}5VAUF(K_WxW^>1qjblh-r%(-t%}xzKCx{$pIP$C2gyjenxnno6 zrz(G_A-R#esE}+yO|Wn4ESKAuqqE#FNoJ~ZTDPx=ew-~ZeE71Ya)xmxIL146TYVuo zf#Zb6?ImIn*zKHn(PC%m}NQR86c;IS{3%CQT^=Rc`@XjUw3XiZUys zlf1Z=LjKu~8L?ZC;P`SMWh5=Vw5hAfPh~oL2t@<8lu;{Ip}?V-f`JXKqC(9RI(cSM z`BD@=;od}@%ZAkzHRUm#a4mu?G#)UdZe-!mN^$Y^K6pm?Eop>Jn%uDMp4cM6;<-BK zer~pPIIVXhcfI!3hr-3jY&U7=!iVE(HRkK2k$lbRp(`m~ZHe}-XoW$8+ROK)lI|8e zT(g8)SL2&G4VOa_%RdwdtbkLi&C=DdE`|C!V=rO}Tu&&#(!z-sx!X+uqa_QQ8*ez% zk4BAd)@2eYIr@aF1U&7-eN>#7@*Sh;urA!Plgbn3LtUF(tV3SFL2WC*m5|bqdB>Z6bXihm zv$kK89FDy;*%}d-E!x%G+G@yf6bxj4GHd*$wZd6|aMGd8TyIwiw{k_pGA5ZOtS&J3 z!Q*cf##9|5>BZ}9YmSxNaErW}9LwRmlJ&#)Zq9D?Z{KXc0~^TIt*+?mgy(ou7Q_6u zX7zX$+NT@L&)UBhc0DH!Plsv!^oUjNbSU#@WAjs(PFVNLu;37;as|Zqd6*KMhY7%y zj8hHc&{)7(i;hb=FNzAQXgWHTQ%<2_Le0n&e-+u%72l-gLU2}rJeP-gM$?Jf8O_0D z-mb52<=@$Ad-k`I`akyd`aVjDsWL{Zf$sQ>*NtHGq3#oEQb{HwR)BVjBwxzZ|G&Mr zfsyOF^88*^b#+yL6|0J*hVoQ%%VT;>&xo3CviW6O9?~LhQKmj@k{)?2W!UU4iX3;7 zRFfQ;J0!NMn#_uT9MFK2wE!8B5)DFcC`5yBc4b6^&> zG=K%znf(6eyj$;8cQwhDlpQTFWY>N7-FH9EJ@j~01aihx`kxtYyxVkAf zpwF&@Bz6=gvubxtOAf&b3%fQ&ag9P9_rT&4uL+V`wTL^o-x)U}5 z{G*M|>Fyr%B4g>5#RK8ABvbTj(1e7VOivwIc57(idQ_SwqSolGH5<&Mg=dHo?(LTP zY5DM1H%$+8lJU2oE@7zwvvk2Oq83K*$6-?Sq;B@JYPDDPq#FdxC*<$8mwQBD-1=5r34 z>=Yr=Lro5X%+Rz%>|RF_+>e#E-%13;rH9L{ZZFwOU?%N~XQc4L(1o4d;-PdcLahW% zdJ|0={-hqC6r~lG<7O`{Nw)dc8xe~J-+L>P5KsH8b!mKc%h6;!(u6DJ8fGpJq)eV( zvzE}Vu<9e=5G-DfTui7=13nAztzJH6p5D6;qQbDCs!?642hqSf@<}^Hf0g9%6j7+u zq_-IsQ8dck$6pd}RN@9wo82nf$0itEX_c*c^8fBGV7DM7cAfl|Ho%>X(jDss^upoV z*@cRml~5PbyXOR#J14q3x)f^Y*aKe#g^3GAteA$$Mf5@gA#H2>AiGpTEw4x)FJPI7;P;#Prdavs! zcW;#^-jrECXQsOg;q-v^-ft>(x+e-MP|7b+m?1UnNljo2>gnC8#f0e6N^vK!yW8V~ ztrFAFN6r7On-it)ZgozVR1{`yD%(BF({M;LCUb|7@&TRAEk)-al&<}-d%Q%-$wYOx zk)YciKAZc1cjst#Z-OHU_Sl3hX^#%WJ z7;3SA`)h-4UA!42F)mw^D%OJb5Ly>>+HS+w0Dkp$rt7ro?3FRpN;OBy7E<0NyVR+Lu*mbTC(v(##k zEP*T+`a=EWmnhuUn#onu5LG8|vUCTsTlJ*)$yKmvy=HOWXrrHTkky@EZM zX1N;^vgpWVd$MAM%(!JKv=GYoS4K6<2+3g|p2DGg2v;AIO zk@^$!NyT-qE%cIrH|F~rTRwu#nQ_uoqU^WDLmp(323_`1Vx`GCaYNT%i1ld4qZKxp z^xpl~?M-zdkW8;7AVB|DmrFK@CF_=ELejmU@F|e|dJxZ7)Dx+oAX9q@j)f$f)ZcB4 zI5UT7LG;MGvB%Pzu5MWS=fv6zx6`?KAsXx6$d#s4*D?Xh%%ktEp0t@G5vcP}-5lZ` zRG8}KX0&&BA&&>i5~SVIrh1*zlVYFbXh=7~b+5d2GpGhWk()~~srzgsYnRHA9zYS+ zqYP5eeqysQ8CtshQhSYq?h3j@1GiX=h)EajnS;=Gzqes_a>*Rums$?##iqiG1Vi## zg)myTK67^l)u!OgS9eoeuzeTG??h(%w9}0oF|x1{%&B19B=h!e^6c!oIv_2ZEC-8; zZVYplJ)a)90hz0&^h_#XoLe-h$t$%LDiLvfBxqnJ5Qn z=uZ|Z#HH{VI~~RsE4iDLXnx~vL{#GA34p8XZpccj&2X0t$*qx%2JJx;7rwJvgyZ5U zVe7>#MW>tp-3I}rn{eKNwIt_N+x30$GA%Hl zzPwz@y5*W%f3?5MA>}HdmyIoIxzSu82xFgR2Zi8v?Ls#ACl7;p7`~b|A@(g0*6*|V zFtyZjg2e9oWTJd{@i@;#Qp9pAh@_*QIRe{Rj>o%?SjtqBze|eP-6r=DS8aN^d^o_l zvm-+j?~zWA+($mmX@cPsXnp4*voQL|!o10$&`>J+TzKup^50*rLxLZ}M9}|Cj*a-M z)3cH=tBmg34VG@j$aBS*s4E%MGPjh{*{AV^bZy#Hmv*dlYZSGq*KFLR#*g(jbY<>^ z4O8Y0{m5c!UX%y(NyehT%c@($C7Y;Ren=NCI85{>-D*lwN0TM(jgbrsrb7_T(G3@- z?q#why!*Sb5_fZ$UZiOllc@REX~c?wL}J0_TV7@I{CA&M>D8zNvaERxQMXf6=7Wrd z0KU%{go5btoj@hHg7d<+k*S{d@+BO1BqYvZ*IYi=u-9BY`ao*`-(oA&g})Q950;FT zZmbEH8cy}j7vIuz0o9;k_;2)n4L#PGF|W3}nuNxsy%JxAs`qE^g$j!^N&WtP zyI!NPRK*E~-`j|YU(@acKYb&j48(r((XrFCK05yyfP2Gl_}m*i9mO+R7zytN&}1Qq z_Fi&DT=YNRSePw^nwwSp-UZuIZlQ!Xqai;L-=LEb-n%rZb}v2ztuSrEHi+ur8D6}_ zy1R74mVezR8+}>QAaMOcO%-H}T96L%B^I6Iakq%5K6nQG*A@26Wr$vTES+BaxneTFvh)F7p~J= z*1IRAZZJy($QB954+Cz)E{#rWn|3ZzISVbZMMi2xW=Udnvqilj&;LSG!Ivn)+xZhp z==E;CSil?`2qY+m`Q_IniC~Vss=OSvYnA^jnFU z*Im&E0=z}71C2^77gt0@0}yz!7PzsmPM?2DJGQUlL<8MnH6pW*QV&@P~b z@25`Wl?E!JZCSs~`&x;HF%NR@XZQ4`bZ6#-J;%nYd?P0oc zQx*I8jWz6Y>RQgHgQL411jm|qx|tGQtLLWCVpBsH@IGnXMgD`Zs+~+pqpiIsKf!q= zcduwuBO=}6Q!r{<;!~OF6@jouL++JM1L@kLySh!cgwn(n^AB>j- zPx(KL{*dr&bk=mrV(A~IOX(KV7C3bnccs74B&wYPZ~j^{^)Zb_Q3!9Q|I?d6>>4^5 zV@)|zIy`?@bQh3+*uqcob)6{xDaCW2BKB#Ek%pact9|m81gT`Y*^&?J>Cjc+Sn;?% zoGN}2#fi(8_I0P1zrfU2-g|xO&*FtE>fYL`?x4e6()pTSm@&n>pV{n{{)~CpS#YPF z9zO=1>C@)oFYyBJ=wBgum2g+I#5?VK$yS$3;$_7&mhQZjbJM@4?QNuF@Pav^Yq(@S z)@y^JMnr1>ojGCi8@gg7{!^4g@;N8I^KN^!*Gy5EG{cV(VfIgh`0}HenOg zqMkNeTILt;YM;g3AV-@9H1489r{*x8l1d9**UIH@Tk$1W-vBNzKw3_U6BjzOygP74 z{H3{W zAwAz1vNSFCY_Z4ahZ+|eJqf;q)PHqzP@Q#>VreOHqi*c)ux~=90{%rx1lo`j+Pxc9ItkBF|3ZgXfIcDL^m zjYif%PP&s7zLb@g)RHEeg^Ut<=N^&taSv~ODP|V2smJbR=q9Gn-!v;glz%4H)?$$} zmEhByEnUyTGt{n%(_W7t)Px;>$#j(CQ)^3jVLk(%MDAhsorXx`8QDU9SWFJqWx$cY zAnT0PAgIG^pd03pnjTq+u5M8rs7kYn#HXPCC7(i<4^mmAJ1!D=E4npkltW}S|Fx8+Ki}B_3;y*L_HZ@Hvh2zVS5qC5y|dIqV>pDWj7@Kl)D%SmHKJ zFuC}37}~D8i|)$}=o(z4eug)oy4Z0pl!=^nAb;Ar^s{bB6xK}>>U3N>$J}@vw36A4 z-*CKA8rgj%H?BbvZ{cck;N!$Rl`xRRb?%kFDR|ypCX0{dt7XJy-AwaOYRMnvsBj%4 zsV11+RQ1;&t6tYDj=JuRrSbrI+uE6BrE$zHvt>u&y~BMUVrGF(aB$Aqg*}8^wl$&VxFL~ zTG5h%tlb|dtgben&Qy04x&B?I+G^(OQMFYeN3lkbt>x=kqSTUADW%nl1=6amfg-6j zRq(6K%1GC@xKdH;;{UWwCU7g#vGM(GFp4O3J ztJuQ^ zlBu@$3J1Rmk+&4-SLdw;vI$`pr&eKLlr$CjnQ~HXyT)Sxr2DHY?K`;fzLt3GtqD(^ zSi1kpB6P(454Ukob*qLLCyUS!k)e9V+9Ya&K<6U${AZb(E^jeTTz;vnV7}7&+kS?# z+WI<|oL~CDPPDc zG0K#35NN5y@RXp0ualA;>5pmfRnhVrkXE%p zwAyU;5uPomfok)~0a1SQ+p2mnvo^}EjS5kw+NiX@TrA|OXRFO8YW-wATb&Vwl&Z~V zyu`OE&F4G4c{%RQ%T!%C2>eChuN*9iP)BpXMGFFtOMF+X7W#|a7Aw=ME6u;jRHiG_ zBIFl|^&7ILMOS(xO7|?eC=w#FrAq7X=%qNe(w^-=aXE(KaxupH8n0uMq@Oek1`}?NAn|voOPYYWD~8wn8{OrUiCxj@TIq` zc1A`F=nY~ZOZ6dz-z1zx#Rc6;24AD2@7 z;(4ji7Z6c7T{-7?K25JGrw6I^w3RwNqC(VEX=lon)58h!LWy$_2wbKj=d8%Nt|I3k zZs;1sW@<*om!R`v@k53#lkK3Y>pB!65WeAm!{tnFZB$+x>Hpv$vc>ZT>R9JcuM79X zem@-USNZ*_a9{TOa=5SieLdVGq=d>^huU6=ar%l-c1RGFH^o3GFmb^4Q~bHV<_>W)G6+mYUn@Tj3Hf<%0w6MLx>d#)4vZonyW zBvYM7QBgW!V|5)CsqQEh`i-MX73iySt{CM;^P{<9aX8AGI+sc>X8VhS2%933h(Ab* zXrZonk?IN5NM*inpwO4)LKWiVoCGs>h~9o(Aw*#yE1u?ds6frdTrro+=8zgWisY=e zT#h<(IZ0%TX0y5eLSM01%8eC1lq=R?8>&K#jwmQrns4eVmI`TuN+V$ePzOsz0bDBf zM`F?(^v%WpJZX@YM+Rv#i}b4JGU^qI0bo!JHM3cABt-OF@DIalCax;Yi!mWxG-bL$ zVe=w=De)Vs74nAT(aQXA_>q7rrUR97Mg#jI`hv?_T>1wy$|dvQMT_<6*6`Zlr)lKS zpvfURaoQs}*c)LkwSjynfYKr;xl}o5zz$eAXyK5B{T2cnUGWa(E#4RR<-(D|YI|m5 zrJzrNagJrNzFUz2Js4Clq`)ZJiQlD{3#4W&052#H_^CF3jxwz_B##&{2ywnl|NHu@ z&HqqDa&u>v+59R}En$^RBp$3mwXV$!D$g1-5BnmdWzi^;UJpk3;%MH8luFy*P$@QA zc`Q!J2*1~@a0QOw=9gsiOJ-%gZ$V0_ME=%l%Rh*qjq?kH*kFyHQ%Oi93Wdv@K^M52!$!ikeF4P=s{Pdj5wtzsoMPeyzI4x%#Q}vRkbl% zZQPD*YE+x=jPk=Cc!zR`#OCj+je&YbiIvvreyEou8Ci%)k60#0%i0Ld61Rr|qo#jJ zdn6`sjlhDPEV6N18HOW^Nn$Flf@#p+J2J3V9cB0`C>)`N!!Q`jS!<{;%rom zMjCcfi*(0>l^amMM?2h+8_X2Zt4JgIjQp-Pe+mZUN>_?_T6r`AF$7O7hq}-9*9uXt zR<6}*aAOu@&8TkB#uMwT`3Bq%;uw>%IV01B00vgz6DRq@cm5VxZoyocseJ)MMdDDas?as==`7zCEYjTpTL&QRhWq zq7unF{|Kf;AeF4rN)QO0XrO^uLk+eZm zO+<>w0Mly_lGIw3tb?&wg>1#{k>OJ$H!hMxq=f0JXsETl(%NbIU?)0bWdO12tN0?S`3mGfy%C`c8OYf~B<^#E(MI zS-M$m-6tezT6tfof6y-2kp`kc3Rjg(GG@vvqdN*k@!$~c{DiKwil`Drjq!mhPEk54 z65&E4kmitdpK>xewk(Q=>_RR10danUibfpOo|rX-GC|)Fj-XH(H9ZgU?5eWFn$_Gv zYPKlTS6P95Xszk>pJd=l0M!gVh8%5GZS9da;ziF6#Gc15CQFJyB+*wgw*V5+Dqf4G z%84CHqb4tZg^>`?Xw(eegx2m@kk$frcV}-0R-XFsr>VflVRt;IX6Qm4E8|K9wN*;J z0`5i4kMl~k(JmEB#F0G`MV5q^K_upoVi1G!rn4%q)KZ)#ky!-8xqdt&tE=lXny|_- z!bMl+t>pX(1{Rl}Wia(}4uf5OmC3E?(XT){mgg<1^s+E{shAst-)E8v2!y)&Av>=|R$w5+frcSiA&Sqa)e= z5y|6b3!KSbm72_>TuWw}%9zbzn%0=kqdl>Wi`Du4Z1jGINPeNvFiLoqYy&1HOtdV>oJs~Y>4Xo!`1nNgD^Z# zusly2&(HStqcDZ#)+oYHYP68YIg!PtHpOx}CfnvaMx4!ehIuaY#rU5hMCDLXk`;K& zDmyU19HR9Y?0yE+)oP=7@NyYlH9Z$lyQ{4OAc+>U6DF^i)wE`fI_S|k^=(#!hPh+O z;VSZ{XZFmB1iqRreK<&0t6(j|L-{TtYjSN?OhS668Qq!?@>YkCdTLoE{TerCO)CXk ztTh|kmGYBfW6>K4L?IV+U;t5;YxNPLIex!akjtc{9FJ667$EckllpfM-)JqXN%14a z2(wQQ2O||!t_BL!qO;i{s!`%Bk~E}V?4({yQk%aEsj?-rDm5rl%Sm&ZA4ljvz<9}~ zg8!ARfWX&PfHYRuVXFh8k!t(|7*A03Eo=lJZtW&Ef|=GjZAc@} z?{x-L%|Iy#*aQ4|{sZI`7BzYY5J^;Vz%tAqF+D96bihU7fq-p`hy)IZyyj=TrcuG* zoq&v1B7PFNYRv4lj1J3Z^M*`~3l%d`TKOo0-oxG)%`x14MISKSRx&Y)W!d%frxF5^ z7|`v2B$4bg__dFm%#|Z1yO@QHBXtd9W;VZFnLklvaxBOmG^;@-f)!h7v!HllLhCCt z)k1zH;zz{j(-qkzA+sBT@r(tTkum$^F=NyVa#D)xFy{J9hC`lEpv?ks%{G8px&o&lD(SII z&244tFP&`7{>-FqWJ&(d4x~3b)`E0gc@tTq-OT} zlL#ZBPGM`+Zdy*Zwc={msry^Jk13IqkJZw9};@oe{V?smQ6Y@flBez z^IAn?68aSFm_|Eb4u7m}>(1*!H0D_i|5F?*ttj+s7IlFUxxk2AU_M0XHu^hmn_obp zF!MxE5lT{PM)}Pkv@NQM8slfEgHWs^xF7YUu!nm-|}0gbS|7Xz*qJfuaDm_zXHF3_2?7ELG0xAulUST)>NFI;t=#RJ2I{PH1J$kHwD;r zAgDCYCr*U(YYIbxbMb#))B6ea1U^tzA2!%61}Y2c8BTpo~;|Z?*lfs%Sr~g+V!9Sv9eBtJZU>X-9R(xfg7rHGIvNG^dq>YyFL_8N#IqGg_?9)Mg7G0Rs#* zB5?l7XszakB4b^hf64h_9_?|31bj?zfoOF8GJh6Z6F*XQt#1PC>nz4|fdO6yqYT@2 zLi_~EH-Dug+kEzY-CUR`%=s&3#mvVmcxoqxhz2F-=dX0^E%K^Mst_P|Y%OSxyqb}@ zF8KVJ9)JzJ1>cV!nB&0ncqm;jRV_B_#Hrz<5KcXqK34UlM-;dU5 zxn}{Jdeb410@kcp$$VL89Dytx$wl!RUN>x1gfAwm9(~;nL(O3kb~RTct*6CB50mZb zcv91PM$94m+mfG=5Bp(h!TAA}NvpeT*x?P?EW6zEDV~8ANK`3{NQBP6T#%akFtZwx z<)lEHVMa6aVPexjIN~ZdiDE<^Q#j>&|8SvhdQN`aquWV zwzw8wxiV<~2hI{(Stq9L6_z3-H@~e;-2p!4uVLh~+9{}Qc>(ptHVqPZg6BuuG$0bv zRz?m$JjWyjOB0Z}lKFd@I;zz7D5Zo~L&B?Z!fPSnH4@6!Ac8xteWHlfDltA`Mu*=@ zn9G`N?*$ir)l^~r$27av{q&lPD(Q7gGRNfW#%@adsU<>gYk~hD6NR-It6c!I3q?*9 z?R4=uFA|TfCSaw_8fzBa(XQ*R`S)fLkd4QPACFkRb=7z=geTzv)}MqG8rW2kd$BM( z$YJIOb+|cUX<-#XRhQ$H2ro#uvd|aGbke-VP@lD8%cWY?q>H$mo&S)y?Y*P$)a zdSnHiG3>4*6MA)mzjcM7N_(1Nuv%11tyn=Kc>C9L5jETMcnM1A1}LpWIqtx|EGFA8 z#PEBBvBGzT`6I`rCk>V}!8L(9q}uw0|7kc{zcAp(%sLQce}Ggl!iasnvJ*@KDPq8{ zcSpAFV_~f>fm&!q5vvd%iw)x#h$J}~73Jt2rwO^^Yt{LW>WT~bk=WBAn@C(H4;0&} ztmiU!tYH~P^W!etExy^}V^|uYL=utgSE*D#yekt~^~E0!f*EboskV1m57w_$UFhP< zG)4KVv>&1;m1*b@y*sTAiZ^6~s+?I-?S}^N3i$LM^il-trE(5=_;t*2#@{3_Dk6@` z^w3g{Kd79Oh>PRRR#IXliJAw%#Hp69T)YG?CiWr_u)eNh82}OHo+UxvWQIqx8L-@9WY5uFMCCl^S{;z z%>NoMk47!#Xf3kTiu{D)Oc@sn9n6zdllM!m6ru>1^ASQt3uV~1eWVpxXUsAZuD>qD zrv0VP7Klqg!eg6Mwf9pjJZV4VdD{KGdV8j1OV31XwU_;ZXbP+1Vjq{0)o{;_4(wrRT-a&Z zET?t5(`dDQUJG~Zl2}z3&gvgJxP3nSXc({j9fgX~t`{lBafsPtzSd<+aJY{dUO9EY zZo~9sZY^GhHoS4kSc0l6?I#dZPeI7Yw@U$vC$Y?>{z@Z*=}l6sj42fdK0xA#hu5s0 zQYq&`)pVSjm+kX_BRi9b#vj?a4uL^?aq^SFq0@e{Vp2Mm_Xo+6#g)%K2RQYNoNala zAI-CFWV(W_Ua{rYzFuwrR{k(4%l2iiARVd6ZD__s2} z+5uzMA zo@c1F)512(uxt+%vJ3A|3T1~NWETi(zS!OVn}`y%BR-IWgSG;(pTC1~%2v*=&w?v1 z)$@0-Sj1)_BATdiA!N}yUn`VGD(zQC^R-b#4_wNeRk_K~+RzuVeRKrEW^*LaiSljL za%2$D;~gRcbrG(dw8JbxT1MrgOO}H+M)>tv*WjqC=5E@h>J)6-Rh9C3NRfBOcCO^n z$-c0pZ7ZUZ7yXLLH*$o<^RXthy}y+6-7JO+rr_u|Ep;%T)Eez*Ewy6H`s@lR%vgtO zy%sWJ>Ng~NL7S#YiI*Y5ZM;0q1D+BJP%VIpk8F|ZQx4z!j`+GOzTOjG_r});xoS-# z%-AH+&HaZW9g#JyYhoY!y{usY@?&exM*kPC$F|Nkgr^Jpc2c;l5sW}XmROM-ymKddm?v+fbO(ZPZF#n=htEU2%vc9eixa7 zm^4vxE34LK!^MC1FCPBV?GtZY?Bk$9)R$3^RlqVul!^Af`wxoT8GW|v|L3DVwb2JL zU_~e>C@2zSfA{LLq_QQzN!k-k~FUyQCD{i7eK z;t#9aEFX@r-w<;!>R-o6sOhM_y1zBw7Kz47OJs(MeI zzYS7nne6!b@?J7i(#h@Q^iRLPcVO^KoYe9+JCq(Inw+>Vb-!F7gD}hFGJTnRrrFn| zp``0rA8TNT(hBG6XQf5V_oT+50nSaRqOZG*IVWSLe4b+n?1& zg17r2Zu~H!akO~zYKUBuxOohr+0+K7XG8MKlsyQe=R(3|Hb|)CnvihCYb>hRrEGtW zD;sG0E7RJt@Ez4^(-}R!rr^5@UQ%#X!3zqmD7dWPIW{odBS4=}a7lH1U%?Ob@Oh;@ z83TZ~$N*tE(ypuGE3RC-uf^AT0Q41;oqvalvo5|8(!U!bFNMepA@Y1&2Rj0-&gOGO z%(U8}2Wvs>iJQ*Wr`;i^+}o^1Txg)O^`cT{sYqRJK1t+^A~aoTmldoE?Y8&wp#3T3 z{{_MPf3!w_$<8)Mp=SIl0QFbeN0j$L1?w3MCJ0I-K%2*~vOm~hE_Lds&rB&gw@)fJ zf#v{e!8*{|mhBh4v|rWJ5d{@)F)oR%4rR~Zp)9{4IKQ3;y2U08Pup*IVz2ALo7w(8 zU0+lFF$Hw8a(%+K?4b5l&#?cR zV|lg?hkq!_RUfS0fdQ-WeAb8XS-W}JZ(h!8j1TID86bnifx9xDH*pb8ud%%`g7{+J)~d=DTRwYe%>EHuVU-0*g8drEjp|y;)2Qusq7Wc{YqaHL3*r9 zorNy(4SU3BvH8PVzi4ts<)Bg~_7Lw6nZS-|TeKYuHRAolI&-s`GUM;(&sO=R?3cP- zise$>vXRTiw#R`rZ}msD4tsDCM2zwyO_~J>ECbjq-!?GtS>1MX3l=prz*bsSz_i%W z@z}$dN;GTC6XU3I+5lSF<_|@lvdfID6;XponDd;@(a9=#Tv%KwW)*Uw80VqRgPH0H z_6g@GDbG+A24WYUD&?utnbvBony-07KeAPJXi~>3nwQ9(8Bj2!VAxuRsXCDnCHE^R zc%3a9L-}lJ;DTQ`)gVcLjEu~Jv;qE}GFE4N1Yxp1Zg9hj8Fb1jv@{SRoPThJ9tsh0 zrtw^Vh!jG^(FCCRkkV(^B?b0{FJoTq#Lgv;FC@{6w&%I|lzi~)>8v){MD>&$NC8IV zCA`PcTAW^braSR$^P9$}s0#Z1ANp`zW%|ll4&pHf46Ys>P^!u^Z#2=_3tLJh>0lDl z)3%x7t3gyZ@TSHwh>Waq8fjbq+K3(YcC5(nNY+uKkf?oF)`Sw--`>edzIcz8o@k4v zoN}IoRl!N5a-3Vokfc<;uV&qIr-b3iL10ZTUj#b%Jt4KH>Tj!wV{8* z$>NPd1Rme8-r2RBEyC!{pI2MA4@aQIY=4gFpdPg&=R4|spLm>DxyE^1jJj}#Rx;Oc zgJwBF%mE_uG9eLPlmVd=AM^|mCmN`8A_aEJ=}3z42vBCSoRJnIm7SkhMFLh%_E1`G z(aI{uRuRSrM=z;z_i}#6A~G%pSWLISs=Rlz$#mjiPt#tG46`a?xr%=v! z$T6bxJC#+PJI;N!cKO{obzWpezH?>bs%fxHqh-wJxS68vIrRe?e*{3o%DyVcCmB4K zk3?w-0m*J(wq(bt^q(v&roDo}27!!bZ;OgTQi)+#vK1+h<_0jkNRtAB^AJUO6i{o- zUI1Y`BwJr7pWP}5$BBx{GP23K30aGUEqW~aOmy~6 z>jtI6?k%aKTFE3WCnXxACRY^$%cCWYhc>z(BD8Dv0PKZb3f)5u*eUo~G_u-YEg^!i zWW?=Cg3?7yIlGokj8d8if67l2v);fgxk2fyS;M;4thlyCt2o!}3KMy97O>f0TijKD zYnGVX;F5u(?JNBpB=T(6c0*jjc%5$`g2fZ&BZFtFO!m8MlN6k_;STpc$RI zYn}GLRAzr@VA5Oc)tD2Comh@@l7TxobO*;HL>O~*QG$lDuxsnKA}xI)0P zoz58M*>cu}8lEZg4Z?fY-`OlYOnpsHS+!(cNB4c5nfqPM{aZy#2tFjl*#xQT;RptWK9cCVyb!$K8*0(|pHnw27T3HY?|1H#RlI_h~mzd6}o|hUtY!;(Vux z%SjWL!@PM7yyeC?u^5yqNxmztMdUqo6cKY!)D#lxx;LT=H`*+0*57qggxB>32P34j zhHE40At}zYPRFHszl8nO8Z&2Tu~_HeINlCXDNb1q<7s7%gAG^3n2N5dvv-IbVtz@7 zX9*<>rB_;4wd@W|S69%)4rL)wj^D2jP}6=>H|c`qTDkNgJ!5i;CR+IDws_v!{ip;{ zuwOZb0-jC*BpoV&cePZ{lWfK@wKgjBQ}D*{@T68}4YqZ?oJuNZfrqkXL@vT$ri4|2 zT3`#muIi|@oEJjA$vb)k#<*@?E@ua<1cl)sT8`5xQ}TN+r29dHhzeb;(Ghbl8F80N zc7lJe@OX`URqKGs=<9AqsALUr!G3L3UAqmDq1s4|7{9JmV9*vi_5jmeA;q82W;r`T zb)6(MqvyOXW}-}q$B>U#RH_Y$4C1>AW8ejgG=mE^yE5*ozzSQZ9bv3Yi3+dQR!Yz| z@t^4oKuje`T0%Lz7(;?g1J=ohd=g1ginM2m2>D8&0_+)8+Vu>&Wl9PKA`{BsNDc{Q zdNYnvPYNFEqE!oV#nq`1{>tPm!)8_iI5r*Ed`ftQ3YstR=do+7hE=_X9F?Gy!^x>c zHO-t=)ET-RQgt#RNe#tAD%-A;?j_keg?|teg+UH!01rfxAgz;;P5Uo*+J?RiJL;I5 z5zVKHphf*AlgrrG88Zg$r+(3#l)cq59=Se)Vk}~7HJ_DCAY})b)}fCEy9Z>yy{(uP zdAqtT%vsr2jd(7b52}F)sF^{$ExPrh$uqQwjGGdZ7}GCq!vg`>oOD2DaSfmn{PlCD zcc>)_DcT>3z1SY(eH>kx5K^@yo3;Wf+g{D<<4QtO%^To(vPD|&21)LQ%h}{T2-QXB z_-YlNd!_LuDp-lNxMgG5J6?^Beq=)h7C`$U>t(ynMKV_MmTe(mnC)vbGL3buws-Yg z5}W>%!tz6$V8hU6@_!bR6xHF)rYiLwb^(ogouF>nc*I);{Z^Ow={*jQ_G2ld% zO8EUcBm;W@ZE)M`VwkuJ1S_zf3qY+`P4V8B!7-cI3Zq`X;oj{%iy|h~TmJA}@uCk! ztOJ%tC*!A@2o-Bt>-=6LQwSG$ta)a&z`I_2*1pGJY5l@M8uQCU()a`^?1+(8pe<&6 z^od9z;&v?V6xV>)F-P=R2hn4W=rKpMsz9Mav-Y05GWSl-zw$RvV8Ck|wTz-)slAS? zKy7wh1-eOG1-dJCy-Y(X2H->tAXfks>?%oDl!FV%`V<#ZcUXQ@gV9!5i7bBF%__fP z$pEUG_M2(DIpQ}qp=duyk_J;FsL^DvEc|JUG?E1D$EQhI+U(&*)^gFBs76Tf0u!2Z zTnAxLljoLs&@#uK##CH6B`eH?Z6(DMVYziITt;nVr@nADlQP| z^j0@k@x^qiZiHnv30ob6Hi>5o`8lfOHVL( zt%+TkyX{>jZ}&p&yG-odK}3^r?c-F1(pxU`b>s6p6L6(?^7xk8>7z|v{ThUt=H*86 z?0;S_Ze|X4$)(>xVxAHd!$B;XA{@pPlzr8_CQ2yat(_5EdXU8x9$97Npx4PAfCC`h zda&OFgf8&K!Id@#H5h{eLfzW={YkO7H$r%HyjeQ^vtS)+67Z)aD_vsGL zniOtHuW+$@o6z#qJVUI2|ITwA@XKiY`li$#TlXq4aB?4!OS1uG#w}uH=9#JTP=+)S z<_Sa?73}Dd4y$mKXH2;?(i7oSrBsSjB5yFXDX{I|%&ljW>Uv&Yu|6vGt;e-YfUk{M z>uo~qpip>ipa{wyV;Gxu|Ez^CTX>lwtfnj56@@IIuV(?B*eV5O1@*#un{*c~+a)qs z8@w+=Ej_8Q`2&kzviSE2wJ5CcB@16rHD3HVqOAO?KsXU~{IwuLb$c}w_>J$&8buUh;~ z#albc!d7zOA>QI-s4y-nW}+h7Pa_Usvgvt$_O?Hpn>=y<@ngHcHq|(B>ge%f`;W{W zfBYm{QzLDTj-u6>sC@6q|_*u2#ayyv;B>er})Iys!X(E=gE_e*+VmDHr&1M$mHA!uWLc#hTYRgPaWs; z&#j}Gs5P~)wq0kAP0k*jx}*N!=|eL|r#{~}bJy6|#)&cgo7iTT?S3~lwqCpD+t<#N7V~58Nk8j+%?eLaOTN+anTQ*J|-afT) z^ThV;;~Te+H@0kP96B_B)()i9_4AO>O}}n+}g{**MwQIzByi zXk%kyV$-%mTPLQb#>c0p*j#>hCi-+|ppTxcPu5QyKXH0ya;|>l=%YtAoM_A)K0Y@) zd2FgtzjxmQ_ty{4P0ltRKR)->I_Y(h2VXg5Z#N%S%S408kVVl5G#6@)qV<{RBX=J^ zab}KMPu2hZx9j&(&&j$M*zozI#~!USV%wtVL9JP=?Uj5yLXD z=h%_P+);2BHU9_b;jh2gINX?PFmizs>L=!oGYqFdTQ6c*l>foG<9~T{x-plOJ9WH% zvT@1=X3wJRpU|^YkoCzs7d`7#byt1;$Ln`}xYQ4~f~BJGrkhIX89W zvon*Ap6rHo|MB|l@#&+7&ln7|o||^(j!w=T{TD_yh6I@Q_-uU%jxgdr4r|QOJFDn( zjZ^#LIwlXzG-4>~u*Q+&X`=Y^O!Uu<$a-PYs_l^ST;s&ddV_wKpIB$76rrBlskGSOWR!~~kEuA3KBNhgz6mXcqBB(8f-obfKJ`C=xzPb%&H z#;Hx4UFhC@eD(zL{m{`FY$Rm=%nZUChMt9`Om0us51&4DdahBY2PdTmP#i%mLge~4 zb@I}m=_=E!hG3j|Dj&`KWj^}izFqs?T>X{*<$FK)Z}0tA+1!u*?GN_+dmcx3f8t>V z=r3TDhd+n1IeqA1uds3I&e&9Y_~hKw!-+CBOYPy~hyLQ>FE(ZxlP4PspWS(4`j8;_ z&*$GuPvZlL|NXCu*TY@+^_5h_`cbv z^%48dKb^YcBk<&l^uhAzoBaMQzn}1Xn_rc|9Os9&j*jsQ|5Wai{QfyVzF-^uYkq&r z@5lW9AAS|`;!}$5=cjXZ|Mc%43j@rOXqp3<&29+H5RJxqq$}S&{2qEP9~Cim!oOnQ z1ko==`=UQ5+#P+9*d9LGdO!Dj2tP|)|NgG;|Nehv21U_8)VMFX{;56Xpe0wI!o>+( zcJa$l>m;WuKg&T#ef~|KW79|7^lzP&+Rsycx=x=@)0sy9a-U_0Ug|pn51?^K4`0w- zT+=SgGe*Dt{{$aE1P9T79sMa~@20in^Px-&qkCyfA2+*`{_W;eY526BK6QA4CnuuQ z2Fo1x`c&Sdgd6Ng=bXVlM}2~LivHB8%|Crx=UMoa-s99V7k!nd;RAM|E%j?lgikz% zOCQNQ2AAH?RUhHgzx%m9PLBnnAU#Z6|L%<{lnedeMJ|2dR(MIiEbaLg_D`SC)n@|F zM4N0>qG%f%hm*R#L|t>#mf(In*cszDZolp1AE&HnXcgr&ivGF4W57L=g1#5*ccw5t zO>W7(zlc6UJ$q^QQL90tbOQL)8{u0$UYu5szHJzHTx>Gn26pQrRO%GaZfMhndA z`1eP&ly1u@P9Fu-IBJ|k75?u*>)!)09I8$I3pm%Ek5anbFh;%lxeE;hOoc{#g|1TK${{Zn2` + #import + + NS_ASSUME_NONNULL_BEGIN + + @interface CustomView : UIView + +(id) shared; + -(void)initView; + //-(void)setConfig:(ViewCfg)cfg; + -(void)userContentController:(WKUserContentController*) userContentController didReceiveScriptMessage:(WKScriptMessage*)message; + + @end + + NS_ASSUME_NONNULL_END diff --git a/Assets/Scripts/Plugins/CustomView.h.meta b/Assets/Scripts/Plugins/CustomView.h.meta new file mode 100644 index 0000000..77db581 --- /dev/null +++ b/Assets/Scripts/Plugins/CustomView.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 9a21a679681cf0840ab2bd52bbd4b25d +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Plugins/CustomView.m b/Assets/Scripts/Plugins/CustomView.m new file mode 100644 index 0000000..bd4ac80 --- /dev/null +++ b/Assets/Scripts/Plugins/CustomView.m @@ -0,0 +1,162 @@ +// +// CustomView.m +// UnityFramework +// +// Created by Mac on 2024/1/19. +// + + #import "CustomView.h" +#import "H5View.h" + @implementation CustomView + { +// WKWebView *webview; +// UIView* unityView; +// //ViewCfg config; +// CGPoint hitTestLocation; +// BOOL isTouchWebView; +// BOOL isWebviewOpen; +// BOOL canCT; + int test; + } + +(id) shared{ + static CustomView *view = nil; + static dispatch_once_t onceToken; + + dispatch_once(&onceToken, ^{view = [[self alloc] init];}); + + return view; + } + + -(void)initView{ + // Initialize a WKWebViewConfiguration object. + + + // UITapGestureRecognizer *gest = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; + // [unityView addGestureRecognizer:gest]; + // [gest setDelegate:self]; + // CustomGestureDelegate *deleg = [[CustomGestureDelegate alloc] init]; + // [gest setDelegate:deleg]; + // gest.cancelsTouchesInView = false; // to recieve touchesBegan callback even if gesture is recognized + // gest.delaysTouchesBegan = false; // to not delay touchesBegan callback + // gest.delaysTouchesEnded = false; // to not delay touchesEnded callback + // CustomGestureDelegate *deleg = [[CustomGestureDelegate alloc] init]; + // [gest setDelegate:deleg]; + // NSTimeInterval delayInSeconds = 7; + // dispatch_time_t popTime2 = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); + // dispatch_after(popTime2, dispatch_get_main_queue(), ^(void){ + // + // [self loop]; + // }); + // [self setWebviewPadding:CGRectMake(0, 120, 0, 180)]; + } + + + //-(void)setConfig:(ViewCfg)cfg{ + // config = cfg; + // + // webview.frame = config.rect; + // // webview.frame = CGRectMake(0, 100, self.bounds.size.width, 500); + // //canCT = YES; + //} + + + +// -(void)handleTap:(UITapGestureRecognizer*) gest{ +// CGPoint pt = [gest locationInView:webview]; +// // NSLog(@"GestureRecognizer x:%f, y:%f", pt.x, pt.y); +// // if (gest.state == UIGestureRecognizerStateBegan){ +// // NSLog(@"Begin x:%f, y:%f", pt.x, pt.y); +// // } +// if (gest.state == UIGestureRecognizerStateEnded){ +// NSLog(@"GestureRecognizer End x:%f, y:%f", pt.x, pt.y); +// } +// } +// //- (void) touchesBegan:(NSSet *)touches withEvent:(nullable UIEvent *)event{ +// // UITouch *touch = [[event allTouches] anyObject]; +// // +// // CGPoint location = [touch locationInView:self]; +// // beginTouches = touches; +// // beginEvent = event; +// // NSLog(@"Touch Began CustomView"); +// //} +// // +// //- (void) touchesEnded:(NSSet *)touches withEvent:(nullable UIEvent *)event{ +// // UITouch *touch = [[event allTouches] anyObject]; +// // +// // CGPoint location = [touch locationInView:self]; +// // beginTouches = touches; +// // beginEvent = event; +// // NSLog(@"Touch Ended CustomView"); +// //} + +- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { + + //UIView* touchedView = [super hitTest:point withEvent:event]; +// if([[H5View shared] isDarkThough]){ +// NSLog(@"Point coordinates: x = %f, y = %f", point.x, point.y); +// NSLog(@"Point coordinates: max = %f,",self.bounds.size.width); + UIView* testview = [ [H5View shared]hitTest:point withEvent:event]; + return testview; +// } +// else + // return touchedView; +} + +// -(void)showWebview:(NSString*)url{ +// // NSLog(@"Native showWebview: %@", url); +// NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0]; +// [webview loadRequest:request]; +// if (webview.superview == nil) +// [self insertSubview:webview atIndex:0]; +// isWebviewOpen = YES; +// } + +// -(void)hideWebview{ +// // NSLog(@"Native hideWebview"); +// [webview removeFromSuperview]; +// isWebviewOpen = NO; +// } + +// -(void)scrollWebview:(CGPoint)offset{ +// CGPoint pt = [webview.scrollView contentOffset]; +// if (offset.y < 0 && pt.y <= 0) return; +// float val = pt.y + offset.y*0.5; +// if (val<0) val = 0; +// [webview.scrollView setContentOffset:CGPointMake(0, val)]; +// } + +// -(void)setTouchWebview:(BOOL)flag forceCT:(BOOL)force{ +// if (!isWebviewOpen) return; +// isTouchWebView = flag; +// //unityView.userInteractionEnabled = !flag; + +// if (canCT || force){ +// if (!CGRectContainsPoint(webview.bounds, hitTestLocation)) +// return; +// [self doCT]; +// } +// } + +// -(void)tapWithPoint:(CGPoint)zspoint{ +// [Helpers helpAt:1 AtPoint:zspoint withTouchPhase:UITouchPhaseBegan]; +// [Helpers helpAt:1 AtPoint:zspoint withTouchPhase:UITouchPhaseEnded]; +// } + + +// -(void)enableCT:(BOOL)flag{ +// // NSLog(@"Native enableCT: %d",flag); +// canCT = flag; +// } + +// -(void)doCT{ +// NSTimeInterval delayInSeconds = 0.1; +// dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); +// dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ +// // NSLog(@"CT x:%f, y:%f", self->hitTestLocation.x, self->hitTestLocation.y); +// self->unityView.userInteractionEnabled = false; +// [self tapWithPoint:self->hitTestLocation]; +// self->unityView.userInteractionEnabled = true; +// }); +// } + + @end diff --git a/Assets/Scripts/Plugins/CustomView.m.meta b/Assets/Scripts/Plugins/CustomView.m.meta new file mode 100644 index 0000000..5e500b0 --- /dev/null +++ b/Assets/Scripts/Plugins/CustomView.m.meta @@ -0,0 +1,42 @@ +fileFormatVersion: 2 +guid: a3c066056f7e4154ba1f1502fc224545 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + VisionOS: VisionOS + second: + enabled: 1 + settings: {} + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Plugins/H5View.h b/Assets/Scripts/Plugins/H5View.h new file mode 100644 index 0000000..b19aedf --- /dev/null +++ b/Assets/Scripts/Plugins/H5View.h @@ -0,0 +1,32 @@ +// +// H5View.h +// TestGameWeb +// +// Created by Mac on 2024/1/30. +// + +#import +#import +NS_ASSUME_NONNULL_BEGIN + +@interface H5View : UIView ++(id) shared; +-(void)initView; +-(void)showWebview:(NSString*)url; +-(void)showDarkWebview:(int)type; +-(void)showView:(BOOL)show; +-(void)setIconProgress:(float)value; +-(void)setViewPadding:(CGRect)rect; +-(void)SetDarkThough:(BOOL)though; +-(void)setViewBtn:(CGRect)rect; +-(void)addH5Field:(int)field1 field2:(int)field2 field3:(int)field3 field4:(int)field4 field5:(int)field5 field6:(char* )field6 field7:(char* )field7 dark_url:(char*)dark_url light_url:(char*)light_url field8:(BOOL)field8 web_through_probability:(char*)web_through_probability click_add_time:(char*)click_add_time ; +-(void)showFlyBtn:(BOOL)flag; +-(void)setInH5View:(BOOL)flag; +-(void)upDataH5times:(char*)weblink times:(int)times is_dark:(BOOL)is_dark; +-(void)setFlyBtnTag:(BOOL)isShow; +-(void)setRewardBtnTag:(BOOL)isShow; +-(void)OpenWv; +@end +@interface H5View (WKNavigationDelegate) +@end +NS_ASSUME_NONNULL_END diff --git a/Assets/Scripts/Plugins/H5View.h.meta b/Assets/Scripts/Plugins/H5View.h.meta new file mode 100644 index 0000000..fa11e31 --- /dev/null +++ b/Assets/Scripts/Plugins/H5View.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: ed2fcc18a0906294da953f4ba1005c10 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Plugins/H5View.m b/Assets/Scripts/Plugins/H5View.m new file mode 100644 index 0000000..5c801c3 --- /dev/null +++ b/Assets/Scripts/Plugins/H5View.m @@ -0,0 +1,1122 @@ +// +// H5View.m +// TestGameWeb +// +// Created by Mac on 2024/1/30. +// + +#import "H5View.h" +#import "CircularProgressBar.h" +#import +#import "CustomView.h" +#import "UnityFramework.h" +#import + +@implementation H5View{ + + NSMutableArray *webviews; + + CircularProgressBar* bar; //奖励按钮进度条 + UIView * flyBtn; //飞行奖励按钮节点,也可以用UIButton但要屏蔽事件 + UIImageView* flyBg; //飞行奖励闪光背景 + UIImageView* rewardBtn; //奖励按钮节点 + NSTimer* updateTimer; //动效定时器 + CGPoint points[4]; //飞行按钮飞行点位 + NSInteger pointIndex; //当前飞行下标 + BOOL canFly; //是否可飞行 + CGPoint targetPoint; //飞行的下一个点 + CGPoint delta; //飞行移动的delta + BOOL canCheckTouch; //加这个变量来防止检测点击事件出现多次 + BOOL canCT; //点击是否可穿透 + NSString* NullUrl; //空的的url + BOOL inited; //当前view是否被初始化 + CGPoint hitTestLocation; //hitest 点击的点 + float bgAngle; //飞行按钮背景图的角度 + BOOL is_first_btn; //是否是第一次生成网页按钮 + int flyCtRate;//飞行按钮穿透概率 + float stopTouchTime; + + int otherH5switch; //是否自动刷h5界面 + int H5Refreshtime; //h5刷新默认间隔时间 + // int Dailyrefreshtimes; //每天h5剩余刷新次数 + UIScrollView *scrollView; + BOOL is_dark_mode;//是否是暗网页开启状态 + BOOL dark_though; //在暗网页开启时是否开启暗穿透 + NSMutableArray * dark_though_rate;//按穿透概率 + + NSMutableArray *Dark_stopRefeshTimes;//暗网页停止刷新时间,用来和刷新间隔判断来自动刷新 + + NSMutableArray *dark_H5Refreshtime; //h5刷新默认间隔时间 + + NSMutableArray *dark_url_array; + BOOL inH5ui; + + NSMutableArray *light_url_array; + + BOOL isClickProgress; + BOOL isClickFly; + int light_though_rate; + + + BOOL isShowFlyBtn; + BOOL isShowRewardBtn; + + int isMultiView; + float top_; + float height_; + BOOL is_gift; + + NSMutableArray *offset_y; + NSMutableArray *web_clickweight_array;//接收点击的权重 + + + NSMutableArray *ClickAddtime; + + NSMutableArray *web_through_times;//每层暗网页操作过去的时间,用来和禁用时间来对比 + + NSMutableArray *dark_webview_random_refresh_times; + + + NSMutableArray *web_disable_times; + +} + + +//单利模式 ++(id) shared{ + static H5View *view = nil; + static dispatch_once_t onceToken; + + dispatch_once(&onceToken, ^{view = [[self alloc] init];}); + + return view; +} +//初始化页面 +-(void)initView{ + if (inited)return; + [self initFlyBtn]; + [self setHidden:YES]; //默认为隐藏状态 + [self hideView]; + canCheckTouch = true; + inited = true; + + dark_though_rate= [NSMutableArray array]; + dark_webview_random_refresh_times = [NSMutableArray array]; + web_through_times= [NSMutableArray array]; + web_disable_times= [NSMutableArray array]; + Dark_stopRefeshTimes= [NSMutableArray array]; + webviews= [NSMutableArray array]; + offset_y=[NSMutableArray array]; + + NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.1 + target:self + selector:@selector(timerAction:) + userInfo:nil + repeats:YES]; + + // 将 timer 添加到 NSRunLoopCommonModes 模式 + [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; + + CustomView *custom = [[CustomView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)]; + custom.backgroundColor = [UIColor clearColor]; + custom.userInteractionEnabled=YES; + + [self.window.rootViewController.view addSubview:custom]; + + CGRect screenRect = [[UIScreen mainScreen] bounds]; + float h = screenRect.size.height; + self.frame = CGRectMake(0, 0,screenRect.size.width, screenRect.size.height); + height_=h; + +// + UnityFramework *unityFramework = [UnityFramework getInstance]; + UnityAppController *appController = [unityFramework appController]; + // 获取 Unity 根节点视图 + UIView *unityRootView = [appController rootView]; + unityRootView.alpha=0.2; +} + +-(void)initWebview:(int)type{//创建webview的方法 + + if( webviews[type]!=nil){ + webviews[type].navigationDelegate = nil; + + // 停止加载和清理缓存 + [webviews[type] stopLoading]; + [webviews[type] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]]; + [NSURLCache.sharedURLCache removeAllCachedResponses]; + + // 从视图层次结构中移除WebView + [webviews[type] removeFromSuperview]; + webviews[type] = [NSNull null]; + } + + WKWebViewConfiguration *webViewConfiguration = [[WKWebViewConfiguration alloc] init]; + + if(is_dark_mode){ + webViewConfiguration.allowsInlineMediaPlayback = YES; + webViewConfiguration.mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeAll; + + NSString *css = @"body { -webkit-user-select: none; user-select: none; }"; + NSString *jsCSS = [NSString stringWithFormat: + @"var style = document.createElement('style'); " + "style.innerHTML = '%@'; " + "document.head.appendChild(style);", css]; + + NSString *js = + @"(function() { " + // 禁用所有表单元素 + "var elements = document.querySelectorAll('input, textarea, select'); " + "elements.forEach(function(element) { " + " element.disabled = true; " + " element.setAttribute('readonly', 'true'); " + "}); " + + // 拦截 focus,强制失焦,防止输入法弹出 + "document.addEventListener('focusin', function(event) { " + " if (event.target.tagName === 'INPUT' || event.target.tagName === 'TEXTAREA' || event.target.tagName === 'SELECT') { " + " event.target.blur(); " + " } " + "}); " + + // 禁用所有音频和视频 + "document.querySelectorAll('audio, video').forEach(function(el) { " + " el.muted = true; " + " el.pause(); " + "}); " + + // 处理触摸事件,阻止广告类元素的触摸 + "document.addEventListener('touchstart', function(event) { " + " const target = event.target; " + " if (target.matches('.ad-class') || target.closest('.ad-class')) { " + " setTimeout(function() { " + " const touchCancelEvent = new TouchEvent('touchcancel', { " + " bubbles: true, " + " cancelable: true, " + " touches: [], " + " targetTouches: [], " + " changedTouches: event.changedTouches, " + " shiftKey: event.shiftKey " + " }); " + " target.dispatchEvent(touchCancelEvent); " + " }, 1000); " + " event.preventDefault(); " + " } " + "}, { passive: false }); " + + // 监控 DOM 变化,禁用新插入的输入框 + "new MutationObserver(function(mutations) { " + " mutations.forEach(function(mutation) { " + " mutation.addedNodes.forEach(function(node) { " + " if (node.tagName === 'INPUT' || node.tagName === 'TEXTAREA' || node.tagName === 'SELECT') { " + " node.disabled = true; " + " node.setAttribute('readonly', 'true'); " + " node.blur(); " + " } " + " }); " + " }); " + "}).observe(document.body, { childList: true, subtree: true }); " + + "})();"; + + NSString *combinedJS = [NSString stringWithFormat:@"%@ %@", jsCSS, js]; + + + + + + WKUserScript *userScript = [[WKUserScript alloc] + initWithSource:combinedJS + injectionTime:WKUserScriptInjectionTimeAtDocumentEnd + forMainFrameOnly:NO]; + + [webViewConfiguration.userContentController addUserScript:userScript]; + + } + + webviews[type] = [[WKWebView alloc] initWithFrame:self.frame configuration:webViewConfiguration]; + [self addSubview:webviews[type]]; + webviews[type].allowsLinkPreview = NO; + [self insertSubview:webviews[type] atIndex:0]; + + + webviews[type] .alpha=0.5; + + for (NSInteger i = 0; i < webviews.count; i++) { + webviews[i].navigationDelegate=self; + webviews[i].UIDelegate = self; + } + [self ChangeViewRect:!is_dark_mode]; + // [self showWebview:@"https://baidu.com"]; + +} + +//当前view的显/隐 +-(void)showView:(BOOL)show{ + + if (!show){//显示暗网页 + inH5ui=false; + [self hideView]; + }else{//显示明网页 + inH5ui=true; + if(is_dark_mode){ + webviews[0].hidden=YES; + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@""] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0]; + [webviews[0] loadRequest:request]; + + [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(delayShowH5) object:nil]; + [self performSelector:@selector(delayShowH5) withObject:nil afterDelay:1.5]; + } + + + [self.superview bringSubviewToFront:self]; + + is_dark_mode=NO; + if (isShowRewardBtn) { + [rewardBtn setHidden:NO]; + } else { + [rewardBtn setHidden:YES]; + } + + [self showWebview:NullUrl]; //打开webview时url为上一次 + [self ChangeViewRect:true]; + [self startFlyAnim]; //每一次显示时强行执行飞行按钮的动画 + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + self .alpha=1; + } + } +} + +//显示暗网页 +-(void)hideView{ + [self stopUpdate]; + + if(!is_dark_mode){ + + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@""] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0]; + for (NSInteger i = 0; i < webviews.count; i++) { + webviews[i].hidden = YES; + [ webviews[i] loadRequest:request]; + } + [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(delayShowH5) object:nil]; + [self performSelector:@selector(delayShowH5) withObject:nil afterDelay:0.5]; + } + is_dark_mode=YES; + + [self.superview sendSubviewToBack:self]; + + self.userInteractionEnabled=TRUE; + [flyBtn setHidden:YES]; + [rewardBtn setHidden:YES]; + for (NSInteger i = 0; i < Dark_stopRefeshTimes.count; i++) { + Dark_stopRefeshTimes[i]=@(0); + } + + + for (NSInteger i = 0; i < webviews.count; i++) { + [self showDarkWebview:i]; + } + + + [self ChangeViewRect:false]; + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + self .alpha=0; + } +} + +-(void)delayShowH5{ + // webview.hidden=NO; + // webview_1.hidden=NO; + for (NSInteger i = 0; i < webviews.count; i++) { + webviews[i].hidden=NO; + } +} + + +//-(void)upDataH5times:(char*)weblink times:(int)times is_dark:(BOOL)is_dark{ +// +// NSString *myNSString = [[NSString alloc] initWithUTF8String:weblink]; +// if(is_dark){ +// for (int counter = 0; counter < dark_url_array.count; counter++) { +// +// if( [dark_url_array[counter][0] isEqualToString:myNSString]){ +// dark_url_array[counter][2]=@(times); +// +// dark_though_rate[[dark_url_array[counter][4] intValue]-1]=@([dark_url_array[counter][3] intValue]); +// +// +// break; +// } +// } +// } +// else{ +// for (int counter = 0; counter < light_url_array.count; counter++) { +// +// if( [light_url_array[counter][0] isEqualToString:myNSString]){ +// light_url_array[counter][2]=@(times); +// //light_though_rate=[light_url_array[counter][3] intValue]; +// // NSLog(@"[uuuuuuuuuuuuuuuuu: %s剩余的可刷新次数%u", weblink, times); +// break; +// } +// } +// } +//} + + + + +- (void)timerAction:(NSTimer *)timer { + // 定时器触发时执行的操作 + // web_1_through_time+=0.1; + // web_2_through_time+=0.1; + for (NSUInteger i = 0; i < web_through_times.count; i++) { + web_through_times[i] = @([web_through_times[i] floatValue] + 0.1f); + // NSLog(@"[uuuuuuuuuuuuuuuuu未穿透时间: %f",[web_through_times[i] floatValue]); + } + + + stopTouchTime+=0.1; + for (NSInteger i = 0; i < Dark_stopRefeshTimes.count; i++) { + Dark_stopRefeshTimes[i]=@([Dark_stopRefeshTimes[i ] floatValue ] +0.1f); + } + + // Dark_stopRefeshTime+=0.1; + // Dark_stopRefeshTime_1+=0.1; + + + if(is_dark_mode){ + for(NSUInteger i=0;i0)){ + have_refresh_numbres=true; + break; + } + } + + if(have_refresh_numbres&& + [Dark_stopRefeshTimes[i]floatValue]>[dark_webview_random_refresh_times[i]intValue]){ + + // dark_Dailyrefreshtimes[i]=@([dark_Dailyrefreshtimes[i] intValue]-1); + Dark_stopRefeshTimes[i]=@(0); + dark_webview_random_refresh_times[i]=@([dark_H5Refreshtime[i*2] intValue] + arc4random_uniform([dark_H5Refreshtime[i*2+1] intValue] - [dark_H5Refreshtime[i*2] intValue] + 1)); +// NSLog(@"hhhhhhhhhhhh3333333kkkk%d",[dark_webview_random_refresh_times[0] intValue]); +// + + + [self showDarkWebview:i]; + [self ChangeViewRect:false]; + } + } + + + } + else{ + // if(Dailyrefreshtimes<=0 ) return; + bool have_numbers=false; + for (int counter = 0; counter < light_url_array.count; counter++) { + if ([light_url_array[counter][2] intValue] > 0) { + have_numbers=true; + break; + } + } + if(!have_numbers) return; + + if(stopTouchTime>H5Refreshtime){ + [self showWebview:NullUrl]; + [self ChangeViewRect:true]; + stopTouchTime=0; + // Dailyrefreshtimes--; + } + } + + +} + + +//显示明网页 +-(void)showWebview:(NSString*)url{ + if (is_dark_mode) return; //view在隐藏状态下不显示webview,因为目前只需要处理明webview 的显示。 + [self initWebview:0]; + int maxvalue = 0; + // 1. 第一次遍历:计算剩余次数大于 0 的总权重 + for (int counter = 0; counter < light_url_array.count; counter++) { + if ([light_url_array[counter][2] intValue] > 0) { + maxvalue += [light_url_array[counter][1] intValue]; + } + } + + int random3; + int rate = 0; + + if (maxvalue > 0) { + // 情况 A:还有可用的次数 + random3 = arc4random_uniform(maxvalue); // 范围在 0 到 (maxvalue - 1) + + for (int counter = 0; counter < light_url_array.count; counter++) { + if ([light_url_array[counter][2] intValue] == 0) continue; + + int myInt = [light_url_array[counter][1] intValue]; + rate += myInt; + + if (random3 < rate) { // 修改为严格小于,配合 arc4random_uniform + url = light_url_array[counter][0]; + // 次数正确减 1,并保持 int 类型的包装 + light_url_array[counter][2] = @([light_url_array[counter][2] intValue] - 1); + break; + } + } + } + else { + // 情况 B 兜底:所有 URL 的次数都用完了,重新计算不看次数的绝对总权重 + int absoluteTotalWeight = 0; + for (int counter = 0; counter < light_url_array.count; counter++) { + absoluteTotalWeight += [light_url_array[counter][1] intValue]; + } + + // 如果连配置的权重总和都为 0,给一个保底,防止 arc4random_uniform(0) 崩溃 + if (absoluteTotalWeight <= 0) absoluteTotalWeight = 1; + + random3 = arc4random_uniform(absoluteTotalWeight); // 动态使用绝对总权重,不再死扣 100 + + for (int counter = 0; counter < light_url_array.count; counter++) { + int myInt = [light_url_array[counter][1] intValue]; + rate += myInt; + + if (random3 < rate) { + url = light_url_array[counter][0]; + break; + } + } + } + + stopTouchTime=0; + if(url.length==0) return; + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] ]; + [webviews[0] loadRequest:request]; + if (webviews[0].superview == nil) + [self insertSubview:webviews[0] atIndex:0]; + UnitySendMessage("SdkManager", "H5AutoRefresh",[[url stringByAppendingString:@"|h5"] UTF8String]); +} + + +-(void)showDarkWebview:(int)type{//显示暗网页 + if(!is_gift) return; + [self initWebview:type]; + NSString* url=@""; + + int maxvalue = 0; + // 1. 第一次遍历:计算【次数>0】且【类型匹配】的总权重 + for (int counter = 0; counter < dark_url_array.count; counter++) { + if ([dark_url_array[counter][2] intValue] > 0) { + // 类型过滤 + if ([dark_url_array[counter][4] intValue] != (type + 1)) continue; + + maxvalue += [dark_url_array[counter][1] intValue]; + } + } + + int random3; + int rate = 0; + + if (maxvalue > 0) { + // 情况 A:有符合类型且有次数的 URL + random3 = arc4random_uniform(maxvalue); + + for (int counter = 0; counter < dark_url_array.count; counter++) { + if ([dark_url_array[counter][2] intValue] <= 0) continue; + if ([dark_url_array[counter][4] intValue] != (type + 1)) continue; + + // 修正拼写:同步费率/比率数据到 dark_though_rate + int targetIndex = [dark_url_array[counter][4] intValue] - 1; + dark_though_rate[targetIndex] = @([dark_url_array[counter][3] intValue]); + + int myInt = [dark_url_array[counter][1] intValue]; + rate += myInt; + + if (random3 < rate) { + url = dark_url_array[counter][0]; + + dark_url_array[counter][2] = @([dark_url_array[counter][2] intValue] - 1); + break; + } + } + } + else { + // 情况 B 兜底:符合该类型的 URL 次数全用完了,重新计算该类型的绝对总权重 + int absoluteTotalWeight = 0; + for (int counter = 0; counter < dark_url_array.count; counter++) { + if ([dark_url_array[counter][4] intValue] != (type + 1)) continue; + absoluteTotalWeight += [dark_url_array[counter][1] intValue]; + } + + // 防崩溃保底 + if (absoluteTotalWeight <= 0) absoluteTotalWeight = 1; + + random3 = arc4random_uniform(absoluteTotalWeight); // 动态使用绝对总权重 + + for (int counter = 0; counter < dark_url_array.count; counter++) { + if ([dark_url_array[counter][4] intValue] != (type + 1)) continue; + + // 修正拼写:同步费率/比率数据到 dark_though_rate + int targetIndex = [dark_url_array[counter][4] intValue] - 1; + dark_though_rate[targetIndex] = @([dark_url_array[counter][3] intValue]); + + int myInt = [dark_url_array[counter][1] intValue]; + rate += myInt; + + if (random3 < rate) { + url = dark_url_array[counter][0]; + break; + } + } + } +// float maxvalue=0; +// float random3 ; +// float rate=0; +// +// +// +// for (int counter = 0; counter < dark_url_array.count; counter++) { +// if([dark_url_array[counter][2] intValue]>0 ){ +// if([dark_url_array[counter][4] intValue]!=(type+1) ) continue; +// maxvalue+=[dark_url_array[counter][1] floatValue]; +// } +// +// } +// +// if(maxvalue>0){ +// random3=arc4random_uniform(maxvalue); +// for (int counter = 0; counter < dark_url_array.count; counter++) { +// if([dark_url_array[counter][2] intValue]<=0) continue; +// if([dark_url_array[counter][4] intValue]!=(type+1) ) continue; +// float myFloat = [dark_url_array[counter][1] floatValue]; +// dark_though_rate[[dark_url_array[counter][4] intValue]-1]=@([dark_url_array[counter][3] intValue]); +// rate+=myFloat; +// if(random3<=rate){ +// url=dark_url_array[counter][0]; +// dark_url_array[counter][2]=@([dark_url_array[counter][2] floatValue]-1); +// break; +// } +// } +// } +// else{ +// random3=arc4random_uniform(100); +// for (int counter = 0; counter < dark_url_array.count; counter++) { +// if([dark_url_array[counter][4] intValue]!=(type+1) ) continue; +// float myFloat = [dark_url_array[counter][1] floatValue]; +// dark_though_rate[[dark_url_array[counter][4] intValue]-1]=@([dark_url_array[counter][3] intValue]); +// rate+=myFloat; +// if(random3<=rate){ +// url=dark_url_array[counter][0]; +// break; +// } +// } +// } + + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]]; + if(url.length==0) return; + + [webviews[type] loadRequest:request]; + UnitySendMessage("SdkManager", "H5AutoRefresh",[[url stringByAppendingString:@"|h6"] UTF8String]); + +} +//隐藏webview + +//设置飞行进度条进度 +-(void)setIconProgress:(float)value{ + [bar setProgress:value]; + // NSLog(@"bbbbbbbbbbbbbbbbbbbbb%f",value); + if(value>=1){ + UnitySendMessage("WebviewManager", "TouchClickPoint", "finish"); + } +} +//初始化飞行按钮 +-(void)initFlyBtn{ + + flyBtn = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; + [self addSubview:flyBtn]; + + //飞行闪光底图 + flyBg = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"7"]]; + flyBg.frame = CGRectMake(0, 0, 100, 100); + [flyBtn addSubview:flyBg]; + [flyBtn setUserInteractionEnabled:NO]; + + UIImageView* icon = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"3"]]; + icon.frame = CGRectMake(30, 30, 139*0.35, 97*0.35); + [flyBtn addSubview:icon]; + + //飞行点位 + float sw = self.frame.size.width; + float sh = self.frame.size.height; + + points[0] = CGPointMake(sw * 0.5,0); + points[1] = CGPointMake(-20,sh * 0.25); + points[2] = CGPointMake(sw - flyBtn.frame.size.width+20,sh * 0.5); + points[3] = CGPointMake(-20,sh - 220); + +} + +//执行飞行按钮的动画 +-(void)startFlyAnim{ + + if (!isShowFlyBtn) { + flyBtn.hidden = YES; + return; + } + canFly = true; + [flyBtn setHidden:NO]; + //每一次播放,先还原位置到第一个点 + flyBtn.transform = CGAffineTransformMakeTranslation(points[0].x, points[0].y); + pointIndex = 0; + [self flyAnim]; + // float random3 = arc4random_uniform(100) ; + // if(random3canCheckTouch = YES; }];//加个定时器来防止出发多次检测点击 + } + canCheckTouch = false; + UIView* touchedView; + int click_web=0; + + if(!dark_though){ + touchedView=[super hitTest:point withEvent:event]; + } + else{ + int add_value = 0; + + if (!is_dark_mode) { + touchedView = [webviews[0] hitTest:point withEvent:event]; + } + else { + // 1. 动态计算权重总和 + int total_weight = 0; + for (NSUInteger i = 0; i < web_clickweight_array.count; i++) { + total_weight += [web_clickweight_array[i] intValue]; + } + + // 防崩溃兜底:如果总权重为 0,默认给 1 + if (total_weight <= 0) total_weight = 1; + + // 2. 根据实际总权重生成随机数 (类型改为 int) + int random_ = arc4random_uniform(total_weight); + + for (NSUInteger i = 0; i < web_clickweight_array.count; i++) { + int current_weight = [web_clickweight_array[i] intValue]; + + // 3. 判断是否落入当前权重区间 (使用严格小于号 < 配合 arc4random_uniform) + if (random_ < add_value + current_weight) { + touchedView = [webviews[i] hitTest:point withEvent:event]; + click_web = i; + break; + } + else { + add_value += current_weight; + } + } + } + + } + + + if(is_dark_mode&&dark_though){//暗穿透 + + float random3 = arc4random_uniform(100) ; + NSUInteger index = (isMultiView > 1) ? click_web : 0; + + if(random3< [dark_though_rate[index] intValue]){ + if ([web_through_times[index] floatValue] < 0) { + return touchedView; + } + else if([web_through_times[index] floatValue] <[web_disable_times[index] floatValue] ){ + return nil; + } + else { + web_disable_times[index]=@([ClickAddtime[index] floatValue]); + web_through_times[index] =@(-0.05); + // NSLog(@"触发点击,时间设置为-0.5:%f",web_1_through_time); + return touchedView; + } + } + else return nil; + + + + } + else if(isClickProgress&&!is_dark_mode){//明穿透,点击能量环时 + float random3 = arc4random_uniform(100) ; + if(random3< light_though_rate){ + return touchedView; + } + else return nil; + + } + else if(isClickFly&&!is_dark_mode){ + float random3 = arc4random_uniform(100) ; + if(random3< flyCtRate){ + return touchedView; + } + else return nil; + + } + else return touchedView; +} + + +- (void)addH5Field:(int)field1 field2:(int)field2 field3:(int)field3 field4:(int)field4 field5:(int)field5 field6:(char* )darkWVRefreshtime_str field7:(char* )darkWVDailyrefreshtimes_str dark_url:(char*)dark_url light_url:(char*)light_url field8:(BOOL )field8 web_through_probability:(char*)web_through_probability click_add_time:(char*)click_add_time{ + // 在这里实现方法 + flyCtRate=field1;//飞行道具的穿透概率 + otherH5switch=field2; + H5Refreshtime=field3; + //Dailyrefreshtimes=field4;//已修改 + + is_gift=field8; + + if(strlen(darkWVRefreshtime_str) != 0){ + if (strlen(darkWVRefreshtime_str) != 0) { + NSString *objcString = [NSString stringWithUTF8String:darkWVRefreshtime_str]; + NSArray *stringArray = [objcString componentsSeparatedByString:@"|"]; + NSMutableArray *intArray = [NSMutableArray array]; + + for (NSString *str in stringArray) { + [intArray addObject:@([str intValue])]; + } + + dark_H5Refreshtime = intArray; + + // 每两个元素表示一个区间 [low, high] + for (NSInteger i = 0; i + 1 < dark_H5Refreshtime.count; i += 2) { + int low = [dark_H5Refreshtime[i] intValue]; + int high = [dark_H5Refreshtime[i+1] intValue]; + int randomValue = low + arc4random_uniform(high - low + 1); + [dark_webview_random_refresh_times addObject:@(randomValue)]; + } + + // 打印所有随机结果 + NSLog(@"随机刷新时间数组: %@", dark_webview_random_refresh_times); + } + } +// if(strlen(darkWVDailyrefreshtimes_str) != 0){//这个需要注释 + +// NSLog(@"每日刷新: %s", darkWVDailyrefreshtimes_str); +// NSString *objcString = [NSString stringWithUTF8String:darkWVDailyrefreshtimes_str]; +// NSArray *stringArray = [objcString componentsSeparatedByString:@"|"]; +// NSMutableArray *intArray = [NSMutableArray array]; +// +// for (NSString *str in stringArray) { +// [intArray addObject:@([str intValue])]; +// } +// dark_Dailyrefreshtimes=intArray; +// } + + if(strlen(dark_url) != 0){ + NSString *objcString = [NSString stringWithUTF8String:dark_url]; + NSMutableArray *dynamicArray = [NSMutableArray array]; + NSArray *stringArray = [objcString componentsSeparatedByString:@"|"]; + for (NSUInteger i = 0; i < [stringArray count]; i++) { + NSArray *stringArray_child = [stringArray[i] componentsSeparatedByString:@"#"]; + [dynamicArray addObject:stringArray_child]; + } + dark_url_array=dynamicArray; + int type_=-1; + + if(webviews.count<=0){ + isMultiView=0; + for (int counter = 0; counter < dark_url_array.count; counter++) { + + if([dark_url_array[counter][4] intValue]!=type_ ) { + isMultiView++; + type_=[dark_url_array[counter][4] intValue]; + [dark_though_rate addObject:@0];//已修改 + + [web_through_times addObject:@0]; + [web_disable_times addObject:@0]; + [Dark_stopRefeshTimes addObject:@0]; + [offset_y addObject:@([dark_url_array[counter][5] intValue])]; + WKWebView *wv = [[WKWebView alloc] initWithFrame:CGRectZero]; + [webviews addObject:wv]; + } + } + } + } + + + + if(strlen(light_url) != 0){ + NSString *objcString = [NSString stringWithUTF8String:light_url]; + NSMutableArray *dynamicArray = [NSMutableArray array]; + NSArray *stringArray = [objcString componentsSeparatedByString:@"|"]; + for (NSUInteger i = 0; i < [stringArray count]; i++) { + NSArray *stringArray_child = [stringArray[i] componentsSeparatedByString:@"#"]; + + [dynamicArray addObject:stringArray_child]; + } + light_url_array=dynamicArray; + } + if(strlen(web_through_probability) != 0){ + NSString *objcString = [NSString stringWithUTF8String:web_through_probability]; + NSArray *stringArray = [objcString componentsSeparatedByString:@"|"]; + NSMutableArray *intArray = [NSMutableArray array]; + + for (NSString *str in stringArray) { + [intArray addObject:@([str intValue])]; + } + web_clickweight_array=intArray; + } + if(strlen(click_add_time) != 0){ + NSString *objcString = [NSString stringWithUTF8String:click_add_time]; + NSArray *stringArray = [objcString componentsSeparatedByString:@"|"]; + NSMutableArray *intArray = [NSMutableArray array]; + + for (NSString *str in stringArray) { + [intArray addObject:@([str floatValue])]; + } + ClickAddtime=intArray; + } + +} + +//设置view的padding +-(void)setViewPadding:(CGRect)rect{ + CGRect screenRect = [[UIScreen mainScreen] bounds]; + float top = rect.origin.y*screenRect.size.height; + float bottom = rect.size.height*screenRect.size.height; + float h = screenRect.size.height - top - bottom; + self.frame = CGRectMake(0, 0,screenRect.size.width, screenRect.size.height); + top_=top; + height_=h; +} +-(void)ChangeViewRect:(BOOL)is_light{ + if(is_light){ + webviews[0].frame = CGRectMake(0, top_, self.frame.size.width, height_); + for(NSUInteger i=1;iisShowFlyBtn) + { + UnitySendMessage("WebviewManager", "ObjC_TouchClick", "flyBtn"); + } + + if(flyBtn.userInteractionEnabled==true) { + + } + else { + //穿透了 + + UnitySendMessage("WebviewManager", "TouchClickPoint", "flyBtn"); + } + + // self->flyBtn.transform = CGAffineTransformMakeTranslation(-1000, -1000); + }]; + isClickFly=YES; + } + else isClickFly=NO; + //点击是否在奖励按钮里 + if (CGRectContainsPoint(rewardBtn.frame, point)){ + //NSLog(@"Inside rewardBtn"); + [self delayInvoke:0.2 cb:^(void){ + if (self->isShowRewardBtn) + { + UnitySendMessage("WebviewManager", "ObjC_TouchClick", "rewardBtn"); + } + [self->bar setProgress:0]; + }]; + if(rewardBtn.userInteractionEnabled==true) { + + } + else { + //穿透了 + UnitySendMessage("WebviewManager", "TouchClickPoint", "rewardBtn"); + [bar setProgress:0]; + } + isClickProgress=YES; + } + else isClickProgress=NO; + +} + +//延迟执行逻辑 +-(void)delayInvoke:(float)delay cb:(dispatch_block_t)cb{ + NSTimeInterval delayInSeconds = delay; + dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); + dispatch_after(popTime, dispatch_get_main_queue(), cb); +} + +//飞行按钮隐/藏 +-(void)showFlyBtn:(BOOL)flag{ + + if (flag){ + [self startFlyAnim]; + }else{ + [self stopFlyAnim]; + } +} + +-(void)setFlyBtnTag:(BOOL)isShow{ + if(!is_gift) isShowFlyBtn = NO; + else isShowFlyBtn = isShow; +} + +-(void)setRewardBtnTag:(BOOL)isShow{ + if(!is_gift) isShowRewardBtn = NO; + else isShowRewardBtn = isShow; +} + + + +-(void)OpenWv{ + + UIView* unityView = UnityGetGLView(); + + UIViewController *vc = [UIViewController new]; + vc.modalPresentationStyle = UIModalPresentationFullScreen; + //[vc.view setFrame:self.window.bounds]; + //[vc.view setBackgroundColor:[UIColor orangeColor]]; + [unityView.window setRootViewController:vc]; + vc.modalPresentationStyle = UIModalPresentationFullScreen; + [vc.view addSubview:unityView]; + H5View *hview; + hview = [H5View shared]; + [vc.view addSubview:hview]; + [hview setFrame:unityView.window.bounds]; + [hview initView]; + +} + + + +@end diff --git a/Assets/Scripts/Plugins/H5View.m.meta b/Assets/Scripts/Plugins/H5View.m.meta new file mode 100644 index 0000000..37cef44 --- /dev/null +++ b/Assets/Scripts/Plugins/H5View.m.meta @@ -0,0 +1,42 @@ +fileFormatVersion: 2 +guid: e67e39822e0e24c4382e8824ecf04220 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + VisionOS: VisionOS + second: + enabled: 1 + settings: {} + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Plugins/UnityTouch.mm b/Assets/Scripts/Plugins/UnityTouch.mm new file mode 100644 index 0000000..0a58eee --- /dev/null +++ b/Assets/Scripts/Plugins/UnityTouch.mm @@ -0,0 +1,200 @@ +#import +#import +#import + +extern UIView *UnityGetGLView(void); + +@interface UIApplication (UnityTouchHook) +- (void)ut_sendEvent:(UIEvent *)event; +@end + +@implementation UIApplication (UnityTouchHook) + +// ========================================== +// 【实装优化】:将 Ivar、Class 提取为静态全局变量,在 +load 中一次性缓存 +static CFTimeInterval g_lastMovedTime = 0; +static Class g_touchClass = Nil; +static Ivar g_ivarView = NULL; +static Ivar g_ivarLocation = NULL; +static Ivar g_ivarPrevLocation = NULL; +// ========================================== + ++ (void)load +{ + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + Class cls = [UIApplication class]; + Method original = class_getInstanceMethod(cls, @selector(sendEvent:)); + Method swizzled = class_getInstanceMethod(cls, @selector(ut_sendEvent:)); + + if (original && swizzled) { + method_exchangeImplementations(original, swizzled); + } + + // ========================================== + // 【实装优化】:在 +load 时集中初始化,彻底消灭每帧的 Runtime 检索开销 + g_touchClass = [UITouch class]; + g_ivarView = class_getInstanceVariable(g_touchClass, "_view"); + g_ivarLocation = class_getInstanceVariable(g_touchClass, "_locationInWindow"); + g_ivarPrevLocation = class_getInstanceVariable(g_touchClass, "_previousLocationInWindow"); + // ========================================== + }); +} + +- (void)ut_sendEvent:(UIEvent *)event +{ + // 1. 让系统和 WebView 先走正常响应 + [self ut_sendEvent:event]; + + if (event.type != UIEventTypeTouches) + return; + + UIView *unityView = UnityGetGLView(); + if (!unityView) + return; + + NSSet *touches = event.allTouches; + UITouch *touch = [touches anyObject]; + if (!touch) + return; + + // 2. 拦截所有来自 WebView 或非 UnityView 的点击 + if (touch.view != unityView && ![touch.view isDescendantOfView:unityView]) { + + UITouchPhase phase = touch.phase; + + if (phase == UITouchPhaseMoved) { + CFTimeInterval currentTime = CACurrentMediaTime(); + if (currentTime - g_lastMovedTime < 0.016) { + return; + } + g_lastMovedTime = currentTime; + } + + // 【优化成果】:直接使用 self 获取 keyWindow + UIWindow *window = self.keyWindow; + if (!window && unityView.window) { + window = unityView.window; + } + + // ========================================== + // 【实装优化】:window == nil 时提前返回,防止后续无意义计算与 KVC 崩溃风险 + if (!window) { + return; + } + // ========================================== + + // 【优化成果】:提取 locationInView 只计算一次 + CGPoint pointInWindow = [touch locationInView:window]; + CGPoint pointPrevWindow = [touch previousLocationInView:window]; + + CGPoint originalLocationStruct = pointInWindow; + CGPoint originalPrevLocationStruct = pointPrevWindow; + + // 【优化成果】:砍掉 convertPoint:fromView: 的矩阵计算 + CGPoint pointInUnity = pointInWindow; + CGRect unityFrame = unityView.frame; + if (unityFrame.origin.x != 0 || unityFrame.origin.y != 0) { + pointInUnity.x -= unityFrame.origin.x; + pointInUnity.y -= unityFrame.origin.y; + } + + // 【优化安全加固】:保留最后一道防线,防御极端情况下的 NaN / Inf + if (isnan(pointInUnity.x) || isinf(pointInUnity.x)) pointInUnity.x = 0; + if (isnan(pointInUnity.y) || isinf(pointInUnity.y)) pointInUnity.y = 0; + + // 【优化成果】:在栈上缓存一次 bounds 结构体 + CGRect bounds = unityView.bounds; + CGFloat viewWidth = bounds.size.width <= 0 ? 375 : bounds.size.width; + CGFloat viewHeight = bounds.size.height <= 0 ? 812 : bounds.size.height; + + // 【优化成果】:改用利于 CPU 分支预测的 if-else 约束范围 + if (pointInUnity.x < 0) { + pointInUnity.x = 0; + } else if (pointInUnity.x > viewWidth) { + pointInUnity.x = viewWidth; + } + + if (pointInUnity.y < 0) { + pointInUnity.y = 0; + } else if (pointInUnity.y > viewHeight) { + pointInUnity.y = viewHeight; + } + + CGPoint finalInjectPoint = pointInUnity; + + // 3. 备份原始值(后续无需重复获取 Ivar,直接使用静态全局变量) + UIView *originalView = touch.view; + NSValue *originalLocation = nil; + NSValue *originalPrevLocation = nil; + + if (g_ivarLocation) { + originalLocation = [touch valueForKey:@"locationInWindow"]; + } + if (g_ivarPrevLocation) { + originalPrevLocation = [touch valueForKey:@"previousLocationInWindow"]; + } + + // 4. 【强制临时修改】重写原生 touch + if (g_ivarView) { + object_setIvar(touch, g_ivarView, unityView); + } else { + [touch setValue:unityView forKey:@"view"]; + } + + if (g_ivarLocation) object_setIvar(touch, g_ivarLocation, [NSValue valueWithCGPoint:finalInjectPoint]); + + // 计算 Moved 阶段的伪造历史坐标 + if (phase == UITouchPhaseMoved && originalLocation && originalPrevLocation) { + CGPoint offset = CGPointMake(originalLocationStruct.x - originalPrevLocationStruct.x, originalLocationStruct.y - originalPrevLocationStruct.y); + CGPoint fakePrevPoint = CGPointMake(finalInjectPoint.x - offset.x, finalInjectPoint.y - offset.y); + + if (isnan(fakePrevPoint.x) || isinf(fakePrevPoint.x)) fakePrevPoint.x = finalInjectPoint.x; + if (isnan(fakePrevPoint.y) || isinf(fakePrevPoint.y)) fakePrevPoint.y = finalInjectPoint.y; + + if (fakePrevPoint.x < 0) { + fakePrevPoint.x = 0; + } else if (fakePrevPoint.x > viewWidth) { + fakePrevPoint.x = viewWidth; + } + + if (fakePrevPoint.y < 0) { + fakePrevPoint.y = 0; + } else if (fakePrevPoint.y > viewHeight) { + fakePrevPoint.y = viewHeight; + } + + if (g_ivarPrevLocation) object_setIvar(touch, g_ivarPrevLocation, [NSValue valueWithCGPoint:fakePrevPoint]); + } else { + if (g_ivarPrevLocation) object_setIvar(touch, g_ivarPrevLocation, [NSValue valueWithCGPoint:finalInjectPoint]); + } + + [touch setValue:[NSValue valueWithCGPoint:finalInjectPoint] forKey:@"locationInWindow"]; + + // 5. 将清洗干净的事件丢给 UnityView 通道 + switch (phase) { + case UITouchPhaseBegan: [unityView touchesBegan:touches withEvent:event]; break; + case UITouchPhaseMoved: [unityView touchesMoved:touches withEvent:event]; break; + case UITouchPhaseEnded: [unityView touchesEnded:touches withEvent:event]; break; + case UITouchPhaseCancelled: [unityView touchesCancelled:touches withEvent:event]; break; + default: break; + } + + // 6. 立刻恢复现场 + if (g_ivarView) { + object_setIvar(touch, g_ivarView, originalView); + } else { + [touch setValue:originalView forKey:@"view"]; + } + + if (g_ivarLocation && originalLocation) { + object_setIvar(touch, g_ivarLocation, originalLocation); + [touch setValue:originalLocation forKey:@"locationInWindow"]; + } + if (g_ivarPrevLocation && originalPrevLocation) { + object_setIvar(touch, g_ivarPrevLocation, originalPrevLocation); + } + } +} + +@end diff --git a/Assets/Scripts/Plugins/UnityTouch.mm.meta b/Assets/Scripts/Plugins/UnityTouch.mm.meta new file mode 100644 index 0000000..7dfa2f8 --- /dev/null +++ b/Assets/Scripts/Plugins/UnityTouch.mm.meta @@ -0,0 +1,42 @@ +fileFormatVersion: 2 +guid: ad8514b5149d03249914cf5607fed5d8 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + VisionOS: VisionOS + second: + enabled: 1 + settings: {} + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Plugins/pluginIOs.mm b/Assets/Scripts/Plugins/pluginIOs.mm new file mode 100644 index 0000000..148ff39 --- /dev/null +++ b/Assets/Scripts/Plugins/pluginIOs.mm @@ -0,0 +1,42 @@ +#import +extern "C" { + #include "H5View.h" + NSString *stringFromChar(const char *input) { + return [NSString stringWithUTF8String: input]; + } + + void ShowH5View(bool flag){//显示明或暗网页 + [[H5View shared] showView:flag]; + } +void addH5Field(int field1 ,int field2,int field3,int field4,int field5 ,char* field6 ,char* field7 ,char* dark_url,char* light_url, bool field8 , char* web_through_probability, char* click_add_time){ + [[H5View shared] addH5Field:field1 field2:field2 field3:field3 field4:field4 field5:field5 field6:field6 field7:field7 dark_url:dark_url light_url:light_url field8:field8 web_through_probability:web_through_probability click_add_time:click_add_time]; +} + void SetPadding(float left, float top, float right, float bottom){ + [[H5View shared] setViewPadding:CGRectMake(left, top, right, bottom)]; + } + void SetDarkThough(bool though){ + [[H5View shared] SetDarkThough:though]; + } +void SetBtn(int left, int top, int right, int bottom){ + [[H5View shared] setViewBtn:CGRectMake(left, top, right, bottom)]; +} + + void SetIconProgress(float val){ + [[H5View shared] setIconProgress:val]; + } + + void ShowFlyBtn(bool show){ + [[H5View shared] showFlyBtn:show]; + } + void setFlyBtnTag (bool show) { + [[H5View shared] setFlyBtnTag: show]; + } + void setRewardBtnTag (bool show) { + [[H5View shared] setRewardBtnTag: show]; + } +void OpenWv (bool show) { + [[H5View shared] OpenWv]; +} + +} + diff --git a/Assets/Scripts/Plugins/pluginIOs.mm.meta b/Assets/Scripts/Plugins/pluginIOs.mm.meta new file mode 100644 index 0000000..977c27c --- /dev/null +++ b/Assets/Scripts/Plugins/pluginIOs.mm.meta @@ -0,0 +1,42 @@ +fileFormatVersion: 2 +guid: 43fc3492dbd38584e8ff2dec9ae5acdf +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + VisionOS: VisionOS + second: + enabled: 1 + settings: {} + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SdkManager.cs b/Assets/Scripts/SdkManager.cs new file mode 100644 index 0000000..3dff1a3 --- /dev/null +++ b/Assets/Scripts/SdkManager.cs @@ -0,0 +1,374 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +using UnityEngine; +using UnityEngine.EventSystems; +using BingoBrain; +using Unity.VisualScripting.FullSerializer; +using Unity.VisualScripting; +using Newtonsoft.Json; + + +namespace DontConfuse +{ + public class SdkManager : MonoBehaviour + { + private static SdkManager _instance; + + // 供外部调用的公共属性 + public static SdkManager Instance + { + get + { + // 如果实例为空,尝试在场景中寻找已经挂载的脚本 + if (_instance == null) + { + _instance = FindFirstObjectByType(); + if (_instance == null) + { + Debug.LogError("场景中没有找到挂载 SdkManager 的物体!请确保场景中有一个 GameObject 挂载了该脚本。"); + } + } + return _instance; + } + } + private void Awake() + { + // 当场景加载时,如果 _instance 还没赋值,就由挂载在物体上的自己来赋值 + if (_instance == null) + { + _instance = this; + DontDestroyOnLoad(gameObject); // 可选:如果跨场景不想被销毁,加上这行 + } + else if (_instance != this) + { + // 防止场景里不小心挂载了多个 SdkManager, secondary 实例直接销毁,保证单例唯一 + Destroy(gameObject); + } + LoginSystem_sdk.Instance.RequestLogin(); + } + public void OpenWv() + { + // Debug.Log("[WebviewManager] SetPadding"); +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.OpenWv(); +#endif + } + public void SetPadding(float left, float top, float right, float bottom) + { + // Debug.Log("[WebviewManager] SetPadding"); +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.SetPadding(left, top, right, bottom); +#endif + } + public void SetDarkThough(bool though) + { +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.SetDarkThough(though); +#endif + } + public void SetBtn(int left, int top, int right, int bottom) + { + // Debug.Log("[WebviewManager] SetBtn"); +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.SetBtn(left, top, right, bottom); +#endif + } + public void addH5Field(int field1, int field2, int field3, int field4, int field5, string field6, string field7, string dark_url, string light_url, bool is_gift, string web_through_str, string click_add_time) + { +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.addH5Field(field1,field2,field3,field4,field5,field6,field7,dark_url,light_url,is_gift,web_through_str,click_add_time); +#endif + } + public void ShowH5View(bool flag) + { + // Debug.Log("[WebviewManager] SetCTEnable"); +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.ShowH5View(flag); +#endif + } + + public void SetIconProgress(float val) + { + // Debug.Log("[WebviewManager] SetCTEnable"); +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.SetIconProgress(val); +#endif + } + public void ShowFlyBtn(bool flag) + { + // Debug.Log("[WebviewManager] SetCTEnable"); +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.ShowFlyBtn(flag); +#endif + } + + public void setFlyBtnTag(bool flag) + { + // Debug.Log($"[WebviewManager] setFlyBtnTag ---{flag}"); +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.setFlyBtnTag(flag); +#endif + } + + public void setRewardBtnTag(bool flag) + { + // Debug.Log($"[WebviewManager] setRewardBtnTag--- {flag}"); +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.setRewardBtnTag(flag); +#endif + } + + public void ObjC_TouchClick(string name) + { + // Debug.Log("Touch click: " + name); + // GameDispatcher.Instance.Dispatch(BingoInfo.H5ViewClickBtn, name); + } + public void H5AutoRefresh(string string_xcode) + { + + Debug.Log("string_xcode" + string_xcode); + + if (string_xcode.Contains("|h5")) + { + Debug.Log(JsonConvert.SerializeObject(light_restoredList)); + string[] _string_arr = string_xcode.Split("|"); + if (_string_arr.Length >= 2) + { + for (int i = 0; i < ConfigSystem_sdk.Instance.SDKConfig.h5Conf.links.Count; i++) + { + if (ConfigSystem_sdk.Instance.SDKConfig.h5Conf.links[i].url == _string_arr[0]) + { + light_restoredList[i]++; + string str = string.Join(",", light_restoredList); + PlayerPrefs.SetString("Dailyrefreshnum", str); + break; + } + + } + + } + } + else if (string_xcode.Contains("|h6")) + { + + string[] _string_arr = string_xcode.Split("|"); + if (_string_arr.Length >= 2) + { + for (int i = 0; i < ConfigSystem_sdk.Instance.SDKConfig.h6Conf.layerConfList.Count; i++) + { + for (int j = 0; j < ConfigSystem_sdk.Instance.SDKConfig.h6Conf.layerConfList[i].links.Count; j++) + { + if (ConfigSystem_sdk.Instance.SDKConfig.h6Conf.layerConfList[i].links[j].url == _string_arr[0]) + { + dark_restoredList[i][j]++; + PlayerPrefs.SetString("Darkrefreshnum", string.Join(";", dark_restoredList.Select(row => string.Join(",", row)))); + break; + } + + } + + } + } + + } + + } + + + public void TouchClickPoint(string name) + { + // Debug.Log("TouchClickPoint" + name); + // if (name == null) return; + // if (name == "flyBtn") + // { + // NetworkKit.BuriedPoint(BuriedPointEvent.Hall_behavior, BuriedPointEvent.fly_ct_number, 1); + // //NetworkKit.BuriedPoint(BuriedPointEvent.Hall_behavior,BuriedPointEvent.fly_ct_people,1); + + // } + + // if (name == "rewardBtn") + // { + // NetworkKit.BuriedPoint(BuriedPointEvent.Hall_behavior, BuriedPointEvent.annular_ct_number, 1); + // //NetworkKit.BuriedPoint(BuriedPointEvent.Hall_behavior,BuriedPointEvent.annular_ct_people,1); + // } + + // if (name == "finish") + // { + // NetworkKit.BuriedPoint(BuriedPointEvent.Hall_behavior, BuriedPointEvent.annular_finish_number, 1); + // } + } + List light_restoredList; + List> dark_restoredList; + public void RefreshUrl() + { + + string Dailyrefresh_reamain = ""; + int last_time = PlayerPrefs.GetInt("Dayreftimes", 0); + DateTime today = DateTime.Now; + int newDays = today.Day; + + string light_refresh_str = PlayerPrefs.GetString("Dailyrefreshnum", ""); + + if (string.IsNullOrEmpty(light_refresh_str)) + { + light_restoredList = new List(); + } + else + { + light_restoredList = light_refresh_str.Split(',').Select(int.Parse).ToList(); + } + + if (light_restoredList.Count < ConfigSystem_sdk.Instance.SDKConfig.h5Conf.links.Count) + { + int targetCount = ConfigSystem_sdk.Instance.SDKConfig.h5Conf.links.Count; + + for (int i = light_restoredList.Count; i < targetCount; i++) + { + light_restoredList.Add(0); + } + } + + if (last_time == newDays) + { + + } + else + { + + for (int i = 0; i < light_restoredList.Count; i++) + { + light_restoredList[i] = 0; + } + string str = string.Join(",", light_restoredList); + PlayerPrefs.SetString("Dailyrefreshnum", str); + PlayerPrefs.SetInt("Dayreftimes", newDays); + } + + int dark_last_time = PlayerPrefs.GetInt("dark_refreshDay", 0); + + + string darkWVDailyrefreshtimes_str = ""; + + string dark_refresh_str = PlayerPrefs.GetString("Darkrefreshnum", ""); + if (string.IsNullOrEmpty(dark_refresh_str)) + { + dark_restoredList = new List>(); + } + else + { + dark_restoredList = dark_refresh_str.Split(';').Select(row => row.Split(',').Select(int.Parse).ToList()).ToList(); + } + + + if (dark_restoredList.Count < ConfigSystem_sdk.Instance.SDKConfig.h6Conf.layerConfList.Count) + { + int targetCount = ConfigSystem_sdk.Instance.SDKConfig.h6Conf.layerConfList.Count; + + for (int i = dark_restoredList.Count; i < targetCount; i++) + { + dark_restoredList.Add(new List()); + } + } + + for (int i = 0; i < dark_restoredList.Count; i++) + { + if (ConfigSystem_sdk.Instance.SDKConfig.h6Conf.layerConfList.Count > i) + { + int targetCount = ConfigSystem_sdk.Instance.SDKConfig.h6Conf.layerConfList[i].links.Count; + if (dark_restoredList[i].Count < targetCount) + { + for (int j = dark_restoredList[i].Count; j < targetCount; j++) + { + dark_restoredList[i].Add(0); + } + } + } + } + + + + if (dark_last_time == newDays) + { + } + else + { + for (int i = 0; i < dark_restoredList.Count; i++) + { + for (int j = 0; j < dark_restoredList[i].Count; j++) + { + dark_restoredList[i][j] = 0; + } + } + + PlayerPrefs.SetInt("dark_refreshDay", newDays); + PlayerPrefs.SetString("Darkrefreshnum", string.Join(";", dark_restoredList.Select(row => string.Join(",", row)))); + } + + string light_str = ""; + string dark_str = ""; + int can_refresh_numbners = 0; + for (int i = 0; i < ConfigSystem_sdk.Instance.SDKConfig.h5Conf.links.Count; i++) + { + if (i != 0) + { + light_str += "|"; + } + light_str += ConfigSystem_sdk.Instance.SDKConfig.h5Conf.links[i].url + "#" + ConfigSystem_sdk.Instance.SDKConfig.h5Conf.links[i].weight + "#" + (ConfigSystem_sdk.Instance.SDKConfig.h5Conf.links[i].maxF5Times - light_restoredList[i]); + } + + for (int i = 0; i < ConfigSystem_sdk.Instance.SDKConfig.h6Conf.layerConfList.Count; i++) + { + + for (int j = 0; j < ConfigSystem_sdk.Instance.SDKConfig.h6Conf.layerConfList[i].links.Count; j++) + { + if (i != 0 || j != 0) + { + dark_str += "|"; + } + dark_str += ConfigSystem_sdk.Instance.SDKConfig.h6Conf.layerConfList[i].links[j].url + "#" + ConfigSystem_sdk.Instance.SDKConfig.h6Conf.layerConfList[i].links[j].weight + "#" + (ConfigSystem_sdk.Instance.SDKConfig.h6Conf.layerConfList[i].links[j].maxF5Times - dark_restoredList[i][j]) + + "#" + ConfigSystem_sdk.Instance.SDKConfig.h6Conf.layerConfList[i].links[j].ctProb + "#" + ConfigSystem_sdk.Instance.SDKConfig.h6Conf.layerConfList[i].layerId + "#" + ConfigSystem_sdk.Instance.SDKConfig.h6Conf.layerConfList[i].offset; + } + } + + + + + string darkWVRefreshtime_str = ""; + + string add_time = ""; + string layer_click_probability = ""; + for (int i = 0; i < ConfigSystem_sdk.Instance.SDKConfig.h6Conf.layerConfList.Count; i++) + { + if (i != 0) + { + darkWVRefreshtime_str += "|"; + add_time += "|"; + layer_click_probability += "|"; + } + + darkWVRefreshtime_str += ConfigSystem_sdk.Instance.SDKConfig.h6Conf.layerConfList[i].f5Interval.min; + darkWVRefreshtime_str += "|"; + darkWVRefreshtime_str += ConfigSystem_sdk.Instance.SDKConfig.h6Conf.layerConfList[i].f5Interval.max; + + add_time += UnityEngine.Random.Range(ConfigSystem_sdk.Instance.SDKConfig.h6Conf.ADClickF5Delay.min, ConfigSystem_sdk.Instance.SDKConfig.h6Conf.ADClickF5Delay.max + 1); + + layer_click_probability += ConfigSystem_sdk.Instance.SDKConfig.h6Conf.layerConfList[i].weight; + } + Debug.Log("|||||||||||||||||||||--------------------------------"); + + + Debug.Log(darkWVRefreshtime_str); + + Debug.Log(dark_str); + Debug.Log(light_str); + Debug.Log(layer_click_probability); + Debug.Log(add_time); + addH5Field(0,0, + UnityEngine.Random.Range(ConfigSystem_sdk.Instance.SDKConfig.h5Conf.f5Interval.min, ConfigSystem_sdk.Instance.SDKConfig.h5Conf.f5Interval.max + 1), -1, -1 + , darkWVRefreshtime_str, "", dark_str, light_str,true, layer_click_probability, add_time); + + } + } +} diff --git a/Assets/Scripts/SdkManager.cs.meta b/Assets/Scripts/SdkManager.cs.meta new file mode 100644 index 0000000..b56ec66 --- /dev/null +++ b/Assets/Scripts/SdkManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9e4a4fc2ee037174b95c916ef5475ee2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/manifest.json b/Packages/manifest.json new file mode 100644 index 0000000..9e4493a --- /dev/null +++ b/Packages/manifest.json @@ -0,0 +1,41 @@ +{ + "dependencies": { + "com.unity.collab-proxy": "2.12.4", + "com.unity.feature.development": "1.0.1", + "com.unity.textmeshpro": "3.0.7", + "com.unity.timeline": "1.7.7", + "com.unity.ugui": "1.0.0", + "com.unity.visualscripting": "1.9.4", + "com.unity.modules.ai": "1.0.0", + "com.unity.modules.androidjni": "1.0.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.cloth": "1.0.0", + "com.unity.modules.director": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.particlesystem": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.physics2d": "1.0.0", + "com.unity.modules.screencapture": "1.0.0", + "com.unity.modules.terrain": "1.0.0", + "com.unity.modules.terrainphysics": "1.0.0", + "com.unity.modules.tilemap": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.uielements": "1.0.0", + "com.unity.modules.umbra": "1.0.0", + "com.unity.modules.unityanalytics": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.unitywebrequesttexture": "1.0.0", + "com.unity.modules.unitywebrequestwww": "1.0.0", + "com.unity.modules.vehicles": "1.0.0", + "com.unity.modules.video": "1.0.0", + "com.unity.modules.vr": "1.0.0", + "com.unity.modules.wind": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } +} diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json new file mode 100644 index 0000000..a21f4d7 --- /dev/null +++ b/Packages/packages-lock.json @@ -0,0 +1,382 @@ +{ + "dependencies": { + "com.unity.collab-proxy": { + "version": "2.12.4", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.editorcoroutines": { + "version": "1.0.0", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.ext.nunit": { + "version": "1.0.6", + "depth": 2, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.feature.development": { + "version": "1.0.1", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.ide.visualstudio": "2.0.22", + "com.unity.ide.rider": "3.0.36", + "com.unity.ide.vscode": "1.2.5", + "com.unity.editorcoroutines": "1.0.0", + "com.unity.performance.profile-analyzer": "1.2.3", + "com.unity.test-framework": "1.1.33", + "com.unity.testtools.codecoverage": "1.2.6" + } + }, + "com.unity.ide.rider": { + "version": "3.0.36", + "depth": 1, + "source": "registry", + "dependencies": { + "com.unity.ext.nunit": "1.0.6" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ide.visualstudio": { + "version": "2.0.22", + "depth": 1, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.1.9" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ide.vscode": { + "version": "1.2.5", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.performance.profile-analyzer": { + "version": "1.2.3", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.settings-manager": { + "version": "2.1.0", + "depth": 2, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.test-framework": { + "version": "1.1.33", + "depth": 1, + "source": "registry", + "dependencies": { + "com.unity.ext.nunit": "1.0.6", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.testtools.codecoverage": { + "version": "1.2.6", + "depth": 1, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.0.16", + "com.unity.settings-manager": "1.0.1" + }, + "url": "https://packages.unity.com" + }, + "com.unity.textmeshpro": { + "version": "3.0.7", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ugui": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.timeline": { + "version": "1.7.7", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.director": "1.0.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.particlesystem": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ugui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0" + } + }, + "com.unity.visualscripting": { + "version": "1.9.4", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ugui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.modules.ai": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.androidjni": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.animation": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.assetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.audio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.cloth": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.director": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.animation": "1.0.0" + } + }, + "com.unity.modules.imageconversion": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.imgui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.jsonserialize": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.particlesystem": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics2d": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.screencapture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.subsystems": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.terrain": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.terrainphysics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.terrain": "1.0.0" + } + }, + "com.unity.modules.tilemap": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics2d": "1.0.0" + } + }, + "com.unity.modules.ui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.uielements": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.umbra": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unityanalytics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.unitywebrequest": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unitywebrequestassetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestaudio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.audio": "1.0.0" + } + }, + "com.unity.modules.unitywebrequesttexture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestwww": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.vehicles": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.video": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.vr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } + }, + "com.unity.modules.wind": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.xr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.subsystems": "1.0.0" + } + } + } +} diff --git a/ProjectSettings/AudioManager.asset b/ProjectSettings/AudioManager.asset new file mode 100644 index 0000000..07ebfb0 --- /dev/null +++ b/ProjectSettings/AudioManager.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!11 &1 +AudioManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Volume: 1 + Rolloff Scale: 1 + Doppler Factor: 1 + Default Speaker Mode: 2 + m_SampleRate: 0 + m_DSPBufferSize: 1024 + m_VirtualVoiceCount: 512 + m_RealVoiceCount: 32 + m_SpatializerPlugin: + m_AmbisonicDecoderPlugin: + m_DisableAudio: 0 + m_VirtualizeEffects: 1 + m_RequestedDSPBufferSize: 1024 diff --git a/ProjectSettings/ClusterInputManager.asset b/ProjectSettings/ClusterInputManager.asset new file mode 100644 index 0000000..e7886b2 --- /dev/null +++ b/ProjectSettings/ClusterInputManager.asset @@ -0,0 +1,6 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!236 &1 +ClusterInputManager: + m_ObjectHideFlags: 0 + m_Inputs: [] diff --git a/ProjectSettings/DynamicsManager.asset b/ProjectSettings/DynamicsManager.asset new file mode 100644 index 0000000..cdc1f3e --- /dev/null +++ b/ProjectSettings/DynamicsManager.asset @@ -0,0 +1,34 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!55 &1 +PhysicsManager: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_Gravity: {x: 0, y: -9.81, z: 0} + m_DefaultMaterial: {fileID: 0} + m_BounceThreshold: 2 + m_SleepThreshold: 0.005 + m_DefaultContactOffset: 0.01 + m_DefaultSolverIterations: 6 + m_DefaultSolverVelocityIterations: 1 + m_QueriesHitBackfaces: 0 + m_QueriesHitTriggers: 1 + m_EnableAdaptiveForce: 0 + m_ClothInterCollisionDistance: 0 + m_ClothInterCollisionStiffness: 0 + m_ContactsGeneration: 1 + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + m_AutoSimulation: 1 + m_AutoSyncTransforms: 0 + m_ReuseCollisionCallbacks: 1 + m_ClothInterCollisionSettingsToggle: 0 + m_ContactPairsMode: 0 + m_BroadphaseType: 0 + m_WorldBounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 250, y: 250, z: 250} + m_WorldSubdivisions: 8 + m_FrictionType: 0 + m_EnableEnhancedDeterminism: 0 + m_EnableUnifiedHeightmaps: 1 + m_DefaultMaxAngluarSpeed: 7 diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset new file mode 100644 index 0000000..0147887 --- /dev/null +++ b/ProjectSettings/EditorBuildSettings.asset @@ -0,0 +1,8 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1045 &1 +EditorBuildSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Scenes: [] + m_configObjects: {} diff --git a/ProjectSettings/EditorSettings.asset b/ProjectSettings/EditorSettings.asset new file mode 100644 index 0000000..1e44a0a --- /dev/null +++ b/ProjectSettings/EditorSettings.asset @@ -0,0 +1,30 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!159 &1 +EditorSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_ExternalVersionControlSupport: Visible Meta Files + m_SerializationMode: 2 + m_LineEndingsForNewScripts: 0 + m_DefaultBehaviorMode: 0 + m_PrefabRegularEnvironment: {fileID: 0} + m_PrefabUIEnvironment: {fileID: 0} + m_SpritePackerMode: 0 + m_SpritePackerPaddingPower: 1 + m_EtcTextureCompressorBehavior: 1 + m_EtcTextureFastCompressor: 1 + m_EtcTextureNormalCompressor: 2 + m_EtcTextureBestCompressor: 4 + m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref + m_ProjectGenerationRootNamespace: + m_CollabEditorSettings: + inProgressEnabled: 1 + m_EnableTextureStreamingInEditMode: 1 + m_EnableTextureStreamingInPlayMode: 1 + m_AsyncShaderCompilation: 1 + m_EnterPlayModeOptionsEnabled: 0 + m_EnterPlayModeOptions: 3 + m_ShowLightmapResolutionOverlay: 1 + m_UseLegacyProbeSampleCount: 0 + m_SerializeInlineMappingsOnOneLine: 1 diff --git a/ProjectSettings/GraphicsSettings.asset b/ProjectSettings/GraphicsSettings.asset new file mode 100644 index 0000000..43369e3 --- /dev/null +++ b/ProjectSettings/GraphicsSettings.asset @@ -0,0 +1,63 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!30 &1 +GraphicsSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_Deferred: + m_Mode: 1 + m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} + m_DeferredReflections: + m_Mode: 1 + m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} + m_ScreenSpaceShadows: + m_Mode: 1 + m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} + m_LegacyDeferred: + m_Mode: 1 + m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} + m_DepthNormals: + m_Mode: 1 + m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} + m_MotionVectors: + m_Mode: 1 + m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} + m_LightHalo: + m_Mode: 1 + m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} + m_LensFlare: + m_Mode: 1 + m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} + m_AlwaysIncludedShaders: + - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} + m_PreloadedShaders: [] + m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, + type: 0} + m_CustomRenderPipeline: {fileID: 0} + m_TransparencySortMode: 0 + m_TransparencySortAxis: {x: 0, y: 0, z: 1} + m_DefaultRenderingPath: 1 + m_DefaultMobileRenderingPath: 1 + m_TierSettings: [] + m_LightmapStripping: 0 + m_FogStripping: 0 + m_InstancingStripping: 0 + m_LightmapKeepPlain: 1 + m_LightmapKeepDirCombined: 1 + m_LightmapKeepDynamicPlain: 1 + m_LightmapKeepDynamicDirCombined: 1 + m_LightmapKeepShadowMask: 1 + m_LightmapKeepSubtractive: 1 + m_FogKeepLinear: 1 + m_FogKeepExp: 1 + m_FogKeepExp2: 1 + m_AlbedoSwatchInfos: [] + m_LightsUseLinearIntensity: 0 + m_LightsUseColorTemperature: 0 + m_LogWhenShaderIsCompiled: 0 + m_AllowEnlightenSupportForUpgradedProject: 0 diff --git a/ProjectSettings/InputManager.asset b/ProjectSettings/InputManager.asset new file mode 100644 index 0000000..17c8f53 --- /dev/null +++ b/ProjectSettings/InputManager.asset @@ -0,0 +1,295 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!13 &1 +InputManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Axes: + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: left + positiveButton: right + altNegativeButton: a + altPositiveButton: d + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: down + positiveButton: up + altNegativeButton: s + altPositiveButton: w + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left ctrl + altNegativeButton: + altPositiveButton: mouse 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left alt + altNegativeButton: + altPositiveButton: mouse 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left shift + altNegativeButton: + altPositiveButton: mouse 2 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: space + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse X + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse Y + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse ScrollWheel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 2 + joyNum: 0 + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 0 + type: 2 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 1 + type: 2 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 0 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 1 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 2 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 3 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: return + altNegativeButton: + altPositiveButton: joystick button 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: enter + altNegativeButton: + altPositiveButton: space + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Cancel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: escape + altNegativeButton: + altPositiveButton: joystick button 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 diff --git a/ProjectSettings/MemorySettings.asset b/ProjectSettings/MemorySettings.asset new file mode 100644 index 0000000..5b5face --- /dev/null +++ b/ProjectSettings/MemorySettings.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!387306366 &1 +MemorySettings: + m_ObjectHideFlags: 0 + m_EditorMemorySettings: + m_MainAllocatorBlockSize: -1 + m_ThreadAllocatorBlockSize: -1 + m_MainGfxBlockSize: -1 + m_ThreadGfxBlockSize: -1 + m_CacheBlockSize: -1 + m_TypetreeBlockSize: -1 + m_ProfilerBlockSize: -1 + m_ProfilerEditorBlockSize: -1 + m_BucketAllocatorGranularity: -1 + m_BucketAllocatorBucketsCount: -1 + m_BucketAllocatorBlockSize: -1 + m_BucketAllocatorBlockCount: -1 + m_ProfilerBucketAllocatorGranularity: -1 + m_ProfilerBucketAllocatorBucketsCount: -1 + m_ProfilerBucketAllocatorBlockSize: -1 + m_ProfilerBucketAllocatorBlockCount: -1 + m_TempAllocatorSizeMain: -1 + m_JobTempAllocatorBlockSize: -1 + m_BackgroundJobTempAllocatorBlockSize: -1 + m_JobTempAllocatorReducedBlockSize: -1 + m_TempAllocatorSizeGIBakingWorker: -1 + m_TempAllocatorSizeNavMeshWorker: -1 + m_TempAllocatorSizeAudioWorker: -1 + m_TempAllocatorSizeCloudWorker: -1 + m_TempAllocatorSizeGfx: -1 + m_TempAllocatorSizeJobWorker: -1 + m_TempAllocatorSizeBackgroundWorker: -1 + m_TempAllocatorSizePreloadManager: -1 + m_PlatformMemorySettings: {} diff --git a/ProjectSettings/NavMeshAreas.asset b/ProjectSettings/NavMeshAreas.asset new file mode 100644 index 0000000..3b0b7c3 --- /dev/null +++ b/ProjectSettings/NavMeshAreas.asset @@ -0,0 +1,91 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!126 &1 +NavMeshProjectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + areas: + - name: Walkable + cost: 1 + - name: Not Walkable + cost: 1 + - name: Jump + cost: 2 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + m_LastAgentTypeID: -887442657 + m_Settings: + - serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.75 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_SettingNames: + - Humanoid diff --git a/ProjectSettings/PackageManagerSettings.asset b/ProjectSettings/PackageManagerSettings.asset new file mode 100644 index 0000000..112a053 --- /dev/null +++ b/ProjectSettings/PackageManagerSettings.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 61 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_EnablePreReleasePackages: 0 + m_EnablePackageDependencies: 0 + m_AdvancedSettingsExpanded: 1 + m_ScopedRegistriesSettingsExpanded: 1 + m_SeeAllPackageVersions: 0 + oneTimeWarningShown: 0 + m_Registries: + - m_Id: main + m_Name: + m_Url: https://packages.unity.com + m_Scopes: [] + m_IsDefault: 1 + m_Capabilities: 7 + m_UserSelectedRegistryName: + m_UserAddingNewScopedRegistry: 0 + m_RegistryInfoDraft: + m_Modified: 0 + m_ErrorMessage: + m_UserModificationsInstanceId: -830 + m_OriginalInstanceId: -832 + m_LoadAssets: 0 diff --git a/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json b/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json new file mode 100644 index 0000000..3c7b4c1 --- /dev/null +++ b/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json @@ -0,0 +1,5 @@ +{ + "m_Dictionary": { + "m_DictionaryValues": [] + } +} \ No newline at end of file diff --git a/ProjectSettings/Physics2DSettings.asset b/ProjectSettings/Physics2DSettings.asset new file mode 100644 index 0000000..47880b1 --- /dev/null +++ b/ProjectSettings/Physics2DSettings.asset @@ -0,0 +1,56 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!19 &1 +Physics2DSettings: + m_ObjectHideFlags: 0 + serializedVersion: 4 + m_Gravity: {x: 0, y: -9.81} + m_DefaultMaterial: {fileID: 0} + m_VelocityIterations: 8 + m_PositionIterations: 3 + m_VelocityThreshold: 1 + m_MaxLinearCorrection: 0.2 + m_MaxAngularCorrection: 8 + m_MaxTranslationSpeed: 100 + m_MaxRotationSpeed: 360 + m_BaumgarteScale: 0.2 + m_BaumgarteTimeOfImpactScale: 0.75 + m_TimeToSleep: 0.5 + m_LinearSleepTolerance: 0.01 + m_AngularSleepTolerance: 2 + m_DefaultContactOffset: 0.01 + m_JobOptions: + serializedVersion: 2 + useMultithreading: 0 + useConsistencySorting: 0 + m_InterpolationPosesPerJob: 100 + m_NewContactsPerJob: 30 + m_CollideContactsPerJob: 100 + m_ClearFlagsPerJob: 200 + m_ClearBodyForcesPerJob: 200 + m_SyncDiscreteFixturesPerJob: 50 + m_SyncContinuousFixturesPerJob: 50 + m_FindNearestContactsPerJob: 100 + m_UpdateTriggerContactsPerJob: 100 + m_IslandSolverCostThreshold: 100 + m_IslandSolverBodyCostScale: 1 + m_IslandSolverContactCostScale: 10 + m_IslandSolverJointCostScale: 10 + m_IslandSolverBodiesPerJob: 50 + m_IslandSolverContactsPerJob: 50 + m_AutoSimulation: 1 + m_QueriesHitTriggers: 1 + m_QueriesStartInColliders: 1 + m_CallbacksOnDisable: 1 + m_ReuseCollisionCallbacks: 1 + m_AutoSyncTransforms: 0 + m_AlwaysShowColliders: 0 + m_ShowColliderSleep: 1 + m_ShowColliderContacts: 0 + m_ShowColliderAABB: 0 + m_ContactArrowScale: 0.2 + m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} + m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} + m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} + m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff diff --git a/ProjectSettings/PresetManager.asset b/ProjectSettings/PresetManager.asset new file mode 100644 index 0000000..67a94da --- /dev/null +++ b/ProjectSettings/PresetManager.asset @@ -0,0 +1,7 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1386491679 &1 +PresetManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_DefaultPresets: {} diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset new file mode 100644 index 0000000..f62ba19 --- /dev/null +++ b/ProjectSettings/ProjectSettings.asset @@ -0,0 +1,961 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!129 &1 +PlayerSettings: + m_ObjectHideFlags: 0 + serializedVersion: 26 + productGUID: 997ce519780e997449656ee2be070b21 + AndroidProfiler: 0 + AndroidFilterTouchesWhenObscured: 0 + AndroidEnableSustainedPerformanceMode: 0 + defaultScreenOrientation: 4 + targetDevice: 2 + useOnDemandResources: 0 + accelerometerFrequency: 60 + companyName: DefaultCompany + productName: empty_PRO + defaultCursor: {fileID: 0} + cursorHotspot: {x: 0, y: 0} + m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} + m_ShowUnitySplashScreen: 1 + m_ShowUnitySplashLogo: 1 + m_SplashScreenOverlayOpacity: 1 + m_SplashScreenAnimation: 1 + m_SplashScreenLogoStyle: 1 + m_SplashScreenDrawMode: 0 + m_SplashScreenBackgroundAnimationZoom: 1 + m_SplashScreenLogoAnimationZoom: 1 + m_SplashScreenBackgroundLandscapeAspect: 1 + m_SplashScreenBackgroundPortraitAspect: 1 + m_SplashScreenBackgroundLandscapeUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenBackgroundPortraitUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenLogos: [] + m_VirtualRealitySplashScreen: {fileID: 0} + m_HolographicTrackingLossScreen: {fileID: 0} + defaultScreenWidth: 1920 + defaultScreenHeight: 1080 + defaultScreenWidthWeb: 960 + defaultScreenHeightWeb: 600 + m_StereoRenderingPath: 0 + m_ActiveColorSpace: 1 + unsupportedMSAAFallback: 0 + m_SpriteBatchVertexThreshold: 300 + m_MTRendering: 1 + mipStripping: 0 + numberOfMipsStripped: 0 + numberOfMipsStrippedPerMipmapLimitGroup: {} + m_StackTraceTypes: 010000000100000001000000010000000100000001000000 + iosShowActivityIndicatorOnLoading: -1 + androidShowActivityIndicatorOnLoading: -1 + iosUseCustomAppBackgroundBehavior: 0 + allowedAutorotateToPortrait: 1 + allowedAutorotateToPortraitUpsideDown: 1 + allowedAutorotateToLandscapeRight: 1 + allowedAutorotateToLandscapeLeft: 1 + useOSAutorotation: 1 + use32BitDisplayBuffer: 1 + preserveFramebufferAlpha: 0 + disableDepthAndStencilBuffers: 0 + androidStartInFullscreen: 1 + androidRenderOutsideSafeArea: 1 + androidUseSwappy: 1 + androidBlitType: 0 + androidResizableWindow: 0 + androidDefaultWindowWidth: 1920 + androidDefaultWindowHeight: 1080 + androidMinimumWindowWidth: 400 + androidMinimumWindowHeight: 300 + androidFullscreenMode: 1 + androidAutoRotationBehavior: 1 + androidPredictiveBackSupport: 1 + defaultIsNativeResolution: 1 + macRetinaSupport: 1 + runInBackground: 1 + captureSingleScreen: 0 + muteOtherAudioSources: 0 + Prepare IOS For Recording: 0 + Force IOS Speakers When Recording: 0 + audioSpatialExperience: 0 + deferSystemGesturesMode: 0 + hideHomeButton: 0 + submitAnalytics: 1 + usePlayerLog: 1 + dedicatedServerOptimizations: 0 + bakeCollisionMeshes: 0 + forceSingleInstance: 0 + useFlipModelSwapchain: 1 + resizableWindow: 0 + useMacAppStoreValidation: 0 + macAppStoreCategory: public.app-category.games + gpuSkinning: 1 + xboxPIXTextureCapture: 0 + xboxEnableAvatar: 0 + xboxEnableKinect: 0 + xboxEnableKinectAutoTracking: 0 + xboxEnableFitness: 0 + visibleInBackground: 1 + allowFullscreenSwitch: 1 + fullscreenMode: 1 + xboxSpeechDB: 0 + xboxEnableHeadOrientation: 0 + xboxEnableGuest: 0 + xboxEnablePIXSampling: 0 + metalFramebufferOnly: 0 + xboxOneResolution: 0 + xboxOneSResolution: 0 + xboxOneXResolution: 3 + xboxOneMonoLoggingLevel: 0 + xboxOneLoggingLevel: 1 + xboxOneDisableEsram: 0 + xboxOneEnableTypeOptimization: 0 + xboxOnePresentImmediateThreshold: 0 + switchQueueCommandMemory: 0 + switchQueueControlMemory: 16384 + switchQueueComputeMemory: 262144 + switchNVNShaderPoolsGranularity: 33554432 + switchNVNDefaultPoolsGranularity: 16777216 + switchNVNOtherPoolsGranularity: 16777216 + switchGpuScratchPoolGranularity: 2097152 + switchAllowGpuScratchShrinking: 0 + switchNVNMaxPublicTextureIDCount: 0 + switchNVNMaxPublicSamplerIDCount: 0 + switchNVNGraphicsFirmwareMemory: 32 + switchMaxWorkerMultiple: 8 + stadiaPresentMode: 0 + stadiaTargetFramerate: 0 + vulkanNumSwapchainBuffers: 3 + vulkanEnableSetSRGBWrite: 0 + vulkanEnablePreTransform: 1 + vulkanEnableLateAcquireNextImage: 0 + vulkanEnableCommandBufferRecycling: 1 + loadStoreDebugModeEnabled: 0 + visionOSBundleVersion: 1.0 + tvOSBundleVersion: 1.0 + bundleVersion: 0.1 + preloadedAssets: [] + metroInputSource: 0 + wsaTransparentSwapchain: 0 + m_HolographicPauseOnTrackingLoss: 1 + xboxOneDisableKinectGpuReservation: 1 + xboxOneEnable7thCore: 1 + vrSettings: + enable360StereoCapture: 0 + isWsaHolographicRemotingEnabled: 0 + enableFrameTimingStats: 0 + enableOpenGLProfilerGPURecorders: 1 + allowHDRDisplaySupport: 0 + useHDRDisplay: 0 + hdrBitDepth: 0 + m_ColorGamuts: 00000000 + targetPixelDensity: 30 + resolutionScalingMode: 0 + resetResolutionOnWindowResize: 0 + androidSupportedAspectRatio: 1 + androidMaxAspectRatio: 2.1 + applicationIdentifier: {} + buildNumber: + Standalone: 0 + VisionOS: 0 + iPhone: 0 + tvOS: 0 + overrideDefaultApplicationIdentifier: 0 + AndroidBundleVersionCode: 1 + AndroidMinSdkVersion: 22 + AndroidTargetSdkVersion: 0 + AndroidPreferredInstallLocation: 1 + aotOptions: + stripEngineCode: 1 + iPhoneStrippingLevel: 0 + iPhoneScriptCallOptimization: 0 + ForceInternetPermission: 0 + ForceSDCardPermission: 0 + CreateWallpaper: 0 + APKExpansionFiles: 0 + keepLoadedShadersAlive: 0 + StripUnusedMeshComponents: 1 + strictShaderVariantMatching: 0 + VertexChannelCompressionMask: 4054 + iPhoneSdkVersion: 988 + iOSSimulatorArchitecture: 0 + iOSTargetOSVersionString: 12.0 + tvOSSdkVersion: 0 + tvOSSimulatorArchitecture: 0 + tvOSRequireExtendedGameController: 0 + tvOSTargetOSVersionString: 12.0 + VisionOSSdkVersion: 0 + VisionOSTargetOSVersionString: 1.0 + uIPrerenderedIcon: 0 + uIRequiresPersistentWiFi: 0 + uIRequiresFullScreen: 1 + uIStatusBarHidden: 1 + uIExitOnSuspend: 0 + uIStatusBarStyle: 0 + appleTVSplashScreen: {fileID: 0} + appleTVSplashScreen2x: {fileID: 0} + tvOSSmallIconLayers: [] + tvOSSmallIconLayers2x: [] + tvOSLargeIconLayers: [] + tvOSLargeIconLayers2x: [] + tvOSTopShelfImageLayers: [] + tvOSTopShelfImageLayers2x: [] + tvOSTopShelfImageWideLayers: [] + tvOSTopShelfImageWideLayers2x: [] + iOSLaunchScreenType: 0 + iOSLaunchScreenPortrait: {fileID: 0} + iOSLaunchScreenLandscape: {fileID: 0} + iOSLaunchScreenBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreenFillPct: 100 + iOSLaunchScreenSize: 100 + iOSLaunchScreenCustomXibPath: + iOSLaunchScreeniPadType: 0 + iOSLaunchScreeniPadImage: {fileID: 0} + iOSLaunchScreeniPadBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreeniPadFillPct: 100 + iOSLaunchScreeniPadSize: 100 + iOSLaunchScreeniPadCustomXibPath: + iOSLaunchScreenCustomStoryboardPath: + iOSLaunchScreeniPadCustomStoryboardPath: + iOSDeviceRequirements: [] + iOSURLSchemes: [] + macOSURLSchemes: [] + iOSBackgroundModes: 0 + iOSMetalForceHardShadows: 0 + metalEditorSupport: 1 + metalAPIValidation: 1 + metalCompileShaderBinary: 0 + iOSRenderExtraFrameOnPause: 0 + iosCopyPluginsCodeInsteadOfSymlink: 0 + appleDeveloperTeamID: + iOSManualSigningProvisioningProfileID: + tvOSManualSigningProvisioningProfileID: + VisionOSManualSigningProvisioningProfileID: + iOSManualSigningProvisioningProfileType: 0 + tvOSManualSigningProvisioningProfileType: 0 + VisionOSManualSigningProvisioningProfileType: 0 + appleEnableAutomaticSigning: 0 + iOSRequireARKit: 0 + iOSAutomaticallyDetectAndAddCapabilities: 1 + appleEnableProMotion: 0 + shaderPrecisionModel: 0 + clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea + templatePackageId: com.unity.template.3d@8.1.3 + templateDefaultScene: Assets/Scenes/SampleScene.unity + useCustomMainManifest: 0 + useCustomLauncherManifest: 0 + useCustomMainGradleTemplate: 0 + useCustomLauncherGradleManifest: 0 + useCustomBaseGradleTemplate: 0 + useCustomGradlePropertiesTemplate: 0 + useCustomGradleSettingsTemplate: 0 + useCustomProguardFile: 0 + AndroidTargetArchitectures: 1 + AndroidTargetDevices: 0 + AndroidSplashScreenScale: 0 + androidSplashScreen: {fileID: 0} + AndroidKeystoreName: + AndroidKeyaliasName: + AndroidEnableArmv9SecurityFeatures: 0 + AndroidBuildApkPerCpuArchitecture: 0 + AndroidTVCompatibility: 0 + AndroidIsGame: 1 + AndroidEnableTango: 0 + androidEnableBanner: 1 + androidUseLowAccuracyLocation: 0 + androidUseCustomKeystore: 0 + m_AndroidBanners: + - width: 320 + height: 180 + banner: {fileID: 0} + androidGamepadSupportLevel: 0 + chromeosInputEmulation: 1 + AndroidMinifyRelease: 0 + AndroidMinifyDebug: 0 + AndroidValidateAppBundleSize: 1 + AndroidAppBundleSizeToValidate: 150 + m_BuildTargetIcons: [] + m_BuildTargetPlatformIcons: + - m_BuildTarget: iPhone + m_Icons: + - m_Textures: [] + m_Width: 180 + m_Height: 180 + m_Kind: 0 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 120 + m_Height: 120 + m_Kind: 0 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 167 + m_Height: 167 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 152 + m_Height: 152 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 76 + m_Height: 76 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 120 + m_Height: 120 + m_Kind: 3 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 80 + m_Height: 80 + m_Kind: 3 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 80 + m_Height: 80 + m_Kind: 3 + m_SubKind: iPad + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 3 + m_SubKind: iPad + - m_Textures: [] + m_Width: 87 + m_Height: 87 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 58 + m_Height: 58 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 29 + m_Height: 29 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 58 + m_Height: 58 + m_Kind: 1 + m_SubKind: iPad + - m_Textures: [] + m_Width: 29 + m_Height: 29 + m_Kind: 1 + m_SubKind: iPad + - m_Textures: [] + m_Width: 60 + m_Height: 60 + m_Kind: 2 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 2 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 2 + m_SubKind: iPad + - m_Textures: [] + m_Width: 20 + m_Height: 20 + m_Kind: 2 + m_SubKind: iPad + - m_Textures: [] + m_Width: 1024 + m_Height: 1024 + m_Kind: 4 + m_SubKind: App Store + - m_BuildTarget: Android + m_Icons: + - m_Textures: [] + m_Width: 432 + m_Height: 432 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 324 + m_Height: 324 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 216 + m_Height: 216 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 162 + m_Height: 162 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 108 + m_Height: 108 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 81 + m_Height: 81 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 192 + m_Height: 192 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 144 + m_Height: 144 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 96 + m_Height: 96 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 72 + m_Height: 72 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 48 + m_Height: 48 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 36 + m_Height: 36 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 192 + m_Height: 192 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 144 + m_Height: 144 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 96 + m_Height: 96 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 72 + m_Height: 72 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 48 + m_Height: 48 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 36 + m_Height: 36 + m_Kind: 0 + m_SubKind: + m_BuildTargetBatching: + - m_BuildTarget: Standalone + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: tvOS + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: Android + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: iPhone + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: WebGL + m_StaticBatching: 0 + m_DynamicBatching: 0 + m_BuildTargetShaderSettings: [] + m_BuildTargetGraphicsJobs: + - m_BuildTarget: MacStandaloneSupport + m_GraphicsJobs: 0 + - m_BuildTarget: Switch + m_GraphicsJobs: 1 + - m_BuildTarget: MetroSupport + m_GraphicsJobs: 1 + - m_BuildTarget: AppleTVSupport + m_GraphicsJobs: 0 + - m_BuildTarget: BJMSupport + m_GraphicsJobs: 1 + - m_BuildTarget: LinuxStandaloneSupport + m_GraphicsJobs: 1 + - m_BuildTarget: PS4Player + m_GraphicsJobs: 1 + - m_BuildTarget: iOSSupport + m_GraphicsJobs: 0 + - m_BuildTarget: WindowsStandaloneSupport + m_GraphicsJobs: 1 + - m_BuildTarget: XboxOnePlayer + m_GraphicsJobs: 1 + - m_BuildTarget: LuminSupport + m_GraphicsJobs: 0 + - m_BuildTarget: AndroidPlayer + m_GraphicsJobs: 0 + - m_BuildTarget: WebGLSupport + m_GraphicsJobs: 0 + m_BuildTargetGraphicsJobMode: + - m_BuildTarget: PS4Player + m_GraphicsJobMode: 0 + - m_BuildTarget: XboxOnePlayer + m_GraphicsJobMode: 0 + m_BuildTargetGraphicsAPIs: + - m_BuildTarget: AndroidPlayer + m_APIs: 150000000b000000 + m_Automatic: 1 + - m_BuildTarget: iOSSupport + m_APIs: 10000000 + m_Automatic: 1 + - m_BuildTarget: AppleTVSupport + m_APIs: 10000000 + m_Automatic: 1 + - m_BuildTarget: WebGLSupport + m_APIs: 0b000000 + m_Automatic: 1 + m_BuildTargetVRSettings: + - m_BuildTarget: Standalone + m_Enabled: 0 + m_Devices: + - Oculus + - OpenVR + m_DefaultShaderChunkSizeInMB: 16 + m_DefaultShaderChunkCount: 0 + openGLRequireES31: 0 + openGLRequireES31AEP: 0 + openGLRequireES32: 0 + m_TemplateCustomTags: {} + mobileMTRendering: + Android: 1 + iPhone: 1 + tvOS: 1 + m_BuildTargetGroupLightmapEncodingQuality: + - m_BuildTarget: Android + m_EncodingQuality: 1 + - m_BuildTarget: iPhone + m_EncodingQuality: 1 + - m_BuildTarget: tvOS + m_EncodingQuality: 1 + m_BuildTargetGroupHDRCubemapEncodingQuality: + - m_BuildTarget: Android + m_EncodingQuality: 1 + - m_BuildTarget: iPhone + m_EncodingQuality: 1 + - m_BuildTarget: tvOS + m_EncodingQuality: 1 + m_BuildTargetGroupLightmapSettings: [] + m_BuildTargetGroupLoadStoreDebugModeSettings: [] + m_BuildTargetNormalMapEncoding: + - m_BuildTarget: Android + m_Encoding: 1 + - m_BuildTarget: iPhone + m_Encoding: 1 + - m_BuildTarget: tvOS + m_Encoding: 1 + m_BuildTargetDefaultTextureCompressionFormat: + - m_BuildTarget: Android + m_Format: 3 + playModeTestRunnerEnabled: 0 + runPlayModeTestAsEditModeTest: 0 + actionOnDotNetUnhandledException: 1 + enableInternalProfiler: 0 + logObjCUncaughtExceptions: 1 + enableCrashReportAPI: 0 + cameraUsageDescription: + locationUsageDescription: + microphoneUsageDescription: + bluetoothUsageDescription: + macOSTargetOSVersion: 10.13.0 + switchNMETAOverride: + switchNetLibKey: + switchSocketMemoryPoolSize: 6144 + switchSocketAllocatorPoolSize: 128 + switchSocketConcurrencyLimit: 14 + switchScreenResolutionBehavior: 2 + switchUseCPUProfiler: 0 + switchEnableFileSystemTrace: 0 + switchLTOSetting: 0 + switchApplicationID: 0x01004b9000490000 + switchNSODependencies: + switchCompilerFlags: + switchTitleNames_0: + switchTitleNames_1: + switchTitleNames_2: + switchTitleNames_3: + switchTitleNames_4: + switchTitleNames_5: + switchTitleNames_6: + switchTitleNames_7: + switchTitleNames_8: + switchTitleNames_9: + switchTitleNames_10: + switchTitleNames_11: + switchTitleNames_12: + switchTitleNames_13: + switchTitleNames_14: + switchTitleNames_15: + switchPublisherNames_0: + switchPublisherNames_1: + switchPublisherNames_2: + switchPublisherNames_3: + switchPublisherNames_4: + switchPublisherNames_5: + switchPublisherNames_6: + switchPublisherNames_7: + switchPublisherNames_8: + switchPublisherNames_9: + switchPublisherNames_10: + switchPublisherNames_11: + switchPublisherNames_12: + switchPublisherNames_13: + switchPublisherNames_14: + switchPublisherNames_15: + switchIcons_0: {fileID: 0} + switchIcons_1: {fileID: 0} + switchIcons_2: {fileID: 0} + switchIcons_3: {fileID: 0} + switchIcons_4: {fileID: 0} + switchIcons_5: {fileID: 0} + switchIcons_6: {fileID: 0} + switchIcons_7: {fileID: 0} + switchIcons_8: {fileID: 0} + switchIcons_9: {fileID: 0} + switchIcons_10: {fileID: 0} + switchIcons_11: {fileID: 0} + switchIcons_12: {fileID: 0} + switchIcons_13: {fileID: 0} + switchIcons_14: {fileID: 0} + switchIcons_15: {fileID: 0} + switchSmallIcons_0: {fileID: 0} + switchSmallIcons_1: {fileID: 0} + switchSmallIcons_2: {fileID: 0} + switchSmallIcons_3: {fileID: 0} + switchSmallIcons_4: {fileID: 0} + switchSmallIcons_5: {fileID: 0} + switchSmallIcons_6: {fileID: 0} + switchSmallIcons_7: {fileID: 0} + switchSmallIcons_8: {fileID: 0} + switchSmallIcons_9: {fileID: 0} + switchSmallIcons_10: {fileID: 0} + switchSmallIcons_11: {fileID: 0} + switchSmallIcons_12: {fileID: 0} + switchSmallIcons_13: {fileID: 0} + switchSmallIcons_14: {fileID: 0} + switchSmallIcons_15: {fileID: 0} + switchManualHTML: + switchAccessibleURLs: + switchLegalInformation: + switchMainThreadStackSize: 1048576 + switchPresenceGroupId: + switchLogoHandling: 0 + switchReleaseVersion: 0 + switchDisplayVersion: 1.0.0 + switchStartupUserAccount: 0 + switchSupportedLanguagesMask: 0 + switchLogoType: 0 + switchApplicationErrorCodeCategory: + switchUserAccountSaveDataSize: 0 + switchUserAccountSaveDataJournalSize: 0 + switchApplicationAttribute: 0 + switchCardSpecSize: -1 + switchCardSpecClock: -1 + switchRatingsMask: 0 + switchRatingsInt_0: 0 + switchRatingsInt_1: 0 + switchRatingsInt_2: 0 + switchRatingsInt_3: 0 + switchRatingsInt_4: 0 + switchRatingsInt_5: 0 + switchRatingsInt_6: 0 + switchRatingsInt_7: 0 + switchRatingsInt_8: 0 + switchRatingsInt_9: 0 + switchRatingsInt_10: 0 + switchRatingsInt_11: 0 + switchRatingsInt_12: 0 + switchLocalCommunicationIds_0: + switchLocalCommunicationIds_1: + switchLocalCommunicationIds_2: + switchLocalCommunicationIds_3: + switchLocalCommunicationIds_4: + switchLocalCommunicationIds_5: + switchLocalCommunicationIds_6: + switchLocalCommunicationIds_7: + switchParentalControl: 0 + switchAllowsScreenshot: 1 + switchAllowsVideoCapturing: 1 + switchAllowsRuntimeAddOnContentInstall: 0 + switchDataLossConfirmation: 0 + switchUserAccountLockEnabled: 0 + switchSystemResourceMemory: 16777216 + switchSupportedNpadStyles: 22 + switchNativeFsCacheSize: 32 + switchIsHoldTypeHorizontal: 0 + switchSupportedNpadCount: 8 + switchEnableTouchScreen: 1 + switchSocketConfigEnabled: 0 + switchTcpInitialSendBufferSize: 32 + switchTcpInitialReceiveBufferSize: 64 + switchTcpAutoSendBufferSizeMax: 256 + switchTcpAutoReceiveBufferSizeMax: 256 + switchUdpSendBufferSize: 9 + switchUdpReceiveBufferSize: 42 + switchSocketBufferEfficiency: 4 + switchSocketInitializeEnabled: 1 + switchNetworkInterfaceManagerInitializeEnabled: 1 + switchDisableHTCSPlayerConnection: 0 + switchUseNewStyleFilepaths: 1 + switchUseLegacyFmodPriorities: 0 + switchUseMicroSleepForYield: 1 + switchEnableRamDiskSupport: 0 + switchMicroSleepForYieldTime: 25 + switchRamDiskSpaceSize: 12 + ps4NPAgeRating: 12 + ps4NPTitleSecret: + ps4NPTrophyPackPath: + ps4ParentalLevel: 11 + ps4ContentID: ED1633-NPXX51362_00-0000000000000000 + ps4Category: 0 + ps4MasterVersion: 01.00 + ps4AppVersion: 01.00 + ps4AppType: 0 + ps4ParamSfxPath: + ps4VideoOutPixelFormat: 0 + ps4VideoOutInitialWidth: 1920 + ps4VideoOutBaseModeInitialWidth: 1920 + ps4VideoOutReprojectionRate: 60 + ps4PronunciationXMLPath: + ps4PronunciationSIGPath: + ps4BackgroundImagePath: + ps4StartupImagePath: + ps4StartupImagesFolder: + ps4IconImagesFolder: + ps4SaveDataImagePath: + ps4SdkOverride: + ps4BGMPath: + ps4ShareFilePath: + ps4ShareOverlayImagePath: + ps4PrivacyGuardImagePath: + ps4ExtraSceSysFile: + ps4NPtitleDatPath: + ps4RemotePlayKeyAssignment: -1 + ps4RemotePlayKeyMappingDir: + ps4PlayTogetherPlayerCount: 0 + ps4EnterButtonAssignment: 1 + ps4ApplicationParam1: 0 + ps4ApplicationParam2: 0 + ps4ApplicationParam3: 0 + ps4ApplicationParam4: 0 + ps4DownloadDataSize: 0 + ps4GarlicHeapSize: 2048 + ps4ProGarlicHeapSize: 2560 + playerPrefsMaxSize: 32768 + ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ + ps4pnSessions: 1 + ps4pnPresence: 1 + ps4pnFriends: 1 + ps4pnGameCustomData: 1 + playerPrefsSupport: 0 + enableApplicationExit: 0 + resetTempFolder: 1 + restrictedAudioUsageRights: 0 + ps4UseResolutionFallback: 0 + ps4ReprojectionSupport: 0 + ps4UseAudio3dBackend: 0 + ps4UseLowGarlicFragmentationMode: 1 + ps4SocialScreenEnabled: 0 + ps4ScriptOptimizationLevel: 0 + ps4Audio3dVirtualSpeakerCount: 14 + ps4attribCpuUsage: 0 + ps4PatchPkgPath: + ps4PatchLatestPkgPath: + ps4PatchChangeinfoPath: + ps4PatchDayOne: 0 + ps4attribUserManagement: 0 + ps4attribMoveSupport: 0 + ps4attrib3DSupport: 0 + ps4attribShareSupport: 0 + ps4attribExclusiveVR: 0 + ps4disableAutoHideSplash: 0 + ps4videoRecordingFeaturesUsed: 0 + ps4contentSearchFeaturesUsed: 0 + ps4CompatibilityPS5: 0 + ps4AllowPS5Detection: 0 + ps4GPU800MHz: 1 + ps4attribEyeToEyeDistanceSettingVR: 0 + ps4IncludedModules: [] + ps4attribVROutputEnabled: 0 + monoEnv: + splashScreenBackgroundSourceLandscape: {fileID: 0} + splashScreenBackgroundSourcePortrait: {fileID: 0} + blurSplashScreenBackground: 1 + spritePackerPolicy: + webGLMemorySize: 16 + webGLExceptionSupport: 1 + webGLNameFilesAsHashes: 0 + webGLShowDiagnostics: 0 + webGLDataCaching: 1 + webGLDebugSymbols: 0 + webGLEmscriptenArgs: + webGLModulesDirectory: + webGLTemplate: APPLICATION:Default + webGLAnalyzeBuildSize: 0 + webGLUseEmbeddedResources: 0 + webGLCompressionFormat: 1 + webGLWasmArithmeticExceptions: 0 + webGLLinkerTarget: 1 + webGLThreadsSupport: 0 + webGLDecompressionFallback: 0 + webGLInitialMemorySize: 32 + webGLMaximumMemorySize: 2048 + webGLMemoryGrowthMode: 2 + webGLMemoryLinearGrowthStep: 16 + webGLMemoryGeometricGrowthStep: 0.2 + webGLMemoryGeometricGrowthCap: 96 + webGLPowerPreference: 2 + scriptingDefineSymbols: {} + additionalCompilerArguments: {} + platformArchitecture: {} + scriptingBackend: {} + il2cppCompilerConfiguration: {} + il2cppCodeGeneration: {} + managedStrippingLevel: + EmbeddedLinux: 1 + GameCoreScarlett: 1 + GameCoreXboxOne: 1 + Nintendo Switch: 1 + PS4: 1 + PS5: 1 + QNX: 1 + Stadia: 1 + VisionOS: 1 + WebGL: 1 + Windows Store Apps: 1 + XboxOne: 1 + iPhone: 1 + tvOS: 1 + incrementalIl2cppBuild: {} + suppressCommonWarnings: 1 + allowUnsafeCode: 0 + useDeterministicCompilation: 1 + additionalIl2CppArgs: + scriptingRuntimeVersion: 1 + gcIncremental: 1 + gcWBarrierValidation: 0 + apiCompatibilityLevelPerPlatform: {} + m_RenderingPath: 1 + m_MobileRenderingPath: 1 + metroPackageName: empty_PRO + metroPackageVersion: + metroCertificatePath: + metroCertificatePassword: + metroCertificateSubject: + metroCertificateIssuer: + metroCertificateNotAfter: 0000000000000000 + metroApplicationDescription: empty_PRO + wsaImages: {} + metroTileShortName: + metroTileShowName: 0 + metroMediumTileShowName: 0 + metroLargeTileShowName: 0 + metroWideTileShowName: 0 + metroSupportStreamingInstall: 0 + metroLastRequiredScene: 0 + metroDefaultTileSize: 1 + metroTileForegroundText: 2 + metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} + metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1} + metroSplashScreenUseBackgroundColor: 0 + syncCapabilities: 0 + platformCapabilities: {} + metroTargetDeviceFamilies: {} + metroFTAName: + metroFTAFileTypes: [] + metroProtocolName: + vcxProjDefaultLanguage: + XboxOneProductId: + XboxOneUpdateKey: + XboxOneSandboxId: + XboxOneContentId: + XboxOneTitleId: + XboxOneSCId: + XboxOneGameOsOverridePath: + XboxOnePackagingOverridePath: + XboxOneAppManifestOverridePath: + XboxOneVersion: 1.0.0.0 + XboxOnePackageEncryption: 0 + XboxOnePackageUpdateGranularity: 2 + XboxOneDescription: + XboxOneLanguage: + - enus + XboxOneCapability: [] + XboxOneGameRating: {} + XboxOneIsContentPackage: 0 + XboxOneEnhancedXboxCompatibilityMode: 0 + XboxOneEnableGPUVariability: 1 + XboxOneSockets: {} + XboxOneSplashScreen: {fileID: 0} + XboxOneAllowedProductIds: [] + XboxOnePersistentLocalStorageSize: 0 + XboxOneXTitleMemory: 8 + XboxOneOverrideIdentityName: + XboxOneOverrideIdentityPublisher: + vrEditorSettings: {} + cloudServicesEnabled: + UNet: 1 + luminIcon: + m_Name: + m_ModelFolderPath: + m_PortalFolderPath: + luminCert: + m_CertPath: + m_SignPackage: 1 + luminIsChannelApp: 0 + luminVersion: + m_VersionCode: 1 + m_VersionName: + hmiPlayerDataPath: + hmiForceSRGBBlit: 1 + embeddedLinuxEnableGamepadInput: 1 + hmiLogStartupTiming: 0 + hmiCpuConfiguration: + apiCompatibilityLevel: 6 + activeInputHandler: 0 + windowsGamepadBackendHint: 0 + cloudProjectId: 5dcabac7-4458-49b3-9e2f-777ea973ac05 + framebufferDepthMemorylessMode: 0 + qualitySettingsNames: [] + projectName: empty_PRO + organizationId: changyunjia + cloudEnabled: 0 + legacyClampBlendShapeWeights: 0 + hmiLoadingImage: {fileID: 0} + platformRequiresReadableAssets: 0 + virtualTexturingSupportEnabled: 0 + insecureHttpOption: 0 diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt new file mode 100644 index 0000000..b852362 --- /dev/null +++ b/ProjectSettings/ProjectVersion.txt @@ -0,0 +1,2 @@ +m_EditorVersion: 2022.3.62f2 +m_EditorVersionWithRevision: 2022.3.62f2 (7670c08855a9) diff --git a/ProjectSettings/QualitySettings.asset b/ProjectSettings/QualitySettings.asset new file mode 100644 index 0000000..36c0dad --- /dev/null +++ b/ProjectSettings/QualitySettings.asset @@ -0,0 +1,234 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!47 &1 +QualitySettings: + m_ObjectHideFlags: 0 + serializedVersion: 5 + m_CurrentQuality: 5 + m_QualitySettings: + - serializedVersion: 2 + name: Very Low + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 15 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 1 + textureQuality: 1 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: 0.3 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 4 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Low + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: 0.4 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 16 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Medium + pixelLightCount: 1 + shadows: 1 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 1 + lodBias: 0.7 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 64 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: High + pixelLightCount: 2 + shadows: 2 + shadowResolution: 1 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 40 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 256 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Very High + pixelLightCount: 3 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 70 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 4 + textureQuality: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1.5 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 1024 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Ultra + pixelLightCount: 4 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 4 + shadowDistance: 150 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 4 + textureQuality: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 2 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 4096 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + m_PerPlatformDefaultQuality: + Android: 2 + Lumin: 5 + GameCoreScarlett: 5 + GameCoreXboxOne: 5 + Nintendo 3DS: 5 + Nintendo Switch: 5 + PS4: 5 + PS5: 5 + Stadia: 5 + Standalone: 5 + WebGL: 3 + Windows Store Apps: 5 + XboxOne: 5 + iPhone: 2 + tvOS: 2 diff --git a/ProjectSettings/SceneTemplateSettings.json b/ProjectSettings/SceneTemplateSettings.json new file mode 100644 index 0000000..5e97f83 --- /dev/null +++ b/ProjectSettings/SceneTemplateSettings.json @@ -0,0 +1,121 @@ +{ + "templatePinStates": [], + "dependencyTypeInfos": [ + { + "userAdded": false, + "type": "UnityEngine.AnimationClip", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.Animations.AnimatorController", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.AnimatorOverrideController", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.Audio.AudioMixerController", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.ComputeShader", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.Cubemap", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.GameObject", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.LightingDataAsset", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.LightingSettings", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Material", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.MonoScript", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.PhysicMaterial", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.PhysicsMaterial2D", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.PostProcessing.PostProcessResources", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.VolumeProfile", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.SceneAsset", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.Shader", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.ShaderVariantCollection", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.Texture", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Texture2D", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Timeline.TimelineAsset", + "defaultInstantiationMode": 0 + } + ], + "defaultDependencyTypeInfo": { + "userAdded": false, + "type": "", + "defaultInstantiationMode": 1 + }, + "newSceneOverride": 0 +} \ No newline at end of file diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset new file mode 100644 index 0000000..1c92a78 --- /dev/null +++ b/ProjectSettings/TagManager.asset @@ -0,0 +1,43 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!78 &1 +TagManager: + serializedVersion: 2 + tags: [] + layers: + - Default + - TransparentFX + - Ignore Raycast + - + - Water + - UI + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + m_SortingLayers: + - name: Default + uniqueID: 0 + locked: 0 diff --git a/ProjectSettings/TimeManager.asset b/ProjectSettings/TimeManager.asset new file mode 100644 index 0000000..558a017 --- /dev/null +++ b/ProjectSettings/TimeManager.asset @@ -0,0 +1,9 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!5 &1 +TimeManager: + m_ObjectHideFlags: 0 + Fixed Timestep: 0.02 + Maximum Allowed Timestep: 0.33333334 + m_TimeScale: 1 + Maximum Particle Timestep: 0.03 diff --git a/ProjectSettings/UnityConnectSettings.asset b/ProjectSettings/UnityConnectSettings.asset new file mode 100644 index 0000000..a88bee0 --- /dev/null +++ b/ProjectSettings/UnityConnectSettings.asset @@ -0,0 +1,36 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!310 &1 +UnityConnectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 1 + m_Enabled: 0 + m_TestMode: 0 + m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events + m_EventUrl: https://cdp.cloud.unity3d.com/v1/events + m_ConfigUrl: https://config.uca.cloud.unity3d.com + m_DashboardUrl: https://dashboard.unity3d.com + m_TestInitMode: 0 + CrashReportingSettings: + m_EventUrl: https://perf-events.cloud.unity3d.com + m_Enabled: 0 + m_LogBufferSize: 10 + m_CaptureEditorExceptions: 1 + UnityPurchasingSettings: + m_Enabled: 0 + m_TestMode: 0 + UnityAnalyticsSettings: + m_Enabled: 0 + m_TestMode: 0 + m_InitializeOnStartup: 1 + m_PackageRequiringCoreStatsPresent: 0 + UnityAdsSettings: + m_Enabled: 0 + m_InitializeOnStartup: 1 + m_TestMode: 0 + m_IosGameId: + m_AndroidGameId: + m_GameIds: {} + m_GameId: + PerformanceReportingSettings: + m_Enabled: 0 diff --git a/ProjectSettings/VFXManager.asset b/ProjectSettings/VFXManager.asset new file mode 100644 index 0000000..3a95c98 --- /dev/null +++ b/ProjectSettings/VFXManager.asset @@ -0,0 +1,12 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!937362698 &1 +VFXManager: + m_ObjectHideFlags: 0 + m_IndirectShader: {fileID: 0} + m_CopyBufferShader: {fileID: 0} + m_SortShader: {fileID: 0} + m_StripUpdateShader: {fileID: 0} + m_RenderPipeSettingsPath: + m_FixedTimeStep: 0.016666668 + m_MaxDeltaTime: 0.05 diff --git a/ProjectSettings/VersionControlSettings.asset b/ProjectSettings/VersionControlSettings.asset new file mode 100644 index 0000000..dca2881 --- /dev/null +++ b/ProjectSettings/VersionControlSettings.asset @@ -0,0 +1,8 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!890905787 &1 +VersionControlSettings: + m_ObjectHideFlags: 0 + m_Mode: Visible Meta Files + m_CollabEditorSettings: + inProgressEnabled: 1 diff --git a/ProjectSettings/XRSettings.asset b/ProjectSettings/XRSettings.asset new file mode 100644 index 0000000..482590c --- /dev/null +++ b/ProjectSettings/XRSettings.asset @@ -0,0 +1,10 @@ +{ + "m_SettingKeys": [ + "VR Device Disabled", + "VR Device User Alert" + ], + "m_SettingValues": [ + "False", + "False" + ] +} \ No newline at end of file diff --git a/UserSettings/EditorUserSettings.asset b/UserSettings/EditorUserSettings.asset new file mode 100644 index 0000000..8c92bc1 --- /dev/null +++ b/UserSettings/EditorUserSettings.asset @@ -0,0 +1,29 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!162 &1 +EditorUserSettings: + m_ObjectHideFlags: 0 + serializedVersion: 4 + m_ConfigSettings: + RecentlyUsedSceneGuid-0: + value: 5a5757560101590a5d0c0e24427b5d44434e4c7a7b7a23677f2b4565b7b5353a + flags: 0 + vcSharedLogLevel: + value: 0d5e400f0650 + flags: 0 + m_VCAutomaticAdd: 1 + m_VCDebugCom: 0 + m_VCDebugCmd: 0 + m_VCDebugOut: 0 + m_SemanticMergeMode: 2 + m_DesiredImportWorkerCount: 4 + m_StandbyImportWorkerCount: 2 + m_IdleImportWorkerShutdownDelay: 60000 + m_VCShowFailedCheckout: 1 + m_VCOverwriteFailedCheckoutAssets: 1 + m_VCProjectOverlayIcons: 1 + m_VCHierarchyOverlayIcons: 1 + m_VCOtherOverlayIcons: 1 + m_VCAllowAsyncUpdate: 1 + m_VCScanLocalPackagesOnConnect: 1 + m_ArtifactGarbageCollection: 1 diff --git a/UserSettings/Search.settings b/UserSettings/Search.settings new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/UserSettings/Search.settings @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/WebviewSdk_Unity_IOS.sln b/WebviewSdk_Unity_IOS.sln new file mode 100644 index 0000000..e3df5ce --- /dev/null +++ b/WebviewSdk_Unity_IOS.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp", "Assembly-CSharp.csproj", "{0F2B1753-51F1-9CA0-C8FD-890B3CE0E8FA}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0F2B1753-51F1-9CA0-C8FD-890B3CE0E8FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0F2B1753-51F1-9CA0-C8FD-890B3CE0E8FA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0F2B1753-51F1-9CA0-C8FD-890B3CE0E8FA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0F2B1753-51F1-9CA0-C8FD-890B3CE0E8FA}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/empty_PRO.sln b/empty_PRO.sln new file mode 100644 index 0000000..d9d1811 --- /dev/null +++ b/empty_PRO.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp", "Assembly-CSharp.csproj", "{C462F454-CFB0-19D2-3DDD-FA59FA8317CF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C462F454-CFB0-19D2-3DDD-FA59FA8317CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C462F454-CFB0-19D2-3DDD-FA59FA8317CF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C462F454-CFB0-19D2-3DDD-FA59FA8317CF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C462F454-CFB0-19D2-3DDD-FA59FA8317CF}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal