chore: 角色展示修复高分辨率屏幕UI错位

This commit is contained in:
m0_75251201
2025-11-19 21:40:12 +08:00
parent f80e166574
commit 48f391cd2a
20 changed files with 213 additions and 204 deletions

View File

@@ -24,6 +24,11 @@ namespace CharacterPreview
private bool canEdit = false;
private void Awake()
{
}
private void Start()
{
SetRectTransform();
SetText();
@@ -130,19 +135,23 @@ namespace CharacterPreview
rectTransform = gameObject.AddComponent<RectTransform>();
}
if (!rectTransform.parent || rectTransform.parent.name != "Canvas")
if (!rectTransform.parent)
{
var defaultCanvas = GameObject.Find("Canvas");
if (!defaultCanvas)
{
defaultCanvas = new GameObject("ControlModelMoveCanvas");
var defaultCanvas = new GameObject("ControlModelMoveCanvas");
defaultCanvas.layer = LayerMask.NameToLayer("UI");
var canvas = defaultCanvas.AddComponent<Canvas>();
canvas.renderMode = RenderMode.ScreenSpaceOverlay; // 设置渲染模式为屏幕空间覆盖
defaultCanvas.AddComponent<CanvasScaler>();
defaultCanvas.AddComponent<GraphicRaycaster>();
canvasRectTransform = defaultCanvas.transform;
}
canvas.renderMode = RenderMode.ScreenSpaceOverlay;
canvas.sortingOrder = -100;
var canvasScaler = defaultCanvas.AddComponent<CanvasScaler>();
canvasScaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
canvasScaler.referenceResolution = new Vector2(1600, 900);
canvasScaler.matchWidthOrHeight = 1f;
defaultCanvas.AddComponent<GraphicRaycaster>();
canvasRectTransform = defaultCanvas.GetComponent<RectTransform>();
canvasRectTransform.SetParent(null, false);
canvasRectTransform.SetAsFirstSibling();
rectTransform.SetParent(defaultCanvas.transform);
}
@@ -165,7 +174,7 @@ namespace CharacterPreview
buttonRect.anchorMin=Vector2.right;
buttonRect.pivot = Vector2.right;
buttonRect.sizeDelta=new Vector2(80f,30f);
buttonRect.anchoredPosition = new Vector2(-200, 100);
buttonRect.anchoredPosition = new Vector2(-80, 5);
var button = buttonObj.AddComponent<Button>();

View File

@@ -1,175 +1,175 @@
using System;
using System.Linq;
using System.Reflection;
using UnityEngine;
namespace CharacterPreview
{
public static class Load_DuckovCustomModel
{
public static ModelMove? CreateModel()
{
Action startMethod = null;
Action midMethod = null;
Action endMethod = null;
// 尝试获取 LevelManager_OnLevelBeginInitializing
try
{
Debug.Log("\n[Main Runner] 尝试获取 LevelManager_OnLevelBeginInitializing...");
startMethod =
GetPrivateStaticVoidMethod(
"DuckovCustomModel.ModEntry.LevelManager_OnLevelBeginInitializing");
Debug.Log("[Main Runner] 成功获取 LevelManager_OnLevelBeginInitializing 委托。");
}
catch (Exception ex)
{
Debug.LogError(
$"[Main Runner] <color=red>获取 LevelManager_OnLevelBeginInitializing 时发生错误:</color> {ex.GetType().Name} - {ex.Message}");
}
// 尝试获取 LevelManager_OnLevelInitialized
try
{
Debug.Log("\n[Main Runner] 尝试获取 LevelManager_OnLevelInitialized...");
midMethod = GetPrivateStaticVoidMethod(
"DuckovCustomModel.ModEntry.LevelManager_OnLevelInitialized");
Debug.Log("[Main Runner] 成功获取 LevelManager_OnLevelInitialized 委托。");
}
catch (Exception ex)
{
Debug.LogError(
$"[Main Runner] <color=red>获取 LevelManager_OnLevelInitialized 时发生错误:</color> {ex.GetType().Name} - {ex.Message}");
}
// 尝试获取 LevelManager_OnAfterLevelInitialized
try
{
Debug.Log("\n[Main Runner] 尝试获取 LevelManager_OnAfterLevelInitialized...");
endMethod = GetPrivateStaticVoidMethod(
"DuckovCustomModel.ModEntry.LevelManager_OnAfterLevelInitialized");
Debug.Log("[Main Runner] 成功获取 LevelManager_OnAfterLevelInitialized 委托。");
}
catch (Exception ex)
{
Debug.LogError(
$"[Main Runner] <color=red>获取 LevelManager_OnAfterLevelInitialized 时发生错误:</color> {ex.GetType().Name} - {ex.Message}");
}
Debug.Log("\n[Main Runner] --- 调用获取到的方法 ---");
if (startMethod != null)
{
Debug.Log("[Main Runner] 正在调用 LevelManager_OnLevelBeginInitializing...");
startMethod.Invoke();
Debug.Log("[Main Runner] LevelManager_OnLevelBeginInitializing 调用完成。");
}
else
Debug.LogWarning("[Main Runner] LevelManager_OnLevelBeginInitializing 委托为 null跳过调用。");
if (midMethod != null)
{
Debug.Log("[Main Runner] 正在调用 LevelManager_OnLevelInitialized...");
midMethod.Invoke();
Debug.Log("[Main Runner] LevelManager_OnLevelInitialized 调用完成。");
}
else
Debug.LogWarning("[Main Runner] LevelManager_OnLevelInitialized 委托为 null跳过调用。");
if (endMethod != null)
{
Debug.Log("[Main Runner] 正在调用 LevelManager_OnAfterLevelInitialized...");
endMethod.Invoke();
Debug.Log("[Main Runner] LevelManager_OnAfterLevelInitialized 调用完成。");
}
else
Debug.LogWarning("[Main Runner] LevelManager_OnAfterLevelInitialized 委托为 null跳过调用。");
// var target = DuckovCustomModel.Core.Data.ModelTarget.Character;
// using System;
// using System.Linq;
// using System.Reflection;
// using UnityEngine;
//
// Debug.Log("运行替换");
// var currentModelID = DuckovCustomModel.ModEntry.UsingModel?.GetModelID(target) ?? string.Empty;
// if (string.IsNullOrEmpty(currentModelID))
// namespace CharacterPreview
// {
// // 错误日志未能获取当前模型ID
// Debug.LogError($"[DuckovCustomModel] Failed to get current model ID for target '{target}'. Current model reference might be null or GetModelID returned null/empty. Returning null.");
// return null;
// }
// // 注意out _ 用于忽略 ModelManager 返回的第一个 out 参数
// if (!DuckovCustomModel.Managers.ModelManager.FindModelByID(currentModelID, out _, out var modelInfo))
// public static class Load_DuckovCustomModel
// {
// // 错误日志:未能找到指定的模型
// Debug.LogError($"[DuckovCustomModel] Model with ID '{currentModelID}' not found by ModelManager for target '{target}'. Returning null.");
// return null;
// }
// if (!modelInfo.CompatibleWithType(target))
// public static ModelMove? CreateModel()
// {
// // 错误日志:模型与目标不兼容
// Debug.LogError($"[DuckovCustomModel] Model '{currentModelID}' is not compatible with target '{target}'. Returning null.");
// return null;
// Action startMethod = null;
// Action midMethod = null;
// Action endMethod = null;
// // 尝试获取 LevelManager_OnLevelBeginInitializing
// try
// {
// Debug.Log("\n[Main Runner] 尝试获取 LevelManager_OnLevelBeginInitializing...");
// startMethod =
// GetPrivateStaticVoidMethod(
// "DuckovCustomModel.ModEntry.LevelManager_OnLevelBeginInitializing");
// Debug.Log("[Main Runner] 成功获取 LevelManager_OnLevelBeginInitializing 委托。");
// }
// catch (Exception ex)
// {
// Debug.LogError(
// $"[Main Runner] <color=red>获取 LevelManager_OnLevelBeginInitializing 时发生错误:</color> {ex.GetType().Name} - {ex.Message}");
// }
// Debug.Log($"inf{currentModelID}");
// // 如果前面的检查都通过,则应用模型
// DuckovCustomModel.Managers.ModelListManager.ApplyModelToTarget(target, currentModelID, true);
//
// var handlers=DuckovCustomModel.Managers.ModelManager.GetAllModelHandlers(target);
// Debug.Log($"handlers{handlers.Count}");
// Debug.Log("运行完成");
return null;
}
public static Action GetPrivateStaticVoidMethod(string fullMethodName)
{
var lastDotIndex = fullMethodName.LastIndexOf('.');
if (lastDotIndex == -1 || lastDotIndex == fullMethodName.Length - 1)
{
throw new ArgumentException($"无效的方法名格式: {fullMethodName}。应为 'Namespace.ClassName.MethodName'。");
}
var fullTypeName = fullMethodName.Substring(0, lastDotIndex);
var methodName = fullMethodName.Substring(lastDotIndex + 1);
Type targetType = null;
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{
targetType = assembly.GetType(fullTypeName);
if (targetType != null)
{
break; // 找到类型后停止搜索
}
}
if (targetType == null)
{
throw new TypeLoadException($"在任何已加载的程序集中都未找到类型: {fullTypeName}。");
}
var methodInfo = targetType.GetMethod(
methodName,
BindingFlags.NonPublic | BindingFlags.Static
);
if (methodInfo == null)
{
throw new MissingMethodException(
$"在类型 '{fullTypeName}' 中未找到名为 '{methodName}' 的私有静态方法," +
$"或者该方法不满足私有、静态、无参的条件。"
);
}
if (methodInfo.GetParameters().Length != 0)
{
throw new MissingMethodException(
$"方法 '{fullMethodName}' 存在参数,不符合无参 Action 的要求。"
);
}
if (methodInfo.ReturnType != typeof(void))
{
throw new MissingMethodException(
$"方法 '{fullMethodName}' 返回值不是 void不符合 Action 的要求。"
);
}
return (Action)methodInfo.CreateDelegate(typeof(Action));
}
}
}
// // 尝试获取 LevelManager_OnLevelInitialized
// try
// {
// Debug.Log("\n[Main Runner] 尝试获取 LevelManager_OnLevelInitialized...");
// midMethod = GetPrivateStaticVoidMethod(
// "DuckovCustomModel.ModEntry.LevelManager_OnLevelInitialized");
// Debug.Log("[Main Runner] 成功获取 LevelManager_OnLevelInitialized 委托。");
// }
// catch (Exception ex)
// {
// Debug.LogError(
// $"[Main Runner] <color=red>获取 LevelManager_OnLevelInitialized 时发生错误:</color> {ex.GetType().Name} - {ex.Message}");
// }
//
// // 尝试获取 LevelManager_OnAfterLevelInitialized
// try
// {
// Debug.Log("\n[Main Runner] 尝试获取 LevelManager_OnAfterLevelInitialized...");
// endMethod = GetPrivateStaticVoidMethod(
// "DuckovCustomModel.ModEntry.LevelManager_OnAfterLevelInitialized");
// Debug.Log("[Main Runner] 成功获取 LevelManager_OnAfterLevelInitialized 委托。");
// }
// catch (Exception ex)
// {
// Debug.LogError(
// $"[Main Runner] <color=red>获取 LevelManager_OnAfterLevelInitialized 时发生错误:</color> {ex.GetType().Name} - {ex.Message}");
// }
//
// Debug.Log("\n[Main Runner] --- 调用获取到的方法 ---");
// if (startMethod != null)
// {
// Debug.Log("[Main Runner] 正在调用 LevelManager_OnLevelBeginInitializing...");
// startMethod.Invoke();
// Debug.Log("[Main Runner] LevelManager_OnLevelBeginInitializing 调用完成。");
// }
// else
// Debug.LogWarning("[Main Runner] LevelManager_OnLevelBeginInitializing 委托为 null跳过调用。");
//
// if (midMethod != null)
// {
// Debug.Log("[Main Runner] 正在调用 LevelManager_OnLevelInitialized...");
// midMethod.Invoke();
// Debug.Log("[Main Runner] LevelManager_OnLevelInitialized 调用完成。");
// }
// else
// Debug.LogWarning("[Main Runner] LevelManager_OnLevelInitialized 委托为 null跳过调用。");
//
// if (endMethod != null)
// {
// Debug.Log("[Main Runner] 正在调用 LevelManager_OnAfterLevelInitialized...");
// endMethod.Invoke();
// Debug.Log("[Main Runner] LevelManager_OnAfterLevelInitialized 调用完成。");
// }
// else
// Debug.LogWarning("[Main Runner] LevelManager_OnAfterLevelInitialized 委托为 null跳过调用。");
// // var target = DuckovCustomModel.Core.Data.ModelTarget.Character;
// //
// // Debug.Log("运行替换");
// // var currentModelID = DuckovCustomModel.ModEntry.UsingModel?.GetModelID(target) ?? string.Empty;
// // if (string.IsNullOrEmpty(currentModelID))
// // {
// // // 错误日志未能获取当前模型ID
// // Debug.LogError($"[DuckovCustomModel] Failed to get current model ID for target '{target}'. Current model reference might be null or GetModelID returned null/empty. Returning null.");
// // return null;
// // }
// // // 注意out _ 用于忽略 ModelManager 返回的第一个 out 参数
// // if (!DuckovCustomModel.Managers.ModelManager.FindModelByID(currentModelID, out _, out var modelInfo))
// // {
// // // 错误日志:未能找到指定的模型
// // Debug.LogError($"[DuckovCustomModel] Model with ID '{currentModelID}' not found by ModelManager for target '{target}'. Returning null.");
// // return null;
// // }
// // if (!modelInfo.CompatibleWithType(target))
// // {
// // // 错误日志:模型与目标不兼容
// // Debug.LogError($"[DuckovCustomModel] Model '{currentModelID}' is not compatible with target '{target}'. Returning null.");
// // return null;
// // }
// // Debug.Log($"inf{currentModelID}");
// // // 如果前面的检查都通过,则应用模型
// // DuckovCustomModel.Managers.ModelListManager.ApplyModelToTarget(target, currentModelID, true);
// //
// // var handlers=DuckovCustomModel.Managers.ModelManager.GetAllModelHandlers(target);
// // Debug.Log($"handlers{handlers.Count}");
// // Debug.Log("运行完成");
//
// return null;
// }
//
// public static Action GetPrivateStaticVoidMethod(string fullMethodName)
// {
// var lastDotIndex = fullMethodName.LastIndexOf('.');
// if (lastDotIndex == -1 || lastDotIndex == fullMethodName.Length - 1)
// {
// throw new ArgumentException($"无效的方法名格式: {fullMethodName}。应为 'Namespace.ClassName.MethodName'。");
// }
//
// var fullTypeName = fullMethodName.Substring(0, lastDotIndex);
// var methodName = fullMethodName.Substring(lastDotIndex + 1);
// Type targetType = null;
// foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
// {
// targetType = assembly.GetType(fullTypeName);
// if (targetType != null)
// {
// break; // 找到类型后停止搜索
// }
// }
//
// if (targetType == null)
// {
// throw new TypeLoadException($"在任何已加载的程序集中都未找到类型: {fullTypeName}。");
// }
//
// var methodInfo = targetType.GetMethod(
// methodName,
// BindingFlags.NonPublic | BindingFlags.Static
// );
// if (methodInfo == null)
// {
// throw new MissingMethodException(
// $"在类型 '{fullTypeName}' 中未找到名为 '{methodName}' 的私有静态方法," +
// $"或者该方法不满足私有、静态、无参的条件。"
// );
// }
//
// if (methodInfo.GetParameters().Length != 0)
// {
// throw new MissingMethodException(
// $"方法 '{fullMethodName}' 存在参数,不符合无参 Action 的要求。"
// );
// }
//
// if (methodInfo.ReturnType != typeof(void))
// {
// throw new MissingMethodException(
// $"方法 '{fullMethodName}' 返回值不是 void不符合 Action 的要求。"
// );
// }
//
// return (Action)methodInfo.CreateDelegate(typeof(Action));
// }
// }
//
//
// }

View File

@@ -13,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("CharacterPreview")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+8fcbdc5649e0b93fd1b771001f53cdbb81da2c78")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f80e166574440cab3e79aa821c572831e67aeaa3")]
[assembly: System.Reflection.AssemblyProductAttribute("CharacterPreview")]
[assembly: System.Reflection.AssemblyTitleAttribute("CharacterPreview")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View File

@@ -1 +1 @@
a35a52a5782dcfa53768ea1eb0acd5bd17c1e3d2dfc5d618e23c884a1a098d9e
05e90921b2a98aacac8b6099088a4d8164f9fc1fcc89a7c22fac40e610c06d8f

View File

@@ -13,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("CharacterPreview")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+bef0d4379272d5efa12a376799b16fdaaed6b62f")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f80e166574440cab3e79aa821c572831e67aeaa3")]
[assembly: System.Reflection.AssemblyProductAttribute("CharacterPreview")]
[assembly: System.Reflection.AssemblyTitleAttribute("CharacterPreview")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View File

@@ -1 +1 @@
a42f5308ba7e48ab4e94e1da1f5b2ea1c754320ab8ae20476f1311f0955685b5
c6cacdc0ed3d22de32e004ea661d80af6e373d555843cee095f7aecbcd915537

View File

@@ -13,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("折纸的小箱子")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.1")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.1+8fcbdc5649e0b93fd1b771001f53cdbb81da2c78")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.1+f80e166574440cab3e79aa821c572831e67aeaa3")]
[assembly: System.Reflection.AssemblyProductAttribute("HideCharacter")]
[assembly: System.Reflection.AssemblyTitleAttribute("HideCharacter")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.1")]

View File

@@ -1 +1 @@
2a2aab917c9869a2c45025a35579f7c6e03404be00ce574a62d12c32df38a826
33b6d87c693d3b54f0206eade7075630d13972c437fbd6af17896ab9081fdc0a

View File

@@ -13,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("HitFeedback")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+8fcbdc5649e0b93fd1b771001f53cdbb81da2c78")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f80e166574440cab3e79aa821c572831e67aeaa3")]
[assembly: System.Reflection.AssemblyProductAttribute("HitFeedback")]
[assembly: System.Reflection.AssemblyTitleAttribute("HitFeedback")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View File

@@ -1 +1 @@
443c8a898256e461af19611af44d76c4c5616c60885973a9cda418947ee407d3
2616537ee3639e87ba500e907be87c5e2e8237cc9b3bde98d1ec1685078eab89

View File

@@ -13,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("折纸的小箱子")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+8fcbdc5649e0b93fd1b771001f53cdbb81da2c78")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f80e166574440cab3e79aa821c572831e67aeaa3")]
[assembly: System.Reflection.AssemblyProductAttribute("SceneSnapshot")]
[assembly: System.Reflection.AssemblyTitleAttribute("SceneSnapshot")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0")]

View File

@@ -1 +1 @@
590d57221818e8b762b4140d886b2c5824a0053ca74f5a40c363ae1a24c1039f
48ac337bb1ae1dd0e30c38543b75be944212d9d45892d5d1e7cc2fbe4d2d15c7

View File

@@ -13,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("SceneView")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+8fcbdc5649e0b93fd1b771001f53cdbb81da2c78")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f80e166574440cab3e79aa821c572831e67aeaa3")]
[assembly: System.Reflection.AssemblyProductAttribute("SceneView")]
[assembly: System.Reflection.AssemblyTitleAttribute("SceneView")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View File

@@ -1 +1 @@
27d2423ec537faeeea9ad6f4f91f131258e292f1d7b1155cf4c559a110c9b70f
b76cd476cff59e95955c5e7a257eb919538759713401f8555741d66b510fe7fd

View File

@@ -13,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Theme")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+8fcbdc5649e0b93fd1b771001f53cdbb81da2c78")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f80e166574440cab3e79aa821c572831e67aeaa3")]
[assembly: System.Reflection.AssemblyProductAttribute("Theme")]
[assembly: System.Reflection.AssemblyTitleAttribute("Theme")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View File

@@ -1 +1 @@
7b201eac8de5f98d2c3f0e656ea706dfc6d473a4725019b2237bd4195be7634f
097766bcceef28c8994e43b3b7081bdc06d95c61971394e2d6d9c526594316fe

View File

@@ -13,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("UIFrame")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+8fcbdc5649e0b93fd1b771001f53cdbb81da2c78")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f80e166574440cab3e79aa821c572831e67aeaa3")]
[assembly: System.Reflection.AssemblyProductAttribute("UIFrame")]
[assembly: System.Reflection.AssemblyTitleAttribute("UIFrame")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View File

@@ -1 +1 @@
a278f4017796d0bef86ddcaf9129657ead4f6b174a40f02c4f4ab4151541afdf
eeb3989be2c5ee0a6dee4e1e8df8c1c039c434aaddbcf87da999a2255ec83e27